Docker基础(二)

容器数据卷

出现的意义:

  • 数据持久化,因为容器删除后,保存在容器中的数据会丢失

  • 方便容器与宿主机数据交互

docker数据类型:

  • 数据卷 :相当于mount一块磁盘

  • 数据容器:将数据保存在容器上,用于容器间共享数据,这种容器一般不跑应用,只是挂载卷

数据卷

挂载分类

  • 具名挂载

    1. -v 卷名:容器路径

    2. [root@master ~]

    3. f7640ae90c7ec4a2514bc0bf4fb41c156c21d9e5b3ab43aabcba7ed279a9b3df

    4. [root@master ~]

    5. DRIVER VOLUME NAME

    6. local 7a767141bcb3e25b07c67aaad61ffacab081d1b80937fc7b02c3184cd4706b0b

    7. local 7727d1a368eec5721da70bf1af6121065b646a7be02d97b007e9c8b508148029

    8. local test_volume

    9. [root@master ~]

    10. "Mountpoint": "/var/lib/docker/volumes/test_volume/_data",

  • 匿名挂载

    没有指定宿主机目录的,一般默认宿主机路径为/var/lib/docker/volumes/卷名/_data

    1. -v 容器路径

    2. [root@master ~]

    3. c986f508b492e8327a0916c54f824f2f46490f50674fd0ef6c2303d369a304ad

  • 指定宿主机路径挂载

    1. -v 宿主机路径:容器路径

扩展


 
 
  1. -v 宿主机路径:容器路径:ro

