目录
docker
介绍
docker是虚拟化中的一种容器技术
什么是虚拟化呢?
在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件 对资源充分利用
虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。
# kvm:开源的免费的 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中
# exsi:vmware商用的,装在裸机上,可以虚拟化出很多机器
# openstack(python开发的,开源的):电信云,华为云 openstack 管理云平台
# 阿里云(自研,阿里飞天):云服务器,到一个网站,点点---》付款--》完成
# docker:容器技术
# k8s:多机容器管理,容器编排
docker的由来
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 [GitHub](https://github.com/docker/docker) 上进行维护
Docker 项目的目标是实现【轻量级的操作系统虚拟化解决方案】。 Docker 的基础是 Linux 容器(LXC)等技术。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的【容器就像操作一个快速轻量级的虚拟机】一样简单。
容器跟虚拟机的比较
虚拟机
一台服务器,要装操作系统(Linux),再用虚拟化的软件在虚拟化出机器,还需要在虚拟化出来的机器上 装操作系统,装一些二进制的可执行文件。每一台虚拟化出的机器都要遵循这个步骤
docker
在一台服务器上装操作系统,在装docker软件,用docker软件去虚拟化机器不需要再去装操作系统就可以直接装软件,依赖服务器的操作系统。
Docker的概念
本身也是一个cs架构软件, 客户端要和服务端通信,使用的是http协议,符合resful规范。
镜像重要
镜像就是一堆文件,相当于虚拟机装了操作系统,然后又装的软件后产生的一个vmdk文件。 相当于我们封装操作系统的概念。eg: iso文件 GHO文件 ,
容器重要
镜像运行起来就是一个安装好操作系统和软件的容器(虚拟机)
在python中 的类 就很像镜像 有一堆属性, 类产生的对象就类似与容器。
Registry(注册中心)
镜像都是从注册中心拉下来的
docker安装
windows平台
https://www.docker.com/products/docker-desktop/
需要下载软件,一路下一步安装
centos
如果有的话先卸载
yum remove docker docker-common docker-selinux docker-engine
删除目录
rm -rf /var/lib/docker
安装
# 依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 下载docker
sudo yum install docker-ce
# 查看版本
docker -v # Docker version 23.0.3, build 3e7cbfd
docker镜像
# 可以在这个网址上搜索
https://hub.docker.com/
"能搜到就可以在docker里下载"
因为是国外的网站下载可能比较慢,可以配置镜像源
修改源
sudo mkdir -p /etc/docker # 创完docker就会有这个文件夹一般不用在创建
vim /etc/docker/daemon.json
# 把下面的东西复制进去
{
"registry-mirrors": ["自己去阿里云上搜镜像服务里的镜像加速"]
}
# 保存退出后执行下列代码重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
docker命令
查看docker状态
systemctl status docker
启动
systemctl start docker
停止
systemctl stop docker
重启
systemctl restart docker
开机启动
systemctl enable docker
查看docker概要信息
docker info
需要关注的地方 下图

搜索镜像
docker search 镜像名
# 建议直接去 网站搜索 看起来比较舒服
拉取镜像重要
# 先去docker网站搜到后下载对应的版本
docker pull centos:7
不指定 : 版本则默认最新版
查看本地镜像
docker images
docker images -q # 查出所有镜像id号
删除镜像
需要先查看镜像,复制id删除,
docker rmi 镜像id号 可以跟多个
删除所有镜像
docker rmi `docker images -q`
容器相关命令
查看正在运行的容器
docker ps # 查看正在运行的容器
docker ps -a # 查所有容器
docker ps -l # 查最后一次运行的容器
创建运行容器重要
如果容器没有创建,直接执行run,就会创建并运行,所以你只需要会run就行了
run 的时候,有很多参数
-i:表示运行容器
-t:表示容器启动后会进入容器命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)
-name :为创建的容器命名,如果不写,随机生成一个名字
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
创建并进入容器
docker run -it 镜像:标签 # 自动起名
docker run -it --name=容器名 镜像:标签
docker run -it --name=mycentos centos:7
创建不进入容器
docker run -id --name=容器名 镜像:标签
docker run -id 镜像:标签 # 自动起名
退出容器
退出后容器就会停止运行
exit
启动容器
启动容器并不会进入容器
docker start mycentos
进入到容器内部
本质是让进入容器命令行
# 用容器执行命令
docker exec 容器id 命令
docker exec d8cc8e182637 mkdir lxj #创建文件夹
docker exec d8cc8e182637 ls # 查看
# 进入容器 /bin/bash 相当于交互式命令行
docker exec -it d8cc8e182637 /bin/bash
exit 断开链接
容器目录映射
在宿主机新建一个目录,在目录下可以创建一个txt文件
# 创建一个容器并做映射
-v 宿主机目录/容器目录
docker run -id --name=lqz -v /home/lxj:/lxj centos:7
"随意修改文件内容,会发现容器里和宿主机的文件都发生了改变 , 也可以新建文件"
容器端口映射
我们在容器中启动一个mysql 5.7 会监听容器中的3306端口
宿主机的3306端口没有监听,我们可以任意指定一个 端口与 容器的3306端口做映射
这样访问宿主机我们指定的端口就会访问到 容器中的mysql
# 启动一个 mysql容器并做映射
-p 宿主机端口:容器端口
"第一次启动mysql需要设置管理密码"
docker run -id --name=mysql -p 80:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# 查看端口占用情况
netstat -nlp |grep 80
在Navicat 就可以用虚拟机/阿里云的ip地址 +80端口连接上容器的mysql
容器停止后无法操作数据库。容器删除 库也会消失