docker使用一目了然
一、docker使用
linux
了解镜像、容器和卷
1、docker镜像可以想象成一个已经打包好服务的iso
2、容器可以想象成一个虚拟出来的主机
3、卷可以想象成一个虚拟出来外接硬盘
4、有了容器那么想要通信肯定少不了网络
使用建议
1、第一次接触docker,建议在联网环境使用。
2、首次使用建议更换成国内镜像源。
1、基础操作
1.1查看docker版本
docker version
1.2 更换成国内镜像源
https://registry.docker-cn.com #中国官方镜像加速网址
http://hub-mirror.c.163.com #网易的镜像网址
vim /etc/docker/daemon.json
{
“registry-mirrors”: [
“https://registry.docker-cn.com”,
“http://hub-mirror.c.163.com” ]
}
保存后重新加载配置并重启docker
systemctl daemon-reload
systemctl restart docker
1.3 查询所有镜像
docker search 镜像名
举例
docker search centos #查找centos相关的镜像
1.4 拉取镜像
这里说明一下会默认拉取标签也就是tag为latest标签的镜像。
latest标签:最新版镜像的标签
建议拉取latest标签镜像
docker pull 镜像名
或者
docker pull 镜像名:标签
举例
以下两条命令结果一样
docker pull centos
docker pull centos:latest
2、操作命令
2.1 对镜像的操作
2.1.1 查看所有镜像
docker images #查看所有镜像
docker images -q #查看所有镜像的ID
2.1.2 查看某一个镜像详细信息
docker image inspect 镜像名:标签
举例
1、docker image inspect centos:latest #查看镜像的所有信息
2、docker image inspect centos:latest | grep -i version #查看镜像版本
2.1.3 镜像运行,生成容器
docker run
必要参数
–name 容器名称常用参数
-d #后台运行生成容器
-h #主机名称
-p #端口映射 本机端口:docker容器端口
-v #卷
-ti 的意思是在镜像创建容器时生成一个可交互终端,t 终端,i 交互
–net= #配置docker 的网络,在2.4章节会详细说明
–net=bridge 这个是默认值,连接到默认的网桥。host,container,none,bridge
注意镜像名称一定要放最后
docker run 参数 镜像名称
举例
docker run --name mynginx -h testhost -p 81:80 -d nginx
2.1.4 删除镜像
docker rmi 镜像ID
强制删除
docker rmi -f 镜像ID
删除注意事项:
1、不能有该镜像的容器在,应先删除容器
2.1.5 镜像的导出和导入
导出
docker save -o 自定义名称.tar 镜像ID
导入
docker load --input 自定义名称.tar
举例
导出
docker save -o mycent.tar 镜像ID号
导入
docker load --input mycent.tar
2.2 对容器的操作
2.2.1 查看容器信息
docker ps -a
2.2.2 停止容器
docker stop 容器id
2.2.3 运行容器,重启容器
docker start 容器id
重启容器
docker restart 容器id
2.2.4删除容器
docker rm 容器ID
强制删除
docker rm -f 容器id
2.2.5 对所有容器操作
举例:停止所有容器
docker stop $(docker ps -a |awk ‘{print $1}’)
2.2.6 进入容器
docker exec -it 容器ID bash
2.2.7 将容器打包成镜像
docker commit
参数:
-a :提交镜像的作者;-a “baizi”
-m :提交描述;
-p :在commit时,将容器暂停;
-c :使用Dockerfile指令来创建镜像。docker commit -a “作者” -m “描述” 容器ID 新的镜像名:镜像标签(默认:latest)
举例
docker commit -a “baizi” -m “this baiziya test” 容器ID mynginx:latest
docker commit -a “baizi” -m “this baiziya test” 容器名 mynginx:latest
用docker images 命令就可以看到了,也可以导出
2.3 对卷的操作
1、卷就是类似一个硬盘,一个存储设备。
2、卷会在宿主机生成一个卷文件夹默认是在 /var/lib/docker/volumes
为更容易理解卷,卷的对应信息表
docker容器 | 宿主机 | |
---|---|---|
卷的路径 | 自定义容器挂载路径 | /var/lib/docker/volumes/卷ID文件夹 |
卷的路径 | /opt/vo1 | /var/lib/docker/volumes/卷ID文件夹 |
卷可实现:
第一种情况:容器A可以称为父数据卷容器
第二种同级关系挂载
卷的这部分内容注意查看加粗部分的命令
2.3.1 镜像创建容器时添加卷
docker run -v 虚拟机中的卷挂载路径 其他参数 镜像名
举例
在容器中生成一个 /opt/vo1 文件夹,并挂载卷。
docker run --name mynginx -v /opt/vo1 -h testhost -p 81:80 -d nginx
2.3.2 创建卷后,再用容器挂载卷
创建名字为 testvolume 的卷 ,限制大小为2m,设备类型为tmpfs(好像限制大小只支持tmpfs类型)
docker volume create --name testvolume -o o=size=2m -o device=tmpfs -o type=tmpfs
-o 后面接的参数
o=size= #规定卷大小
type= #规定卷类型
device= #规定设备类型
将卷testvolume挂载到容器中
docker run -v testvolume:/opt/vo1 -d --name mycentos centos
挂载容器内卷
–volumes-from 容器名
将容器centos内的挂载卷,同时挂载到容器nginx
docker run --name mynginx --volumes-from mycentos -p 81:80 -d nginx
2.3.3 删除卷
删除所有没有连接容器的卷
docker volume prnue
删除某个卷
注意:删除容器的时候并不会删除卷,有容器连接的时候,不能删除卷
docker volume rm 卷名
docker volume rm testVolume
删除容器顺便删除所附带的卷
docker rm -v 容器ID
2.3.4 查看卷
查看卷列表
docker volume ls
查看不再使用的卷
docker volume ls --filter dangling=true
2.3.5 卷的备份与恢复
卷既然是存放和共享数据的,那肯定少不了备份与恢复操作
个人感觉有点鸡肋,可以手动去存放卷的宿主机目录下进行压缩备份,等下次创好新卷再解压进去就行了。
容器数据的备份
原理:创建一个新的容器并挂载卷,然后把数据备份到卷中。然后把容器删除即可
命令
docker run --rm --volumes-from testv1 --name test nginx tar cvf /opt/vo1/data1.tar home
命令解释
用nginx镜像创建一个test容器,挂载 testv1挂载的卷,执行tar压缩命令将test容器内的/home目录压缩成data1.tar 并存放在/opt/vo1目录下。然后删除test容器。命令结束。
进入宿主机的卷文件夹中就可以看到多了data1.tar压缩文件,就可以将此移动到其他地方存放。
docker run
–rm #删除容器
–volumes-from testv1 #选择testv1数据卷容器 --name test nginx #用nginx镜像来创建一个test容器 tar cvf /opt/vo1/data1.tar /opt/vo1 #将容器中的/opt/vo1目录,压缩到挂载卷(/opt/vo1/)目录下的data1.tar
恢复操作
原理:创建一个镜像并挂载一个新的卷,把备份的数据解压进去即可
创建并挂载载前面已经说明,这里就进行恢复就好
docker run --v testv1 --name test nginx tar xvf /opt/vo1/data1.tar
2.4 对网络的管理
docker network
参数:
connect :将容器连接到网络
create :创建一个网络
disconnect: 取消容器连接网络
ls:查看网络列表
inspect:查看详细信息
prune:删除没有使用的网络
rm:删除某一个网络
网络模式对应关系
模式 | 解释 | 优点 | 缺点 |
---|---|---|---|
host | 共用宿主机的网卡,利用端口映射的方式 | 速度较快 | 占用宿主机的端口 |
containe | 类似建立一个共享网卡,使多个容器共用一个网卡 | 看起来比较简约 | ip和端口映射 |
none | 仅有lo网卡,容器相当于没接网线的电脑 | 安全性高 | 不能联网 |
bridge | 桥接网卡,默认使用 | 方便自动创建 | ifconfig命令显示 |
网络模式配置命令
在创建容器的时候添加的参数
–net=host
–net=container:容器ID
–net=none
–net=bridge
命令使用举例
#创建一个test容器网卡模式为host
docker run --net=host --name=test nginx
#创建一个test1容器与test容器共用一网卡
docker run --net=container:test --name=test1 nginx
#创建test2容器网卡模式为none
docker run --net=none --name=test2 nginx
#创建test3容器,网卡模式为bridge
docker run --name=test3
思考:
多台宿主机的docker容器如何相互通信
方法1:
1、将两个宿主机的docker0修改为两个网段
2、两台宿主机之间分别写入静态路由
修改docker网段:
vim /etc/docker/daemon.json
192.168.0.1指的是给docker0的ip,/24指的是子网掩码255.255.255.0
{
“bip”:“192.168.0.1/24”
}
重启docker
systemtl restart docker
验证
ifconfig |grep -i docker -A 5
写静态路由:
主机A:
route add -net 主机B的docker网段 netmask 主机B的docker子网掩码 gw 主机B的IP地址
主机B:
route add -net 主机A的docker网段 netmask 主机A的docker子网掩码 gw 主机A的IP地址
两边互ping docker0网卡即可
3、dockerfile与docker-compose的区别
dockerfile:用来构建镜像。
举例:安装java服务,并打包成镜像。
dockerfile工作过程:
1、用一个初始镜像来生成一个新的容器,
2、将java压缩包解压到容器中相应文件夹,
3、配置java环境变量
4、测试java是否安装成功
5、将容器打包成新的镜像。
6、docker images 可看到新的镜像存在。
docker-compose:编排服务
4、dockerfile与docker-compose的使用
欢迎提出建议和疑问。白子原创,请勿随意盗用。谢谢大家支持。有什么需要快速了解的技术可联系我