https://www.coonote.com // 菜鸟教程
https://www.docker.org.cn/index.html //docker中文社区
https://docs.docker.com/engine/reference/commandline/images/ //docker官网

mac docker

  1. MYSQL_ROOT_PASSWORD=password; MYSQL_DATABASE=myDB
  2. mysql -uroot -ppassword
  3. use myDB
  4. mysql> select now();
  5. FROM openjdk:11
  6. COPY /docker/src/Production/HelloWorld /tmp
  7. WORKDIR /tmp
  8. CMD java Production.main

目录

image.png

1.为什么出现Docker

image.png
image.png
image.png
image.png image.png

image.png

2.Docker历史

2015年,美国,年轻人,开源,被收购

3.Docker与虚拟机的区别

image.png

image.png

4.Docker的基本组成

image.png
image.png

image.png
image.png
image.png
image.png
镜像:通过这个模板创建容器
容器:服务运行在容器中,独立运行一个或一组服务,通过镜像来创建的
启动,停止,删除,可以把容器建议的理解成小的Linux
仓库:存放容器(共有私有)
image.png

5.Docker安装

https://docs.docker.com/engine/install/centos/

  1. [root@Cola ~]# uname -r
  2. 4.18.0-240.22.1.el8_3.x86_64
  3. [root@Docker ~]# cat /etc/os-release
  4. [root@Docker ~]# yum remove docker 协助旧版本
  5. [root@Docker ~]# yum install -y yum-utils 需要的安装包 设置镜像仓库为阿里云
  6. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  7. yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

国内阿里云镜像地址
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  1. [root@Docker ~]# yum makecache fast 更新软件包索引
  2. [root@Docker ~]# yum install docker-ce docker-ce-cli containerd.io 安装docker引擎,ce代表社区版,ee代表商业版
  3. [root@Docker ~]# yum list docker-ce --showduplicates | sort -r
  4. [root@Docker ~]# systemctl start docker 启动docker
  5. [root@Cola ~]# docker version
  6. Client: Docker Engine - Community
  7. Server: Docker Engine - Community
  8. [root@Docker ~]# docker run hello-world

6 Docker卸载

  1. yum remove docker-ce docker-ce-cli containerd.io
  2. sudo rm -rf /var/lib/docker
  3. sudo rm -rf /var/lib/containerd

7 阿里云容器镜像加速

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

8 Docker是怎么工作的

hello-world流程
image.png
image.png
image.png
image.png

Docker的资源路径
[root@Docker ~]# cd /var/lib/docker/
[root@Docker docker]# ll
total 44
drwx—x—x 4 root root 4096 Sep 8 11:00 buildkit
drwx——-x 5 root root 4096 Sep 8 11:03 containers
drwx——— 3 root root 4096 Sep 8 11:00 image
drwxr-x—- 3 root root 4096 Sep 8 11:00 network
drwx——-x 10 root root 4096 Sep 8 11:03 overlay2
drwx——— 4 root root 4096 Sep 8 11:00 plugins
drwx——— 2 root root 4096 Sep 8 11:00 runtimes
drwx——— 2 root root 4096 Sep 8 11:00 swarm
drwx——— 2 root root 4096 Sep 8 11:02 tmp
drwx——— 2 root root 4096 Sep 8 11:00 trust
drwx——-x 2 root root 4096 Sep 8 11:00 volumes

image.png

9 Docker命令

https://docs.docker.com/reference/ 官网帮助页

镜像命令 容器 帮助命令
images run (exit ctrl+p+q) version
pull ps info
rmi rm docker command —help
start/stop/restart/kill
logs
top
exec

docker常用命令

镜像操作
docker history n1 查看镜像的构造历史

