Loading

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 [要继承的容器名] [镜像名]

posted @ 2020-07-23 17:18  尧雷  阅读(173)  评论(0)    收藏  举报