docker 进阶
一、提交镜像1、docker commit制作镜像,保留当前快照①、docker commit --help-a 作者-c-m 提交信息-p提交期间暂停容器,默认为 true②、docker commit -a=“admin” -m=“更新tomcat镜像” tomcat01 tomcat01:9.99第一个 tomcat01 为需要提交的容器,第二个 tomcat01:9.99 为镜像的名字个版
文章目录
简介
学习docker教程 https://www.bilibili.com/video/BV1og4y1q7M4?p=30&spm_id_from=pageDriver主要以记笔记为主,可能有些描述不太准确,希望能帮到你
重要
docker 默认所有的数据都在 /var/lib/docker/ 路径下
一、导出和导入容器
1、export 和 import
docker 文档 https://docs.docker.com/engine/reference/commandline/import/
①、导出容器 export
如果要导出本地某个容器,可以使用 docker export 命令,如果不指定导出目录,默认为当前目录
docker export grafana_diy_test > /root/docker/tar/grafana_diy.tar
②、导入镜像 import
可以使用 docker import 从容器快照文件中再导入为镜像,如果不指定 tag,则默认为 latest
docker import /root/Desktop/docker/tar/grafana_diy.tar grafana:1.0.1
2、save 和 load
官方文档:https://docs.docker.com/engine/reference/commandline/load/,将地址中 load 换成 save 即为 load说明
①、导出镜像 save
将一张或多张图像保存到 tar 存档(默认流式传输到 STDOUT),如果只有该镜像只有一个版本,可以不带版本号
docker save -o grafana.tar grafana:1.0.0
或
docker save grafana:1.0.0 > grafana.tar
使用 gzip 来压缩保存镜
docker save grafana:1.0.0 | gzip > grafana.tar.gz
②、导入镜像 load
加载 save 打包的镜像
3、两种导入导出区别
- export 打包容器,save 打包镜像,import 和 load 都是将 tar 恢复为镜像
- load 不能对镜像重命名,import可以重命名并制定版本
- export 导入 tar 的大小小于 save,export 不包含历史版本
- export 不适用于复合镜像,适用于单独镜像(单独镜像 - centos,复合镜像 - 基于 centos 生成的 grafana)
- 两种组合不支持混用,建议使用 save,load
二、提交镜像
1、docker commit
制作镜像,保留当前快照
①、docker commit --help
-a 作者 -m 提交信息 -p 提交期间暂停容器,默认为 true
②、docker commit -a=“admin” -m=“更新tomcat镜像” tomcat01 tomcat01:9.99
第一个 tomcat01 为需要提交的容器,第二个 tomcat01:9.99 为镜像的名字个版本(tag)
2、docker push
上传镜像到 仓库,以 dockerhub为例
docker push --help
①、首先登陆 docker hub
docker login 首次登陆输入用户名密码即可
②、制作镜像 (注意镜像名需要携带 dockerhub 用户名 yelingyun/tomcat:9.99)
docker commit -a="admin" -m="提交tomcat镜像" tomcat01 yelingyun/tomcat:9.99
因为网络慢可能会错误,重新 push 一次即可解决,或者安装加速器
③、docker push
docker push yelingyun/tomcat01:9.99
上传成功
三、docker 容器数据卷
-
容器之间共享数据,docker 容器中产生的数据同步到宿主机。
-
将容器内部的路径挂在到本地数据路径,容器间也可以挂载
1、使用命令 -V 挂载
类似双向绑定,无论容器内部 或者宿主机发生变化,另一个都会变化,如果删除容器,宿主机数据并不会删除
docker run -it -v 主机目录:容器目录
docker run -itd --name centos_ye -v /root/test/:/root/ centos
进入容器,再容器内部 /root/ 目录下添加文件
docker exec -it centos_ye /bin/bash
cd /root
touch test.js
vi test.js # 随便插入一些东西
exit 或者 ctrl + Q + P 退出容器
进入宿主机 /root/test/ 目录下可以看到 容器内添加的文件
使用 docker inspect centos_ye 查看容器详细信息
拓展:
- 一旦设置容器权限,容器挂载出来的内容就有限定了,默认 rw 可读可写
- ro 说明这个路径只能通过宿主机来操作,容器内部无法操作
# readonly 只读
docker run -itd --name centos_ye -v /root/test/:/root/:ro centos
# readwrite 可读可写
docker run -itd --name centos_ye -v /root/test/:/root/:rw centos
2、dockerfile 挂载
使用 volume 匿名挂载,会在 容器内部 生成两个卷目录,将这两个卷默认挂载在宿主机,使用 docker inspect 可以查看
①、新建 dockerfile 文件
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "--------end----------"
# 默认启动命令
CMD /bin/bash
②、使用 dockerfile 制作镜像
# -f dockerfile 文件路径 -t 镜像名字版本(tag) . 必带
docker build -f dockerfile -t yelingyun/centos_ye:9.99 .
③、新建容器
docker run -it --name contos_ye yelingyun/centos_ye:9.99 /bin/bash
四、启动 mysql 容器
注意必须要设置密码,通常会使用 -v 挂载配置文件以及数据目录
# -e 环境配置,-v 挂载目录 可以写多个,-p 端口映射
docker run -d -p 8080:3306 --name mysql_my -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql mysql
测试连接,连接成功
修改数据,挂载目录会生效,删除容器,宿主机目录不会消失
五、具名和匿名挂载
使用 -v 挂载时没有给宿主机指定目录,那么docker 会将容器目录挂载到 /var/lib/docker/volumes/ 下
1、匿名挂载
使用 -v 挂载时没有给宿主机指定目录,那么docker 会将容器目录挂载到 /var/lib/docker/volumes/ 下,随机生成一个目录名字
docker volume --help
匿名挂载 nginx
# -P 随机映射端口,容器端口都是默认的,宿主机随机端口映射容器端口,比如mysql默认3306,redsi 6793,nginx 80
docker run -d -P --name nginx_ye -v /etc/nginx nginx
docker volume ls
docker inspect nginx_ye
2、具名挂载
具名挂载。使用 -v 时,没有指定宿主机路径,而是使用别名代替,与匿名挂载同样docker 会将容器目录挂载到 /var/lib/docker/volumes/ 目录,区别匿名挂载就是,匿名挂载名字随机生成
docker run -d -P --name nginx_ye2 -v nginx_volume:/etc/nginx
docker volume ls
nginx_volume 卷名
docker volume inspect nginx_volume
查看挂载的具体位置
cd /var/lib/docker/volumes/nginx_volume/_data/
查看 nginx 具名挂载配置文件
六、具名挂载、匿名挂载、指定路径挂载区别
指定路径挂载
# -v 宿主机路径:容器路径
-v /home/mysql/data:/var/lib/mysql mysql
具名挂载
# 不指定宿主机路径,指定一个卷名 nginx_volume
-v nginx_volume:/etc/nginx
匿名挂载
# 啥也不是,啥也没有
-v /etc/nginx
七、容器间挂载
容器和容器和宿主机之间共享同步数据
两个mysql 同步数据
新建两个容器, centos01 挂载 /var 目录到宿主机,centos02 使用 --volumes-from 共享 centos01 的挂载目录,类似继承关系,centos01 ,centos02 ,宿主机 无论哪一个修改挂载的目录都会生效。
1、centos01
docker run -it --name centos01 -v /var centos /bin/bash
新建 koko.java
2 、centos02
docker run -it --name centos02 --volumes-from centos01 centos /bin/bash
新建 oppo.java
centos01 和 centos02 挂载目录相同
3、宿主机
新建 vivo,java
更多推荐
所有评论(0)