容器操作
运行容器 docker run -it —name c1 -h c1 centos
docker cp 19c35c3a9419:/home/a.txt /home
卷挂载 docker run -it —name n1 -h n1 -v /home/n1-test:/home centos /bin/bash
提交容器快照 docker commit -a=”phy” -m=”hahahha” 4f203aaf4959 phy:2.1
docker exec -ti c1 ip addr
docker exec -it c1 /bin/bash
docker run -it —name c3 -h c3 —link c2 centos
docker exec -it c3 cat /etc/hosts

9.1 镜像命令

  1. [root@Docker ~]# docker images
  2. REPOSITORY(仓库源) TAG(镜像的标签) IMAGE ID CREATED SIZE
  3. hello-world latest d1165f221234 6 months ago 13.3kB
  4. [root@Cola ~]# docker search mysql --filter=stars=3000
  5. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  6. mysql MySQL is a widely used, open-source relation 11676 [OK]
  7. mariadb MariaDB Server is a high performing open sou 4448 [OK]
  8. [root@Docker docker]# docker search mysql -f=stars=5000
  9. NAME DESCRIPTION STARS OFFICIAL AUTOMATED

image.png
image.png
image.png
image.png

  1. i
  1. [root@Cola ~]# docker pull mysql
  2. [root@Cola ~]# docker pull docker.io/library/mysql
  3. Using default tag: latest
  4. latest: Pulling from library/mysql
  5. b380bbd43752: Pull complete
  6. f23cbf2ecc5d: Pull complete
  7. 30cfc6c29c0a: Pull complete
  8. b38609286cbe: Pull complete
  9. 8211d9e66cd6: Pull complete
  10. 2313f9eeca4a: Pull complete
  11. 7eb487d00da0: Pull complete
  12. 4d7421c8152e: Pull complete
  13. 77f3d8811a28: Pull complete
  14. cce755338cba: Pull complete
  15. 69b753046b9f: Pull complete
  16. b2e64b0ab53c: Pull complete
  17. Digest: sha256:6d7d4524463fe6e2b893ffc2b89543c81dec7ef82fb2020a1b27606666464d87
  18. Status: Downloaded newer image for mysql:latest
  19. docker.io/library/mysql:latest
  20. 指定版本下载
  21. [root@Cola ~]# docker pull mysql:5.7
  22. 5.7: Pulling from library/mysql
  23. b380bbd43752: Already exists
  24. f23cbf2ecc5d: Already exists
  25. 30cfc6c29c0a: Already exists
  26. b38609286cbe: Already exists
  27. 8211d9e66cd6: Already exists
  28. 2313f9eeca4a: Already exists
  29. 7eb487d00da0: Already exists
  30. a71aacf913e7: Pull complete
  31. 393153c555df: Pull complete
  32. 06628e2290d7: Pull complete
  33. ff2ab8dac9ac: Pull complete
  34. Digest: sha256:2db8bfd2656b51ded5d938abcded8d32ec6181a9eae8dfc7ddf87a656ef97e97
  35. Status: Downloaded newer image for mysql:5.7
  36. docker.io/library/mysql:5.7

删除

  1. [root@Docker docker]# docker rmi -f $(docker images)

image.png

9.2 Docker容器命令

有了镜像以后才可以创建容器

  1. [root@Cola ~]# docker run --help
  2. Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  3. Options:
  4. -d, --detach 后台运行容器,并输出容器ID
  5. -e, --env list 设置环境变量,该变量可以在容器内使用
  6. -h, --hostname string 指定容器的hostname
  7. -i, --interactive 以交互模式运行容器,通常与-t同时使用
  8. -l, --label list 给容器添加标签
  9. --name string 设置容器名称,否则会自动命名
  10. --network string 将容器加入指定网络
  11. -p, --publish list 设置容器映射端口
  12. -P,--publish-all 将容器设置的所有exposed端口进行随机映射
  13. --restart string 容器重启策略,默认为不重启
  14. on-failure[:max-retries]:在容器非正常退出时重启,可以设置重启次数。
  15. unless-stopped:总是重启,除非使用stop停止容器
  16. always:总是重启
  17. --rm 容器退出时则自动删除容器
  18. -t, --tty 分配一个伪终端
  19. -u, --user string 运行用户或者UID
  20. -v, --volume list 数据挂载
  21. -w, --workdir string 容器的工作目录
  22. --privileged 给容器特权

