docker进阶
更改并提交一个镜像
查看本地镜像
[root@vultrguest ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest d03312117bb0 2 days ago 647MB
mysql 5.7 f965319e89de 2 weeks ago 448MB
centos latest 470671670cac 3 months ago 237MB
新建并启动一个容器
[root@vultrguest ~]# docker run -d -p 8888:8080 --name="test_tomcat" tomcat
查看运行容器
[root@vultrguest ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c602bcca38a tomcat "catalina.sh run" About a minute ago Up About a minute 0.0.0.0:8888->8080/tcp test_tomcat
进入容器
[root@vultrguest ~]# docker exec -it test_tomcat /bin/bash
root@0c602bcca38a:/usr/local/tomcat# cd webapps
修改里面的内容并退出
root@0c602bcca38a:/usr/local/tomcat/webapps# ls
root@0c602bcca38a:/usr/local/tomcat/webapps# echo "test tomcat">test
root@0c602bcca38a:/usr/local/tomcat/webapps# ls
test
root@0c602bcca38a:/usr/local/tomcat/webapps# exit
exit
[root@vultrguest ~]#
提交镜像
[root@vultrguest ~]# docker commit -a="peamonster" -m="test tomcat" test_tomcat peamonter/mytomcat:1.0
sha256:30a54c8390c924c260890a804f59df6fe7529dd96cbf3882aa670eebdf0d5e08
docker commit -a="作者的名字" -m="镜像的描述" 容器名或容器ID 你自己镜像的名字:版本
查看本地镜像
[root@vultrguest ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
peamonter/mytomcat 1.0 30a54c8390c9 15 seconds ago 647MB
tomcat latest d03312117bb0 2 days ago 647MB
mysql 5.7 f965319e89de 2 weeks ago 448MB
centos latest 470671670cac 3 months ago 237MB
可以发现多出了自己提交的镜像
容器数据卷(主机和容器数据共享)
命令行方式
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名可读写
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名宿主机可以读写,容器只读
查看宿主机根目录
[root@vultrguest /]# ls
bin boot dev etc home lib lib64 lost+found media mnt mydata opt proc root run sbin srv sys tmp usr var
此时并没有myVData目录
执行命令
[root@vultrguest /]# docker run -it -v /myVData:/conVData centos
[root@7bb0a18d7a2c /]# ls
bin conVData dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
可以看到,容器内有一个conVData文件夹
在查看宿主机根目录
[root@vultrguest /]# ls
bin boot dev etc home lib lib64 lost+found media mnt mydata myVData opt proc root run sbin srv sys tmp usr var
发现宿主机出现了一个myVData文件夹。此时,这两个文件夹是互通的,在myVData中新建文本,conVData也同时出现,反过来也一样。实现了宿主机和容器之间的数据共享
DockerFile方式
创建dockerfile文件
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD /bin/bash
执行命令
[root@vultrguest ~]# docker build -f dockerfile -t peamonster/centos .
Sending build context to Docker daemon 16.9kB
Step 1/3 : FROM centos
---> 470671670cac
Step 2/3 : VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
---> Running in c40240325c95
Removing intermediate container c40240325c95
---> b76a03fd2c2b
Step 3/3 : CMD /bin/bash
---> Running in da84f816e108
Removing intermediate container da84f816e108
---> 97c981ed5b67
Successfully built 97c981ed5b67
Successfully tagged peamonster/centos:latest
创建好了peamonster/centos镜像
创建并运行容器,查看结果
[root@vultrguest ~]# docker run -it peamonster/centos
[root@2433548243b9 /]# ls
bin dataVolumeContainer1 dataVolumeContainer2 dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
可以发现,根目录下出现了dataVolumeContainer1 dataVolumeContainer2两个容器数据卷
查看宿主机路径
[root@vultrguest ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2433548243b9 peamonster/centos "/bin/sh -c /bin/bash" 2 hours ago Up 2 hours nifty_mclaren
[root@vultrguest ~]# docker inspect nifty_mclaren
"Mounts": [
{
"Type": "volume",
"Name": "a0ea1850cbb4a88c16330e68426dbb6672c1d9895d05aa989e1d4a6513b1d855",
"Source": "/var/lib/docker/volumes/a0ea1850cbb4a88c16330e68426dbb6672c1d9895d05aa989e1d4a6513b1d855/_data",
"Destination": "/dataVolumeContainer2",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "754d6220130d6ccf2b6d1de8889caf2411592148b3ecf6854c07852c29c0e5f6",
"Source": "/var/lib/docker/volumes/754d6220130d6ccf2b6d1de8889caf2411592148b3ecf6854c07852c29c0e5f6/_data",
"Destination": "/dataVolumeContainer1",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
可以看到两个容器数据卷对应宿主机的路径分别为
-
/var/lib/docker/volumes/754d6220130d6ccf2b6d1de8889caf2411592148b3ecf6854c07852c29c0e5f6/_data
-
/var/lib/docker/volumes/a0ea1850cbb4a88c16330e68426dbb6672c1d9895d05aa989e1d4a6513b1d855/_data
容器与容器之间数据共享
docker run -it --name [容器名] --volumes-from [要继承的容器名] [镜像名]

浙公网安备 33010602011771号