commit镜像(提交镜像)
docker commit 提交成为一个新的版本docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]# 命令和git类似[root@docker1-60 ~]# docker commit -m="add webapps app" -a="lvyufei" 6342 tomcat01:1.0[root@docker1-60 ~]# docker image lsREPOSITORY TAG IMAGE ID CREATED SIZEtomcat01 1.0 24aa786ed4ed About an hour ago 445MBtomcat 10-jdk11-adoptopenjdk-hotspot d049a5118907 5 days ago 441MB[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

所有的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 .
# 这里的每一个命令就是镜像的一层

数据卷容器
多个容器共享数据
—volumes-from (不加此选项的话开启的容器虽然有相同目录但是看不到别人共享的数据)
# 启动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时则是另外的目录
多个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