image.png

image.png

image.png

docker run -d 演示

  1. [root@Cola ~]# docker run -d centos /bin/sh -c "while true;do echo hhhh;sleep 1 ;done "
  2. 561009c6d25970579a090ca0cd787c2b17e4d7542406d1feb628936d04fe63f6
  3. [root@Cola ~]# docker ps
  4. \CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 561009c6d259 centos "/bin/sh -c 'while t…" 2 seconds ago Up 2 seconds flamboyant_maxwell
  6. [root@Cola ~]# docker logs -tf 561009c6d259
  7. 2021-11-13T09:20:23.900092962Z hhhh
  8. 2021-11-13T09:20:24.901468536Z hhhh

image.png9.3 查看容器的元数据

[root@Docker ~]# docker inspect 4d910561d496

  1. [root@Cola ~]# docker inspect 561009c6d259
  2. [
  3. {
  4. "Id": "561009c6d25970579a090ca0cd787c2b17e4d7542406d1feb628936d04fe63f6",
  5. "Created": "2021-11-13T09:20:23.537604718Z",
  6. "Path": "/bin/sh",
  7. "Args": [
  8. "-c",
  9. "while true;do echo hhhh;sleep 1 ;done "
  10. ],
  11. "State": {
  12. "Status": "running",
  13. "Running": true,
  14. "Paused": false,
  15. "Restarting": false,
  16. "OOMKilled": false,
  17. "Dead": false,
  18. "Pid": 35005,
  19. "ExitCode": 0,
  20. "Error": "",
  21. "StartedAt": "2021-11-13T09:20:23.900127445Z",
  22. "FinishedAt": "0001-01-01T00:00:00Z"
  23. },
  24. "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
  25. "ResolvConfPath": "/var/lib/docker/containers/561009c6d25970579a090ca0cd787c2b17e4d7542406d1feb628936d04fe63f6/resolv.conf",
  26. "HostnamePath": "/var/lib/docker/containers/561009c6d25970579a090ca0cd787c2b17e4d7542406d1feb628936d04fe63f6/hostname",
  27. "HostsPath": "/var/lib/docker/containers/561009c6d25970579a090ca0cd787c2b17e4d7542406d1feb628936d04fe63f6/hosts",
  28. "LogPath": "/var/lib/docker/containers/561009c6d25970579a090ca0cd787c2b17e4d7542406d1feb628936d04fe63f6/561009c6d25970579a090ca0cd787c2b17e4d7542406d1feb628936d04fe63f6-json.log",
  29. "Name": "/flamboyant_maxwell",
  30. "RestartCount": 0,
  31. "Driver": "overlay2",
  32. "Platform": "linux",
  33. "MountLabel": "",
  34. "ProcessLabel": "",
  35. "AppArmorProfile": "",
  36. "ExecIDs": null,
  37. "HostConfig": {
  38. "Binds": null,
  39. "ContainerIDFile": "",
  40. "LogConfig": {
  41. "Type": "json-file",
  42. "Config": {}
  43. },
  44. "NetworkMode": "default",
  45. "PortBindings": {},
  46. "RestartPolicy": {
  47. "Name": "no",
  48. "MaximumRetryCount": 0
  49. },
  50. "AutoRemove": false,
  51. "VolumeDriver": "",
  52. "VolumesFrom": null,
  53. "CapAdd": null,
  54. "CapDrop": null,
  55. "CgroupnsMode": "host",
  56. "Dns": [],
  57. "DnsOptions": [],
  58. "DnsSearch": [],
  59. "ExtraHosts": null,
  60. "GroupAdd": null,
  61. "IpcMode": "private",
  62. "Cgroup": "",
  63. "Links": null,
  64. "OomScoreAdj": 0,
  65. "PidMode": "",
  66. "Privileged": false,
  67. "PublishAllPorts": false,
  68. "ReadonlyRootfs": false,
  69. "SecurityOpt": null,
  70. "UTSMode": "",
  71. "UsernsMode": "",
  72. "ShmSize": 67108864,
  73. "Runtime": "runc",
  74. "ConsoleSize": [
  75. 0,
  76. 0
  77. ],
  78. "Isolation": "",
  79. "CpuShares": 0,
  80. "Memory": 0,
  81. "NanoCpus": 0,
  82. "CgroupParent": "",
  83. "BlkioWeight": 0,
  84. "BlkioWeightDevice": [],
  85. "BlkioDeviceReadBps": null,
  86. "BlkioDeviceWriteBps": null,
  87. "BlkioDeviceReadIOps": null,
  88. "BlkioDeviceWriteIOps": null,
  89. "CpuPeriod": 0,
  90. "CpuQuota": 0,
  91. "CpuRealtimePeriod": 0,
  92. "CpuRealtimeRuntime": 0,
  93. "CpusetCpus": "",
  94. "CpusetMems": "",
  95. "Devices": [],
  96. "DeviceCgroupRules": null,
  97. "DeviceRequests": null,
  98. "KernelMemory": 0,
  99. "KernelMemoryTCP": 0,
  100. "MemoryReservation": 0,
  101. "MemorySwap": 0,
  102. "MemorySwappiness": null,
  103. "OomKillDisable": false,
  104. "PidsLimit": null,
  105. "Ulimits": null,
  106. "CpuCount": 0,
  107. "CpuPercent": 0,
  108. "IOMaximumIOps": 0,
  109. "IOMaximumBandwidth": 0,
  110. "MaskedPaths": [
  111. "/proc/asound",
  112. "/proc/acpi",
  113. "/proc/kcore",
  114. "/proc/keys",
  115. "/proc/latency_stats",
  116. "/proc/timer_list",
  117. "/proc/timer_stats",
  118. "/proc/sched_debug",
  119. "/proc/scsi",
  120. "/sys/firmware"
  121. ],
  122. "ReadonlyPaths": [
  123. "/proc/bus",
  124. "/proc/fs",
  125. "/proc/irq",
  126. "/proc/sys",
  127. "/proc/sysrq-trigger"
  128. ]
  129. },
  130. "GraphDriver": {
  131. "Data": {
  132. "LowerDir": "/var/lib/docker/overlay2/bbe6ca6a653e845a4aff633dabe372bdabe099d0a1a0b61ddf1c8e98b41f044b-init/diff:/var/lib/docker/overlay2/50ca83e62e4c4169a9d820e26990b228c119f83c6aa53ed6f7aeae416d626c3e/diff",
  133. "MergedDir": "/var/lib/docker/overlay2/bbe6ca6a653e845a4aff633dabe372bdabe099d0a1a0b61ddf1c8e98b41f044b/merged",
  134. "UpperDir": "/var/lib/docker/overlay2/bbe6ca6a653e845a4aff633dabe372bdabe099d0a1a0b61ddf1c8e98b41f044b/diff",
  135. "WorkDir": "/var/lib/docker/overlay2/bbe6ca6a653e845a4aff633dabe372bdabe099d0a1a0b61ddf1c8e98b41f044b/work"
  136. },
  137. "Name": "overlay2"
  138. },
  139. "Mounts": [],
  140. "Config": {
  141. "Hostname": "561009c6d259",
  142. "Domainname": "",
  143. "User": "",
  144. "AttachStdin": false,
  145. "AttachStdout": false,
  146. "AttachStderr": false,
  147. "Tty": false,
  148. "OpenStdin": false,
  149. "StdinOnce": false,
  150. "Env": [
  151. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  152. ],
  153. "Cmd": [
  154. "/bin/sh",
  155. "-c",
  156. "while true;do echo hhhh;sleep 1 ;done "
  157. ],
  158. "Image": "centos",
  159. "Volumes": null,
  160. "WorkingDir": "",
  161. "Entrypoint": null,
  162. "OnBuild": null,
  163. "Labels": {
  164. "org.label-schema.build-date": "20210915",
  165. "org.label-schema.license": "GPLv2",
  166. "org.label-schema.name": "CentOS Base Image",
  167. "org.label-schema.schema-version": "1.0",
  168. "org.label-schema.vendor": "CentOS"
  169. }
  170. },
  171. "NetworkSettings": {
  172. "Bridge": "",
  173. "SandboxID": "d2dedcccad4ae710a5f25cf68861b60e387175a68eed3d5f44bb3f49f5a4da16",
  174. "HairpinMode": false,
  175. "LinkLocalIPv6Address": "",
  176. "LinkLocalIPv6PrefixLen": 0,
  177. "Ports": {},
  178. "SandboxKey": "/var/run/docker/netns/d2dedcccad4a",
  179. "SecondaryIPAddresses": null,
  180. "SecondaryIPv6Addresses": null,
  181. "EndpointID": "f247d37fb0fc534e25b0d4fb617c9e72bce95e0d5ec183f996d84ca9521f23b2",
  182. "Gateway": "172.17.0.1",
  183. "GlobalIPv6Address": "",
  184. "GlobalIPv6PrefixLen": 0,
  185. "IPAddress": "172.17.0.2",
  186. "IPPrefixLen": 16,
  187. "IPv6Gateway": "",
  188. "MacAddress": "02:42:ac:11:00:02",
  189. "Networks": {
  190. "bridge": {
  191. "IPAMConfig": null,
  192. "Links": null,
  193. "Aliases": null,
  194. "NetworkID": "9ad54dd1b92a6a1716010c749674f5b2c10a7093cc356ae9a0e0c454d0234997",
  195. "EndpointID": "f247d37fb0fc534e25b0d4fb617c9e72bce95e0d5ec183f996d84ca9521f23b2",
  196. "Gateway": "172.17.0.1",
  197. "IPAddress": "172.17.0.2",
  198. "IPPrefixLen": 16,
  199. "IPv6Gateway": "",
  200. "GlobalIPv6Address": "",
  201. "GlobalIPv6PrefixLen": 0,
  202. "MacAddress": "02:42:ac:11:00:02",
  203. "DriverOpts": null
  204. }
  205. }
  206. }
  207. }
  208. ]

