commit镜像(提交镜像)

  1. docker commit 提交成为一个新的版本
  2. docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
  3. # 命令和git类似
  4. [root@docker1-60 ~]# docker commit -m="add webapps app" -a="lvyufei" 6342 tomcat01:1.0
  5. [root@docker1-60 ~]# docker image ls
  6. REPOSITORY TAG IMAGE ID CREATED SIZE
  7. tomcat01 1.0 24aa786ed4ed About an hour ago 445MB
  8. tomcat 10-jdk11-adoptopenjdk-hotspot d049a5118907 5 days ago 441MB
  9. [root@docker1-60 ~]# docker run -d tomcat01:1.0 -p 8081:8080 --name tomcat02

数据卷挂载

指定路径挂载

[root@docker1-60 ~]# docker run -it -v /home/test:/home centos:centos7.5.1804 bash
[root@docker1-60 ~]# docker inspect 9af5814b252d
"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/test",        
                "Destination": "/home",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

[root@docker1-60 ~]# 
[root@docker1-60 ~]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d/ -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 
ce7a9dfd5681450bec41a8c4e16e19cbb5e8fe7e4385e74337bfd4be8906ab50
[root@docker1-60 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
ce7a9dfd5681        mysql:5.7           "docker-entrypoint.s…"   5 seconds ago       Up 3 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql01

具名和匿名挂载

#匿名挂载
-v 容器内路径
-P 大P 随机端口
[root@docker1-60 ~]# docker run -d -p 80:80 --name nginx01 -v /etc/nginx  nginx:1.19.0 
[root@docker1-60 ~]# docker volume ls
DRIVER              VOLUME NAME
local               89d0b3f824f1a0e4be8f93ba5328535c1062f5812b16fecd3c90e5c923897356
#具名挂载
[root@docker1-60 ~]# docker run -d -P --name nginx00 -v juming-nginx:/etc/nginx  nginx:1.19.0
[root@docker1-60 ~]# docker volume ls
DRIVER              VOLUME NAME
local               89d0b3f824f1a0e4be8f93ba5328535c1062f5812b16fecd3c90e5c923897356
local               juming-nginx

image.png
所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx/_data
我们通过具名挂载可以方便的找到我们的一个卷,大多时候使用具名挂载

#如何确定是具名挂载还是匿名挂载,还是指定路径挂载呢!
-v 容器内路径               #匿名挂载
-v 卷名:容器内路径          #具名挂载
-v  /宿主机路径:容器内路径   #指定路径挂载

拓展

# 通过 -v 容器内路径:ro rw 改变读写权限
ro  readonly #只读
rw   readwrite  #可读可写
# 一旦这个设置了容器权限,容器对我们挂载出来的内容就有限制了!
docker run -d -P --name nginx00 -v juming-nginx:/etc/nginx:ro  nginx:1.19.0
docker run -d -P --name nginx00 -v juming-nginx:/etc/nginx:rw  nginx:1.19.0
# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部无法操作(默认是rw)

dockerfile初识

# 创建一个dockerfile文件,名字可以随机,建议Dockerfile
# 文件中的内容 指令(大写)参数
在构建容器时直接挂载数据卷
[root@docker1-60 home]# vim dockerfile 
FROM centos:centos7.5.1804
VOLUME ["volume01","volume02"]
CMD echo "---end---"
CMD /bin/bash
# 构建
docker build -f dockerfile -t lvyufei-centos:1.2 dockerfile文件路径
[root@docker1-60 home]# docker build -f dockerfile -t lvyufei-centos:1.2 .
# 这里的每一个命令就是镜像的一层

image.png

数据卷容器

多个容器共享数据
—volumes-from (不加此选项的话开启的容器虽然有相同目录但是看不到别人共享的数据)
image.png

# 启动3个容器
启动docker01
[root@docker1-60 ~]# docker run -it --name docker01 lyf_contos:1.0 
[root@91a068a4b707 /]# ls /home/
volume01  volume02
启动docker02
[root@docker1-60 home]# docker run -it --name docker02 --volumes-from docker01  lyf_contos:1.0
启动docker03
[root@docker1-60 home]# docker run -it --name docker03 --volumes-from docker02  lyf_contos:1.0
启动docker04 (不使用--volumes-from)
[root@docker1-60 ~]# docker run -it --name docker04  lyf_contos:1.0

可以看到,使用—volumes-from时开启的容器在宿主机时同样的目录,而不使用—volumes-from时则是另外的目录
image.png
多个mysql实现数据共享

[root@docker1-60 ~]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d/ -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 
[root@docker1-60 ~]# docker run -d -p 3306:3306  -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7