进入镜像仓库搜索mysql
https://hub.docker.com
Start a mysql server instancedocker run -d --name mysql01 -e MYSQL_ROOT_PASSWORD="root" -p 33006:3306 mysql:5.7 docker image ls docker ps docker inspect mysql01 | grep -i -A 10 mounts # 查看容器的volume卷的挂载情况 docker volume ls # 查看所有容器的volume卷的挂载情况 # 进入容器 docker exec -it mysql01 /bin/bash # 进入一个新开的容器终端tty docker attach mysql01 # 进入应用正在运行的tty终端,一般不用命名挂载和匿名挂载
所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/volume_name/_data
我们通过命名挂载可以方便的找到我们的一个卷,大多数情况使用“命名挂载”
# 如何确定是命名挂载还是匿名挂载,或者是指定路径挂载呢? -v 容器内路径 # 匿名挂载 docker run -d -v /etc/my.cnf.d(这里的路径是容器内路径) mysql:5.7 -v 卷名:容器内路径 # 命名挂载 docker run -d -v mysql_conf(这是指定卷的名字):/etc/my.cnf.d(这里的路径是容器内路径) mysql:5.7 -v 宿主机路径:容器内路径 # 指定路径挂载 docker run -d -v /etc/my.cnf.d(这是指定宿主机的路径):/etc/my.cnf.d(这里的路径是容器内路径) mysql:5.7 # 三种挂载,无论如何都是要指定容器内路径的(即使只写了-v volume_name ,docker也会将volume_name当成容器内的路径/volume_name) # 只要不指定卷名,就都是匿名挂载(docker会自动生成一个很长的名字),指定路径挂载也是匿名挂载。
拓展:
# 通过 -v 容器内路径:ro rw 设置容器内部对挂载路径的读写权限 ro readonly # 只读 在容器内对挂载路径只有读的权限 只能在宿主机改写 rw readwrite # 读写 在容器内对挂载路径有读写权限 (不写)默认是读写权限 # 一旦设置了容器权限,容器对我们挂载出来的内容就有限制了! docker run -d -P --name mysql01 -v volume_name:/etc/my.cnf.d:ro mysql:5.7 docker run -d -P --name mysql01 -v volume_name:/etc/my.cnf.d:rw mysql:5.7 # -P 后面不指定端口,就是将容器内所有的端口映射到宿主机的随机端口,如果-p和-P都不写,容器内的端口将不会在宿主机体现初识Dockerfile
Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!
通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个一个的命令,每个命令就是一层!
# 创建一个dockerfile文件,名字可以随机,建议 Dcokerfile # 文件中的内容 指令(大写) 参数 vim dockerfile01 FROM centos VOLUME ["volume01","volume02"] # 创建自动挂载卷(这里有两个目录都挂载到了宿主机) CMD echo "-------------end--------------" CMD /bin/bash docker build -f dockerfile01 -t wanglei/volume:1.0 ./ [root@localhost docker]# vim dockerfile01 [root@localhost docker]# docker build -f dockerfile01 -t wanglei/volume:1.0 ./ Sending build context to Docker daemon 4.824MB Step 1/4 : FROM centos ---> 5d0da3dc9764 Step 2/4 : VOLUME ["volume01","volume02"] ---> Running in 8ea22ac968e9 Removing intermediate container 8ea22ac968e9 ---> 40b18e479ba3 Step 3/4 : CMD echo "-------------end--------------" ---> Running in 0b91f86a71e4 Removing intermediate container 0b91f86a71e4 ---> 1f4b2e1a7639 Step 4/4 : CMD /bin/bash ---> Running in 4dff03f756a2 Removing intermediate container 4dff03f756a2 ---> 7c5d85ed94aa Successfully built 7c5d85ed94aa Successfully tagged wanglei/volume:1.0 [root@localhost docker]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE wanglei/volume 1.0 7c5d85ed94aa 15 seconds ago 231MB
启动自己写的容器
docker run -it wanglei/volume:1.0 /bin/bash [root@localhost docker]# docker run -it wanglei/volume:1.0 /bin/bash [root@401ac91e43ce /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02 [root@401ac91e43ce /]#数据卷的继承(多个容器之间数据共享)
–volumes-from
docker run -it --volumes-from cranky_agnesi wanglei/volume:1.0 [/bin/bash]
[root@61109017b74c /]# [root@localhost docker]# docker ps
ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61109017b74c wanglei/volume:1.0 "/bin/bash" about a minute ago Up about a minute stoic_agnesi
401ac91e43ce wanglei/volume:1.0 "/bin/bash" 37 minutes ago Up 32 minutes cranky_agnesi
[root@localhost docker]# docker inspect stoic_agnesi cranky_agnesi |grep -A 21 Mounts
"Mounts": [
{
"Type": "volume",
"Name": "2551b83726df7ab54b58454523fc15e0440af4920d6f6220c6ca0a389ac9e2d7",
"Source": "/var/lib/docker/volumes/2551b83726df7ab54b58454523fc15e0440af4920d6f6220c6ca0a389ac9e2d7/_data",
"Destination": "volume02",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "eb07285423fd818adef2954a53f623dd86c0cd91b6db48c07061ab21a0512a3b",
"Source": "/var/lib/docker/volumes/eb07285423fd818adef2954a53f623dd86c0cd91b6db48c07061ab21a0512a3b/_data",
"Destination": "volume01",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
--
"Mounts": [
{
"Type": "volume",
"Name": "eb07285423fd818adef2954a53f623dd86c0cd91b6db48c07061ab21a0512a3b",
"Source": "/var/lib/docker/volumes/eb07285423fd818adef2954a53f623dd86c0cd91b6db48c07061ab21a0512a3b/_data",
"Destination": "volume01",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "2551b83726df7ab54b58454523fc15e0440af4920d6f6220c6ca0a389ac9e2d7",
"Source": "/var/lib/docker/volumes/2551b83726df7ab54b58454523fc15e0440af4920d6f6220c6ca0a389ac9e2d7/_data",
"Destination": "volume02",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
[root@localhost docker]#
结论:
容器之间配置信息的传递,数据卷容器的什么周期一直持续到没有容器使用为止。
但是一旦持久化到了本地,这个时候本地的数据是不会删除的!