9.4 进入容器

[root@Docker ~]# docker exec -it 4d910561d496 /bin/bash 打开新的终端
[root@Docker ~]# docker attach 4d910561d496 进入之前运行的界面,不会启动新的进程

image.png

docker拷贝
[root@Docker home]# docker cp 19c35c3a9419:/home/a.txt /home
[root@Cola ~]# docker cp n1:/1.txt /root

  1. cp
  2. 在容器和宿主机之间拷贝文件
  3. Usage:
  4. docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
  5. docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
  6. Options:
  7. -a, --archive 保留文件权限

image.png

image.png
image.png

9.5 Docker 安装Nginx,做端口映射

  1. [root@Cola //]# docker run -it -p 88:80 --name n3 -h n3 nginx /bin/bash
  2. [root@Cola //]# docker run -d -p 8181:80 --name n5 -h n5 nginx /bin/bash
  3. [root@Cola ~]# docker exec -it N1 /bin/bash
  4. root@b0dfecc972b7:/# whereis nginx
  5. nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx


image.png
image.png

nginx安装进入:

  1. [root@Docker home]docker run --name test02 -it -p 8080:80 nginx
  2. [root@Docker home]# docker run -it --name test05 -p 8080:80 nginx
  3. [root@Docker home]# docker exec -it beb17068c722 /bin/bash
  4. root@beb17068c722:/# pwd
  5. /
  6. root@beb17068c722:/# ll
  7. bash: ll: command not found
  8. root@beb17068c722:/# ls
  9. bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
  10. boot docker-entrypoint.d etc lib media opt root sbin sys usr
  11. root@beb17068c722:/# whereis nginx
  12. nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
  13. root@beb17068c722:/#
  14. root@beb17068c722:/#
  15. root@beb17068c722:/# cd /etc/nginx/
  16. root@beb17068c722:/etc/nginx# ls
  17. conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
  18. root@beb17068c722:/etc/nginx#

[root@Docker home]# docker run -p 1111:9000 portainer/portainer

9.6 部署ES+KIBANA

9.7 portainer图形化界面

https://www.cnblogs.com/ExMan/p/11657069.html

10 Docker镜像讲解

image.png

10.1 联合文件系统

image.png
image.png
image.png
image.png
image.png
image.png

10.2 提交镜像

  1. [root@Cola ~]# docker commit -a="phy" -m="hahahha" 4f203aaf4959 phy:2.1
  2. sha256:37cf82fefecc834299eda52ab1df2219de2675a40a3949545c921b81f79e1cc2

image.png
image.png

11 Doker 容器卷

数据在容器里头,容器删除了,那数据也会丢失!

  • 需求:数据持久化,同步操作,容器间数据共享

容器之间需要有数据共享的功能,Docker容器产生的数据可以同步到本地,即目录的挂载,将容器的目录挂载到Linux上
image.png

11.1 使用数据卷

docker -it -v 主机目录:容器目录 centos /bin/bash/
数据同步

  1. docker -it -v 主机目录:容器目录 centos /bin/bash
  2. docker inspect 容器ID
  3. [root@Docker home]# ll
  4. total 0
  5. -rw-r--r-- 1 root root 0 Sep 8 14:07 a.txt
  6. -rw-r--r-- 1 root root 0 Sep 8 13:55 test.txt
  7. [root@Docker home]# docker run -it -v /home:/home centos
  8. [root@6ef33585345f /]# ls
  9. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  10. [root@6ef33585345f /]# cd /home/
  11. [root@6ef33585345f home]# ls
  12. a.txt test.txt
  13. [root@6ef33585345f home]#
  14. [root@6ef33585345f home]# touch c.q
  15. [root@6ef33585345f home]# [root@Docker home]#
  16. [root@Docker home]# ls
  17. a.txt c.q test.txt

[root@Docker home]# docker inspect 6ef33585345f
image.png

11.2 mysql数据持久化问题

https://hub.docker.com/_/mysql?tab=description&page=1&ordering=last_updated
docker run —name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
-P 表示随机映射端口,-p表示指定

  1. [root@Cola n1-test]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/date:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345 --name mysql mysql:5.7
  2. 32e8fe4157b1e170acf0dc1ab4879a46df004e66b25ab9481be3c81d165c0fc5

image.png

11.3 具名/匿名挂载

所有docker容器的卷,在没有指定名称的情况下,所有的路径都在/var/lib/docker/volumes
[root@Docker ~]# docker run -d —name n1 -P -v n1-volume:/etc/nginx nginx
[root@Docker ~]# docker run -d —name n1 -P -v /etc/nginx nginx
2dc1af0b7f3298f14375ea1dd868ba585116c354841577aa05faf5e69221b71a

  1. [root@Docker ~]# docker volume ls
  2. DRIVER VOLUME NAME
  3. local n1-volume

image.png

  1. [root@Docker ~]# docker volume inspect n1-volume
  2. [
  3. {
  4. "CreatedAt": "2021-09-08T23:37:40+08:00",
  5. "Driver": "local",
  6. "Labels": null,
  7. "Mountpoint": "/var/lib/docker/volumes/n1-volume/_data",
  8. "Name": "n1-volume",
  9. "Options": null,
  10. "Scope": "local"
  11. }
  12. ]

image.png

13.4 数据卷容器(容器文件共享)

容器与容器之间数据共享,是拷贝的概念,也就是说某个容器删除了并不影响另一个容器的文件,通过
—volumes-from 传递,数据卷的容器生命周期一直持续到没有人使用的情况

  1. [root@Cola ~]# docker run -it --name p1 -h p1 phy:1.0
  2. [root@Cola ~]# docker run -it -h p2 --name p2 --volumes-from p1 phy:1.0
  3. [root@Cola ~]# docker run -it -h p3 --name p3 --volumes-from p1 phy:1.0

image.png

12 DockFile

12.1 Dockfile演示


Dockfile就是用来构建docker镜像的构建文件!命令和脚本
通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个一个的命令,每个命令都是一层的
image.png

  1. [root@Cola _data]# vim dockerfile1
  2. [root@Cola _data]# cat dockerfile1
  3. FROM centos
  4. VOLUME ["VOLUME01","VOLUME02"]
  5. CMD echo "----end---"
  6. CMD /bin/bash
  7. [root@Cola home]# docker build -f /home/dockerfile1 -t phy/centos:1.0 .
  8. Sending build context to Docker daemon 219.8MB
  9. Step 1/4 : FROM centos
  10. ---> 5d0da3dc9764
  11. Step 2/4 : VOLUME ["VOLUME01","VOLUME02"]
  12. ---> Running in 0fcb5646d034
  13. Removing intermediate container 0fcb5646d034
  14. ---> 02bf905b2f67
  15. Step 3/4 : CMD echo "----end---"
  16. ---> Running in c2b1e271fae3
  17. Removing intermediate container c2b1e271fae3
  18. ---> f9869acf010e
  19. Step 4/4 : CMD /bin/bash
  20. ---> Running in 8e6ba7b21453
  21. Removing intermediate container 8e6ba7b21453
  22. ---> 16b571ccf6a7
  23. Successfully built 16b571ccf6a7
  24. Successfully tagged phy/centos:1.0
  25. [root@Cola home]# docker run -it --name phy -h phy -P 16b571ccf6a7 /bin/bash
  26. [root@phy /]# hostname
  27. phy

12.2 Dockerfile原理

image.png
image.png
image.png

ENTRYPOINY 命令追加
ONBUILD 触发指令
COPY 将我们的文件拷贝
ENV 构建的时候设置环境变量

12.3 Dockerfile构建镜像

1.创建自己的centos系统

  1. [root@Cola dockfile]# vim dockerfile1
  2. [root@Cola dockfile]# cat dockerfile1
  3. FROM centos
  4. MAINTAINER PHY
  5. ENV MYPATH /usr/local
  6. WORKDIR $MYPATH
  7. RUN yum install vim -y
  8. RUM yum install net-tools -y
  9. EXPOSE 80
  10. CMD echo $MYPATH
  11. CMD echo "Hello"
  12. CMD /bin/bash

2.通过文件构建镜像

  1. [root@Cola dockfile]# cat dockerfile1
  2. FROM centos
  3. MAINTAINER PHY
  4. ENV MYPATH /usr/local
  5. WORKDIR $MYPATH
  6. RUN yum install vim
  7. RUN yum install net-tools
  8. EXPOSE 80
  9. CMD echo $MYPATH
  10. CMD echo "Hello"
  11. CMD /bin/bash
  12. [root@Cola dockfile]# docker build -f /home/dockfile/dockerfile1 -t n1 .

3 测试运行

直接进入/usr/local目录
有下载的工具
image.png

查看镜像的构造历史
docker history n1
image.png

12.4 docker发布镜像

13 Docker网络

系统安装docker后,会自动生成docker0网卡,启动容器后,docker就会给容器分配一个IP,桥接模式,使用的是evth-pair技术,evth-pair技术是一对的虚拟设备接口,一段连着协议,一段彼此相连,

13.1 docker0

查看主机网卡
image.png

docker exec -ti c1 ip addr
docker exec -it c1 /bin/bash
docker run -it —name c3 -h c3 —link c2 centos
docker exec -it c3 cat /etc/hosts

13.2 —link

  1. [root@Cola ~]# docker run -it --name c3 -h c3 --link c2 centos
  2. --link 主机名连接
  3. [root@Cola ~]# docker exec -it c3 ping c2
  4. PING c2 (172.17.0.3) 56(84) bytes of data.
  5. 64 bytes from c2 (172.17.0.3): icmp_seq=1 ttl=64 time=0.080 ms
  6. 64 bytes from c2 (172.17.0.3): icmp_seq=2 ttl=64 time=0.046 ms
  7. ^C
  8. --- c2 ping statistics ---
  9. 2 packets transmitted, 2 received, 0% packet loss, time 1023ms
  10. rtt min/avg/max/mdev = 0.046/0.063/0.080/0.017 ms
  11. --linkhosts文件中增加了其他容器的映射
  12. [root@Cola ~]# docker exec -it c3 cat /etc/hosts
  13. 127.0.0.1 localhost
  14. ::1 localhost ip6-localhost ip6-loopback
  15. fe00::0 ip6-localnet
  16. ff00::0 ip6-mcastprefix
  17. ff02::1 ip6-allnodes
  18. ff02::2 ip6-allrouters
  19. 172.17.0.3 c2 c2
  20. 172.17.0.4 c3
  1. [root@Cola ~]# docker exec -ti c1 ip addr
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  3. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4. inet 127.0.0.1/8 scope host lo
  5. valid_lft forever preferred_lft forever
  6. 210: eth0@if211: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
  7. link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
  8. inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
  9. valid_lft forever preferred_lft forever

image.png

13.3 自定义网络(容器互联)

docker的网络模式,自定义网络中容器可通过主机名访问,不同的集群使用不同的网络进行隔离

docker network ls
bridge 桥接(默认) docker run -it -P —name c1 —net bridge centos
host 和宿主机共享
none 不配置网络
container 容器网络连通
  1. docker network create -d bridge --gateway 192.168.100.1 --subnet 192.168.100.0/24 t1
  2. [root@Cola ~]# docker network inspect t1
  3. [root@Cola ~]# docker run -it -h n5 --name n5 --network t1 centos
  4. [root@Cola ~]# docker exec -it n5 ip addr
  5. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  6. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  7. inet 127.0.0.1/8 scope host lo
  8. valid_lft forever preferred_lft forever
  9. 238: eth0@if239: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
  10. link/ether 02:42:ac:10:64:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
  11. inet 172.16.100.2/24 brd 172.16.100.255 scope global eth0
  12. valid_lft forever preferred_lft forever

Usage: docker network connect [OPTIONS] NETWORK CONTAINER
本质就是在容器中分配一个网卡

  1. [root@Cola ~]# docker network connect t1 n33

14 企业网络

15 Docker Compose

16 Docker Swarm

17 CI/CD Jenin流水线




Docker2

image.png

image.png
image.png

  1. [root@master ~]# docker commit -a "Jack" -m "add vim--- " centos centos-vim:v1
  1. [root@master ~]# docker run -d -p 5000:5000 -v /home/regisitr-workdir/:/tmp/registry --privileged=true --name registry registry

image.png

  1. docker run --name mysqlserver -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d -i -p 3306:3306 mysql:5.7

FROM
MAINTAINER

RUN
CMD
COPY/ADD
WORKDIR
EXPOSE
ENV
ENTRYPOINT
USER
VOLUME

COPY命令格式为COPY [—chown=:] <源路径1>… <目标路径> ,功能是复制指令,从上下文目录中复制文件或者目录到容器里指定路径。而ADD指令的命令格式跟COPY相同。其中上下文目录指的是docker build 命令的 PATH 或 URL 指定的路径中的文件的集合。
ADD在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>,但在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
image.png
image.png
image.png
image.png
image.png
image.png

Docker微服务

Docker compose

image.png
image.png