测试一:挂载centos镜像


 
 
  1. [root@master ~]

  2. [root@master centos_tmp]

  3. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

  4. c475662fa21b centos:latest "/bin/bash" 4 minutes ago Up 4 minutes silly_hamilton

  5. [root@master centos_tmp]

  6. "Mounts": [

  7. {

  8. "Type": "bind",

  9. "Source": "/root/yiyu/centos_tmp",

  10. "Destination": "/tmp",

  11. "Mode": "",

  12. "RW": true,

  13. "Propagation": "rprivate"

  14. }

  15. ],

  16. "Config": {

  17. [root@master centos_tmp]

分别在容器外创建文件、容器内创建文件验证:

Docker基础(二)

停止容器,检查文件是否存在:

测试二:搭建mysql卷环境


 
 
  1. [root@master centos_tmp]

  2. [root@master ~]

  3. c738c38ffdf5b5d731cedec603215886b74ad83...03a0bf6cb2249986c5d9

  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

  5. c738c38ffdf5 mysql:5.7 "docker-entrypoint.s…" 37 seconds ago Up 36 seconds 3306/tcp, 33060/tcp mysql_docker

  6. [root@master ~]

  7. "Mounts": [

  8. {

  9. "Type": "bind",

  10. "Source": "/root/yiyu/mysql/conf",

  11. "Destination": "/etc/mysql/conf",

  12. "Mode": "",

  13. "RW": true,

  14. "Propagation": "rprivate"

  15. },

  16. {

  17. "Type": "bind",

  18. "Source": "/root/yiyu/mysql/libs",

  19. "Destination": "/var/lib/mysql",

  20. "Mode": "",

  21. "RW": true,

  22. "Propagation": "rprivate"

  23. }

  24. ],

  25. "Config": {

  26. "Hostname": "c738c38ffdf5",

  27. "Domainname": "",

  28. [root@master ~]

  29. total 4

  30. drwxr-xr-x. 2 root root 6 Nov 22 22:08 conf

  31. drwxr-xr-x. 5 polkitd root 4096 Nov 22 22:10 libs

  32. [root@master ~]

  33. total 0

  34. [root@master ~]

  35. total 188484

  36. -rw-r-----. 1 polkitd input 56 Nov 22 22:08 auto.cnf

  37. -rw-------. 1 polkitd input 1676 Nov 22 22:08 ca-key.pem

  38. -rw-r--r--. 1 polkitd input 1112 Nov 22 22:08 ca.pem

  39. -rw-r--r--. 1 polkitd input 1112 Nov 22 22:08 client-cert.pem

  40. -rw-------. 1 polkitd input 1676 Nov 22 22:08 client-key.pem

  41. ...

  42. [root@master centos_tmp]

  43. root@c738c38ffdf5:/

  44. root@c738c38ffdf5:/

  45. total 188484

  46. -rw-r-----. 1 mysql mysql 56 Nov 22 14:08 auto.cnf

  47. -rw-------. 1 mysql mysql 1676 Nov 22 14:08 ca-key.pem

  48. -rw-r--r--. 1 mysql mysql 1112 Nov 22 14:08 ca.pem

  49. -rw-r--r--. 1 mysql mysql 1112 Nov 22 14:08 client-cert.pem

  50. -rw-------. 1 mysql mysql 1676 Nov 22 14:08 client-key.pem

  51. ...

  52. root@c738c38ffdf5:/

  53. root@c738c38ffdf5:/

  54. [root@master centos_tmp]

  55. total 4

  56. -rw-r--r--. 1 root root 8 Nov 22 22:18 test_sh_yiyu.sh

  57. [root@master centos_tmp]

  58. c738c38ffdf5

  59. [root@master centos_tmp]

  60. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

  61. [root@master centos_tmp]

  62. total 4

  63. drwxr-xr-x. 2 root root 29 Nov 22 22:18 conf

  64. drwxr-xr-x. 5 polkitd root 4096 Nov 22 22:10 libs

  65. [root@master centos_tmp]

  66. total 4

  67. -rw-r--r--. 1 root root 8 Nov 22 22:18 test_sh_yiyu.sh

  68. [root@master centos_tmp]

  69. total 188484

  70. -rw-r-----. 1 polkitd input 56 Nov 22 22:08 auto.cnf

  71. -rw-------. 1 polkitd input 1676 Nov 22 22:08 ca-key.pem

  72. -rw-r--r--. 1 polkitd input 1112 Nov 22 22:08 ca.pem

  73. -rw-r--r--. 1 polkitd input 1112 Nov 22 22:08 client-cert.pem

  74. -rw-------. 1 polkitd input 1676 Nov 22 22:08 client-key.pem

  75. ...

测试三:通过dockerFile挂载数据卷

  
  1. [root@master docker_file]

  2. [root@master docker_file]

  3. [root@master docker_file]

  4. > FROM centos:latest

  5. > VOLUME ["volume1","volume2","volume3"]

  6. > CMD echo "ok"

  7. > CMD /bin/bash

  8. > EOF

  9. FROM centos:latest

  10. VOLUME ["volume1","volume2","volume3"]

  11. CMD echo "ok"

  12. CMD /bin/bash

  13. [root@master docker_file]

  14. Sending build context to Docker daemon 2.048kB

  15. Step 1/4 : FROM centos:latest

  16. ---> 5d0da3dc9764

  17. Step 2/4 : VOLUME ["volume1","volume2","volume3"]

  18. ---> Using cache

  19. ---> e1c7151792b2

  20. Step 3/4 : CMD echo "ok"

  21. ---> Using cache

  22. ---> 313c3d61e1f6

  23. Step 4/4 : CMD /bin/bash

  24. ---> Using cache

  25. ---> a4d1fa934530

  26. Successfully built a4d1fa934530

  27. Successfully tagged yiyu/centos:1.0

  28. [root@master docker_file]

  29. REPOSITORY TAG IMAGE ID CREATED SIZE

  30. yiyu/centos 1.0 a4d1fa934530 About a minute ago 231MB

  31. tomcat_local 1.0 c0855d5befbd 26 hours ago 685MB

  32. tomcat 9.0 76206e3ba4b1 4 days ago 680MB

  33. [root@master docker_file]

  34. [root@3fdfae345dcc /]

  35. drwxr-xr-x. 2 root root 6 Nov 23 14:21 volume1

  36. drwxr-xr-x. 2 root root 6 Nov 23 14:21 volume2

  37. drwxr-xr-x. 2 root root 6 Nov 23 14:21 volume3

  38. [root@3fdfae345dcc /]

  39. [root@3fdfae345dcc /]

  40. exit

  41. [root@master docker_file]

  42. "Type": "volume",

  43. "Name": "fafa186d6965db85cec19eba9473e19f1b713569ed15f89873130eeb75d86a4a",

  44. "Source": "/var/lib/docker/volumes/fafa186d6965db85cec19eba9473e19f1b713569ed15f89873130eeb75d86a4a/_data",

  45. "Destination": "volume1",

  46. "Driver": "local",

  47. "Mode": "",

  48. "RW": true,

  49. "Propagation": ""

  50. [root@master docker_file]

  51. total 0

  52. -rw-r--r--. 1 root root 0 Nov 23 22:22 test_by

数据容器


 
 
  1. --volumes-from

  2. [root@master ~]

  3. [root@5a186457299a /]

  4. drwxr-xr-x. 2 root root 6 Nov 24 11:58 volume1

  5. drwxr-xr-x. 2 root root 6 Nov 24 11:58 volume2

  6. drwxr-xr-x. 2 root root 6 Nov 24 11:58 volume3

  7. [root@master ~]

  8. [root@800867154ec9 /]

  9. drwxr-xr-x. 2 root root 6 Nov 24 12:00 volume1

  10. drwxr-xr-x. 2 root root 6 Nov 24 12:00 volume2

  11. drwxr-xr-x. 2 root root 6 Nov 24 12:00 volume3

  12. [root@master ~]

  13. [root@d6c45a5f7461 /]

  14. drwxr-xr-x. 2 root root 6 Nov 24 12:00 volume1

  15. drwxr-xr-x. 2 root root 6 Nov 24 12:00 volume2

  16. drwxr-xr-x. 2 root root 6 Nov 24 12:00 volume3


 
 
  1. [root@master ~]

  2. docker01

  3. [root@master ~]

  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

  5. d6c45a5f7461 yiyu/centos:1.0 "/bin/bash" 5 minutes ago Up 5 minutes docker03

  6. 800867154ec9 yiyu/centos:1.0 "/bin/bash" 6 minutes ago Up 6 minutes docker02

  7. [root@master ~]

volume管理


 
 
  1. docker volume create 卷名

  2. docker rm -v 容器id

  3. docker volume rm 卷名

  4. docker volume ls

  5. docker volume ls -qf dangling=true

  6. docker volume inspect 卷名

  7. docker inspect 卷名

  8. docker volume rm $(docker volume ls -qf dangling=true)

DockerFile

构建步骤

  1. 编写dockerfile

  2. docker build

  3. docker run

  4. dockers push

基础语法

  • 每个指令(关键字)必须大写

  • 从上到下,顺序执行

  • 注释用

  • 每一个指令都创建一个镜像层并提交

常用命令


 
 
  1. FROM

  2. MAINTAINER

  3. ADD

  4. COPY

  5. RUN

  6. CMD

  7. ENTRYPOINT

  8. ONBUILD

  9. ENV

  10. WORKDIR

  11. EXPOSE

  12. VOLUME

CMD和ENTRYPOINT的区别:

  1. 编写两个dockersfile


 
 
  1. [root@master docker_file]

  2. FROM centos

  3. MAINTAINER yiyu

  4. CMD ["ls","-a"]

  5. [root@master docker_file]

  6. FROM centos

  7. MAINTAINER yiyu

  8. ENTRYPOINT ["ls","-a"]

  9. [root@master docker_file]

  
  1. 2. 分别编译生成镜像


 
 
  1. [root@master docker_file]

  2. [root@master docker_file]

  3. [root@master docker_file]

  
  1. 3. 查看镜像列表


 
 
  1. [root@master docker_file]

  2. centos_entrypoint 0.1 5fa9ded07c07 6 seconds ago 231MB

  3. centos_cmd 0.1 e615afa00c74 10 seconds ago 231MB

  4. mycentos 1.0 3e8d28433743 2 days ago 371MB

  5. yiyu/centos 1.0 a4d1fa934530 3 days ago 231MB

  6. centos latest 5d0da3dc9764 2 months ago 231MB

  1. 运行容器,在docker run后添加-a对比


 
 
  1. [root@master docker_file]

  2. docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.

  3. ERRO[0001] error waiting for container: context canceled

  4. [root@master docker_file]

  5. total 0

  6. drwxr-xr-x. 1 root root 6 Nov 27 07:16 .

  7. drwxr-xr-x. 1 root root 6 Nov 27 07:16 ..

  8. -rwxr-xr-x. 1 root root 0 Nov 27 07:16 .dockerenv

  9. lrwxrwxrwx. 1 root root 7 Nov 3 2020 bin -> usr/bin

  10. drwxr-xr-x. 5 root root 360 Nov 27 07:16 dev

  11. drwxr-xr-x. 1 root root 66 Nov 27 07:16 etc

  12. drwxr-xr-x. 2 root root 6 Nov 3 2020 home

  13. ...

  1. 结论:从上可以看出,启动时添加的-a,会把CMD中的参数全部替换掉,转而把你输入的参数当成命令去执行,而会在ENTRYPOINT的参数后面是添加。即-l和ls -a -l的区别。

实例1:制作centos镜像


 
 
  1. [root@master ~]

  2. yiyu/centos 1.0 a4d1fa934530 23 hours ago 231MB

  3. centos latest 5d0da3dc9764 2 months ago 231MB

1.编写dockerfile


 
 
  1. [root@master docker_file]

  2. MAINTAINER yiyu

  3. ENV default_path="/usr/local/bin"

  4. WORKDIR $default_path

  5. RUN yum install -y perf

  6. RUN yum install -y net-tools

  7. EXPOSE 8080

  8. CMD echo "$default_path"

  9. CMD /bin/bash

  1. 构建dockerfile,看到最后的两个successfully就说明构建成功了


 
 
  1. [root@master docker_file]

  2. Sending build context to Docker daemon 3.072kB

  3. Step 1/9 : FROM yiyu/centos:1.0

  4. ...

  5. Successfully built 3e8d28433743

  6. Successfully tagged mycentos:1.0

  7. [root@master docker_file]

  8. mycentos 1.0 3e8d28433743 46 seconds ago 371MB

  9. yiyu/centos 1.0 a4d1fa934530 23 hours ago 231MB

  10. centos latest 5d0da3dc9764 2 months ago 231MB

  1. 分别启动 yiyu/centos:1.0 和 mycentos:1.0 对比,发现前者无perf和ifconfig命令,后者有


 
 
  1. [root@master docker_file]

  2. [root@aaf5b20b026f /]

  3. bash: perf: command not found

  4. [root@aaf5b20b026f /]

  5. bash: ifconfig: command not found

  6. [root@aaf5b20b026f /]

  7. [root@master docker_file]

  8. [root@49812951c620 bin]

  9. usage: perf [--version] [--help] [OPTIONS] COMMAND [ARGS]

  10. ...

  11. [root@49812951c620 bin]

  12. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

  13. inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255

  14. ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)

  15. RX packets 8 bytes 656 (656.0 B)

  16. RX errors 0 dropped 0 overruns 0 frame 0

  17. TX packets 0 bytes 0 (0.0 B)

  18. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

实例2:制作可动态发布的tomcat镜像

1. 准备一个tomcat包和jdk包


 
 
  1. [root@master tomcat_pack]

  2. total 195380

  3. -rw-r--r--. 1 root root 10305939 Nov 27 15:27 apache-tomcat-8.5.50.tar.gz

  4. -rw-r--r--. 1 root root 189756259 Nov 27 15:44 jdk-8u161-linux-x64.tar.gz

  5. -rw-r--r--. 1 root root 0 Nov 27 15:47 readMe.md

  6. [root@master tomcat_pack]

  
  1. 2. 编写dockerfile


 
 
  1. [root@master tomcat_pack]

  2. FROM centos

  3. MAINTAINER yiyu

  4. ADD ./jdk-8u161-linux-x64.tar.gz /usr/local/

  5. ADD ./apache-tomcat-8.5.50.tar.gz /usr/local/

  6. COPY ./readMe.md /usr/local/

  7. RUN yum -y install which net-tools

  8. ENV MY_PATH="/usr/local"

  9. ENV WORKDIR=$MY_PATH

  10. ENV JAVA_HOME="/usr/local/jdk1.8.0_161"

  11. ENV CLASSPTH="$JAVA_HOME/lib"

  12. ENV CATALINA_HOME="/usr/local/apache-tomcat-8.5.50"

  13. ENV CATALINA_BASH="/usr/local/apache-tomcat-8.5.50"

  14. ENV PATH="$PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin"

  15. EXPOSE 8080

  16. CMD /usr/local/apache-tomcat-8.5.50/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.50/logs/catalina.out

  1. 构建dockerfile


 
 
  1. [root@master tomcat_pack]

  2. Sending build context to Docker daemon 200.1MB

  3. Step 1/15 : FROM centos

  4. ---> 5d0da3dc9764

  5. Step 2/15 : MAINTAINER yiyu

  6. ...

  7. ---> a9138168a7bb

  8. Successfully built a9138168a7bb

  9. Successfully tagged mytomcat:0.1

  10. [root@master tomcat_pack]

  11. REPOSITORY TAG IMAGE ID CREATED SIZE

  12. mytomcat 0.1 a9138168a7bb 3 minutes ago 669MB

  13. centos_entrypoint 0.1 5fa9ded07c07 About an hour ago 231MB

  14. centos_cmd 0.1 e615afa00c74 About an hour ago 231MB

  1. 启动容器


 
 
  1. [root@master tomcat_pack]

  2. 51b6911b1f683cc7ccb07e8639702fd8fd01b328df9414ab13d463ac5b173275

  1. 访问验证


 
 
  1. [root@master tomcat_pack]

  2. HTTP/1.1 200

  3. Content-Type: text/html;charset=UTF-8

  4. Transfer-Encoding: chunked

  5. Date: Sat, 27 Nov 2021 08:52:42 GMT

  1. 发布新内容


 
 
  1. "Mounts": [

  2. {

  3. "Type": "bind",

  4. "Source": "/root/tomcat_pack/tomcat_8.5.50/logs",

  5. "Destination": "/usr/local/apache-tomcat-8.5.50/logs",

  6. "Mode": "",

  7. "RW": true,

  8. "Propagation": "rprivate"

  9. },

  10. {

  11. "Type": "bind",

  12. "Source": "/root/tomcat_pack/tomcat_8.5.50/test",

  13. "Destination": "/usr/local/apache-tomcat-8.5.50/webapps/test",

  14. "Mode": "",

  15. "RW": true,

  16. "Propagation": "rprivate"

  17. }

  18. ],

  19. [root@master test]

  20. <h3>hello java</h3>

  21. [root@master test]

  1. 验证访问


 
 
  1. [root@master test]

  2. <h3>hello java</h3>

  3. [root@master test]

  1. 发布镜像到docker hub


 
 
  1. [root@master tomcat_8.5.50]

  2. REPOSITORY TAG IMAGE ID CREATED SIZE

  3. mytomcat 0.1 a9138168a7bb 19 minutes ago 669MB

  4. centos_entrypoint 0.1 5fa9ded07c07 2 hours ago 231MB

  5. [root@master tomcat_8.5.50]

  6. [root@master tomcat_8.5.50]

  7. REPOSITORY TAG IMAGE ID CREATED SIZE

  8. yiyu5527/mytomcat8.5.50 0.1 a9138168a7bb 24 minutes ago 669MB

  9. mytomcat 0.1 a9138168a7bb 24 minutes ago 669MB

  10. [root@master tomcat_8.5.50]

  11. The push refers to repository [docker.io/yiyu5527/mytomcat8.5.50]

  12. a5db832a5077: Pushed

  13. ec1302ae29f9: Pushed

  14. c10265c2b734: Pushed

  15. 03c12ebc4a35: Pushed

  16. 74ddd0ec08fa: Mounted from library/centos

  17. 0.1: digest: sha256:87acca3eb6329ac9721e820ae891502...f8fea38dda512dd90d2cb0810af size: 1373

  18. 上传成功

扩展:


 
 
  1. docker history 镜像id

  2. docker login [仓库地址]

  3. docker logout

  4. docker save

  5. docker tag 镜像id

  6. docker push

Docker基础(二)》来自互联网公开内容,收录仅供学习使用,如侵权请联系删除。本文URL:https://www.ezixuan.com/1021475.html

(0)
上一篇 2023年 2月 4日 下午5:56
下一篇 2023年 2月 5日 上午9:19