简介

学习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
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