docker

RUN的流程和docker的原理

Docker底层原理

docker是一个client-server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问。

dockerserver接收到docker-client的指令就会执行命令

Docker为什么比虚拟机快?

1、docker有着比虚拟机更少的抽象层

2、docker使用的是宿主机的内核,虚拟机需要Guest OS

在新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别的。而docker是利用宿主机的操作系统,省略了这个复杂的过程。

Docker的常用命令

帮助命令

  1. docker version #显示版本信息
  2. docker info #显示docker的系统信息,包括镜像和容器的数量
  3. docker 命令 --help #帮助命令

帮助文档地址:https://docs.docker.com/reference/

镜像命令

docker images 查看主机本地所有镜像

  1. [root@docker-study ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. hello-world latest feb5d9fea6a5 4 months ago 13.3kB
  4. #解释
  5. REPOSITORY 镜像的仓库源
  6. TAG 镜像的标签
  7. IMAGE ID 镜像的ID
  8. CREATED 镜像的创建时间
  9. SIZE 镜像的大小
  10. #可选项
  11. -a, --all #列出所有镜像
  12. -q, --quiet #只显示镜像ID

docker search 搜索镜像

  1. [root@docker-study ~]# docker search mysql
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. mysql MySQL is a widely used, open-source relation 12078 [OK]
  4. mariadb MariaDB Server is a high performing open sou 4629 [OK]
  5. mysql/mysql-server Optimized MySQL Server Docker images. Create 904 [OK]
  6. #可选项,通过收藏来过滤
  7. --filter=STARS=3000 #搜索镜像收藏量达到3000的
  8. [root@docker-study ~]# docker search mysql --filter=STARS=3000
  9. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  10. mysql MySQL is a widely used, open-source relation 12078 [OK]
  11. mariadb MariaDB Server is a high performing open sou 4629 [OK]
  12. [root@docker-study ~]# docker search mysql --filter=STARS=5000
  13. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  14. mysql MySQL is a widely used, open-source relation 12078 [OK]

docker pull 下载镜像

  1. #下载镜像 docker pull 镜像名 [:tag]
  2. [root@docker-study ~]# docker pull mysql
  3. Using default tag: latest #如果不写tag,默认就是latest
  4. latest: Pulling from library/mysql
  5. 72a69066d2fe: Pull complete #分层下载,docker images的核心,联合文件系统
  6. 93619dbc5b36: Pull complete
  7. 99da31dd6142: Pull complete
  8. 626033c43d70: Pull complete
  9. 37d5d7efb64e: Pull complete
  10. ac563158d721: Pull complete
  11. d2ba16033dad: Pull complete
  12. 688ba7d5c01a: Pull complete
  13. 00e060b6d11d: Pull complete
  14. 1c04857f594f: Pull complete
  15. 4d7cfa90e6ea: Pull complete
  16. e0431212d27d: Pull complete
  17. Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名
  18. Status: Downloaded newer image for mysql:latest
  19. docker.io/library/mysql:latest #真实地址
  20. #docker pull mysql = docker pull docker.io/library/mysql:latest
  21. #指定版本下载
  22. [root@docker-study ~]# docker pull mysql:5.7
  23. 5.7: Pulling from library/mysql
  24. 72a69066d2fe: Already exists
  25. 93619dbc5b36: Already exists
  26. 99da31dd6142: Already exists
  27. 626033c43d70: Already exists
  28. 37d5d7efb64e: Already exists
  29. ac563158d721: Already exists
  30. d2ba16033dad: Already exists
  31. 0ceb82207cd7: Pull complete
  32. 37f2405cae96: Pull complete
  33. e2482e017e53: Pull complete
  34. 70deed891d42: Pull complete
  35. Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
  36. Status: Downloaded newer image for mysql:5.7
  37. docker.io/library/mysql:5.7
  38. [root@docker-study ~]# docker images
  39. REPOSITORY TAG IMAGE ID CREATED SIZE
  40. mysql 5.7 c20987f18b13 7 weeks ago 448MB
  41. mysql latest 3218b38490ce 7 weeks ago 516MB
  42. hello-world latest feb5d9fea6a5 4 months ago 13.3kB

docker rmi 删除镜像

  1. docker rmi -f 镜像ID #删除指定镜像
  2. docker rmi -f 镜像ID 镜像ID 镜像ID #删除多个镜像
  3. docker rmi -f $(docker images -qa) #删除全部镜像
  4. [root@docker-study ~]# docker rmi c20987f18b13
  5. Untagged: mysql:5.7
  6. Untagged: mysql@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
  7. Deleted: sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76
  8. Deleted: sha256:6567396b065ee734fb2dbb80c8923324a778426dfd01969f091f1ab2d52c7989
  9. Deleted: sha256:0910f12649d514b471f1583a16f672ab67e3d29d9833a15dc2df50dd5536e40f
  10. Deleted: sha256:6682af2fb40555c448b84711c7302d0f86fc716bbe9c7dc7dbd739ef9d757150
  11. Deleted: sha256:5c062c3ac20f576d24454e74781511a5f96739f289edaadf2de934d06e910b92
  12. [root@docker-study ~]# docker images
  13. REPOSITORY TAG IMAGE ID CREATED SIZE
  14. mysql latest 3218b38490ce 7 weeks ago 516MB
  15. hello-world latest feb5d9fea6a5 4 months ago 13.3kB
  16. [root@docker-study ~]# docker rmi -f $(docker images -qa)
  17. Untagged: mysql:latest
  18. Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
  19. Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b
  20. Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5
  21. Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d
  22. Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9
  23. Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3
  24. Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff
  25. Deleted: sha256:8805862fcb6ef9deb32d4218e9e6377f35fb351a8be7abafdf1da358b2b287ba
  26. Deleted: sha256:872d2f24c4c64a6795e86958fde075a273c35c82815f0a5025cce41edfef50c7
  27. Deleted: sha256:6fdb3143b79e1be7181d32748dd9d4a845056dfe16ee4c827410e0edef5ad3da
  28. Deleted: sha256:b0527c827c82a8f8f37f706fcb86c420819bb7d707a8de7b664b9ca491c96838
  29. Deleted: sha256:75147f61f29796d6528486d8b1f9fb5d122709ea35620f8ffcea0e0ad2ab0cd0
  30. Deleted: sha256:2938c71ddf01643685879bf182b626f0a53b1356138ef73c40496182e84548aa
  31. Deleted: sha256:ad6b69b549193f81b039a1d478bc896f6e460c77c1849a4374ab95f9a3d2cea2
  32. Untagged: hello-world:latest
  33. Untagged: hello-world@sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
  34. Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
  35. [root@docker-study ~]# docker images
  36. REPOSITORY TAG IMAGE ID CREATED SIZE

容器命令

说明:我们有了镜像才可以创建容器,Linux,下载一个centOS镜像来测试学习

  1. docker pull centOS
  2. [root@docker-study ~]# docker pull centos
  3. Using default tag: latest
  4. latest: Pulling from library/centos
  5. a1d0c7532777: Pull complete
  6. Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
  7. Status: Downloaded newer image for centos:latest
  8. docker.io/library/centos:latest

新建容器并启动

  1. docker run [可选参数] image
  2. #参数说明
  3. --name="Name" 容器名字tomcat01 tomcat02 ,用来区分容器
  4. -d 后台方式运行
  5. -it 使用交互方式运行,进入容器来查看内容
  6. -p 指定容器的端口 -p 8080:8080
  7. -p ip:主机端口:容器端口
  8. -p 主机端口:容器端口(常用)
  9. -p 容器端口
  10. 容器端口
  11. -p 随机指定端口
  12. #测试,启动并进入容器
  13. [root@docker-study ~]# docker images
  14. REPOSITORY TAG IMAGE ID CREATED SIZE
  15. centos latest 5d0da3dc9764 4 months ago 231MB
  16. [root@docker-study ~]# docker run -it centos /bin/bash
  17. [root@05da8ec80dae /]# #此时已进入容器,主机名就是centOS的镜像ID
  18. [root@05da8ec80dae /]# ls #查看容器内的centOS
  19. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  20. #从容器中退出到主机
  21. [root@05da8ec80dae /]# exit
  22. exit
  23. [root@docker-study ~]# ls
  24. docker-client docker-client-latest docker-common docker-engine docker-latest docker-latest-logrotate docker-logrotate

docker ps 列出所有在运行的容器

  1. #docker ps 命令
  2. #列出当前正在运行的容器
  3. -a #列出当前正在运行的容器+带出历史运行过的容器
  4. -n=? #显示最近创建的容器
  5. -q #只显示容器的编号
  6. [root@docker-study ~]# docker ps
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. [root@docker-study ~]# docker ps -a
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. 05da8ec80dae centos "/bin/bash" 10 minutes ago Exited (130) 7 minutes ago sad_zhukovsky
  11. 8d41ef521f11 feb5d9fea6a5 "/hello" 6 days ago Exited (0) 6 days ago gracious_raman
  12. 34c15feb1abc feb5d9fea6a5 "/hello" 7 days ago Exited (0) 7 days ago affectionate_lederberg
  13. ae0e80ec3300 feb5d9fea6a5 "/hello" 3 weeks ago Exited (0) 3 weeks ago blissful_pascal
  14. [root@docker-study ~]# docker ps -qa
  15. 05da8ec80dae
  16. 8d41ef521f11
  17. 34c15feb1abc
  18. ae0e80ec3300

退出容器

  1. exit #直接容器停止并退出
  2. Ctrl + P + Q #容器不停止退出
  3. [root@docker-study ~]# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. [root@docker-study ~]# docker run -it centos /bin/bash
  6. [root@9d3728df88a3 /]# [root@docker-study ~]#
  7. [root@docker-study ~]# docker ps
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. 9d3728df88a3 centos "/bin/bash" 22 seconds ago Up 21 seconds gracious_ritchie
  10. [root@docker-study ~]#

删除容器

  1. docker rm 容器ID #删除指定容器,不能删除正在运行的容器,如果要强制删除加参数 -f
  2. docker rm -f $(docker ps -aq) #删除所有容器
  3. docker ps -a -q|xargs docker rm #删除所有容器
  4. [root@docker-study ~]# docker ps -qa
  5. 9d3728df88a3
  6. 05da8ec80dae
  7. 8d41ef521f11
  8. 34c15feb1abc
  9. ae0e80ec3300
  10. [root@docker-study ~]# docker rm -f $(docker ps -qa)
  11. 9d3728df88a3
  12. 05da8ec80dae
  13. 8d41ef521f11
  14. 34c15feb1abc
  15. ae0e80ec3300
  16. [root@docker-study ~]# docker ps -qa
  17. [root@docker-study ~]#

启动和停止容器

  1. docker start 容器ID #启动容器
  2. docker restart 容器ID #重启容器
  3. docker stop 容器ID #停止容器
  4. docker kill 容器ID #强制停止当前容器
  5. [root@docker-study ~]# docker ps -a
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. 94f45ae20dc3 centos "/bin/bash" 13 seconds ago Exited (0) 9 seconds ago vibrant_wilbur
  8. [root@docker-study ~]# docker start 94f45ae20dc3
  9. 94f45ae20dc3
  10. [root@docker-study ~]# docker ps
  11. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  12. 94f45ae20dc3 centos "/bin/bash" 27 seconds ago Up 3 seconds vibrant_wilbur
  13. [root@docker-study ~]# docker stop 94f45ae20dc3
  14. 94f45ae20dc3
  15. [root@docker-study ~]# docker ps
  16. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

常用其他命令

后台启动容器
  1. #docker run -d 镜像名
  2. [root@docker-study ~]# docker run -d centos
  3. 97dfebc630aca3b51325171bdcdbccfc2ea7ac5fdb2c68d6cb6a7fa9f97787a6
  4. [root@docker-study ~]# docker ps
  5. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  6. #常见的坑,docker容器使用后台运行,必须要有一个前台进程,docker发现没有应用就会自动停止
  7. #如Nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

日志命令
  1. docker logs -f -t 容器 查看日志
  2. [root@docker-study ~]# docker logs --help
  3. Usage: docker logs [OPTIONS] CONTAINER
  4. Fetch the logs of a container
  5. Options:
  6. --details Show extra details provided to logs
  7. -f, --follow Follow log output
  8. --since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  9. -n, --tail string Number of lines to show from the end of the logs (default "all")
  10. -t, --timestamps Show timestamps
  11. --until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  12. #示例
  13. [root@docker-study ~]# docker logs -f -t --tail 10 f9ef58bcedbc
  14. [root@f9ef58bcedbc /]#
  15. 2022-02-09T03:27:10.582692084Z [root@f9ef58bcedbc /]#
  16. 2022-02-09T03:27:10.743300956Z [root@f9ef58bcedbc /]#

查看容器进程信息
  1. #命令 docker top 容器ID
  2. [root@docker-study ~]# docker top f9ef58bcedbc
  3. UID PID PPID C STIME TTY TIME CMD
  4. root 23726 23707 0 11:27 pts/0 00:00:00 /bin/bash

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

进入当前正在运行的容器
  1. #容器通常都是使用后台运行的,需要进入容器修改配置
  2. #命令
  3. docker exec -it 容器ID bashShell #进入容器并开启新的终端,可以在里面操作(常用)
  4. [root@docker-study ~]# docker exec -it f9ef58bcedbc /bin/bash
  5. [root@f9ef58bcedbc /]#
  6. [root@f9ef58bcedbc /]# ls
  7. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  8. [root@f9ef58bcedbc /]# ps -ef
  9. UID PID PPID C STIME TTY TIME CMD
  10. root 1 0 0 03:27 pts/0 00:00:00 /bin/bash
  11. root 15 0 0 03:42 pts/1 00:00:00 /bin/bash
  12. root 30 15 0 03:42 pts/1 00:00:00 ps -ef
  13. #方式二
  14. docker attach 容器ID #进入到正在运行的终端,不启用新的终端
  15. [root@docker-study ~]# docker attach f9ef58bcedbc
  16. [root@f9ef58bcedbc /]#

从容器拷贝文件到主机上
  1. docker cp 容器ID:容器内路径 目的主机路径
  2. [root@docker-study home]# docker images
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. centos latest 5d0da3dc9764 4 months ago 231MB
  5. [root@docker-study home]# docker run -it centos /bin/bash
  6. [root@f9cd3b36b5df /]# ls
  7. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  8. [root@f9cd3b36b5df /]# touch test.txt
  9. [root@f9cd3b36b5df /]# exit
  10. exit
  11. [root@docker-study home]# ls
  12. [root@docker-study home]# docker ps -a
  13. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  14. f9cd3b36b5df centos "/bin/bash" About a minute ago Exited (0) About a minute ago modest_brahmagupta
  15. [root@docker-study home]# docker cp f9cd3b36b5df:/test.txt ./
  16. [root@docker-study home]# ls
  17. test.txt
  18. #拷贝是一个手动过程,可以使用-v 卷的技术实现自动同步

练习

安装Nginx

  1. #1、搜索镜像 search 建议去docker官网搜索,可以看到帮助文档
  2. [root@docker-study ~]# docker search nginx
  3. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  4. nginx Official build of Nginx. 16272 [OK]
  5. jwilder/nginx-proxy Automated Nginx reverse proxy for docker con 2115 [OK]
  6. 。。。。。。
  7. #2、下载镜像
  8. [root@docker-study ~]# docker pull nginx
  9. Using default tag: latest
  10. latest: Pulling from library/nginx
  11. a2abf6c4d29d: Pull complete
  12. a9edb18cadd1: Pull complete
  13. 589b7251471a: Pull complete
  14. 186b1aaa4aa6: Pull complete
  15. b4df32aa5a72: Pull complete
  16. a0bcbecc962e: Pull complete
  17. Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
  18. Status: Downloaded newer image for nginx:latest
  19. docker.io/library/nginx:latest
  20. [root@docker-study ~]# docker images
  21. REPOSITORY TAG IMAGE ID CREATED SIZE
  22. nginx latest 605c77e624dd 5 weeks ago 141MB
  23. centos latest 5d0da3dc9764 4 months ago 231MB
  24. #3、运行
  25. [root@docker-study ~]# docker run -d --name nginx01 -p 3344:80 nginx
  26. 17fe19a3592426aa2d2f7a324b7af5016e8731d3ab309890b2efd11ff4e1dc3f
  27. #-d 后台运行
  28. #--name 给容器命名
  29. #-p 宿主机端口,容器内部端口
  30. #4、查看是否运行成功,并测试
  31. [root@docker-study ~]# docker ps
  32. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  33. 17fe19a35924 nginx "/docker-entrypoint.…" 5 seconds ago Up 4 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
  34. [root@docker-study ~]# curl localhost:3344
  35. <!DOCTYPE html>
  36. <html>
  37. <head>
  38. <title>Welcome to nginx!</title>
  39. <style>
  40. html { color-scheme: light dark; }
  41. body { width: 35em; margin: 0 auto;
  42. font-family: Tahoma, Verdana, Arial, sans-serif; }
  43. </style>
  44. </head>
  45. <body>
  46. <h1>Welcome to nginx!</h1>
  47. <p>If you see this page, the nginx web server is successfully installed and
  48. working. Further configuration is required.</p>
  49. <p>For online documentation and support please refer to
  50. <a href="http://nginx.org/">nginx.org</a>.<br/>
  51. Commercial support is available at
  52. <a href="http://nginx.com/">nginx.com</a>.</p>
  53. <p><em>Thank you for using nginx.</em></p>
  54. </body>
  55. </html>
  56. #进入容器
  57. [root@docker-study ~]# docker exec -it nginx01 /bin/bash
  58. root@17fe19a35924:/# whereis nginx
  59. nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
  60. root@17fe19a35924:/# cd /etc/nginx/
  61. root@17fe19a35924:/etc/nginx# ls
  62. conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
  63. root@17fe19a35924:/etc/nginx#

端口暴露

安装Tomcat

  1. #官方的使用方式
  2. docker run -it --rm tomcat:9.0
  3. #之前的启动都是后台,停止了容器之后,容器还可以查到,docker run -it --rm,一般用来测试,用完就删除
  4. #下载再启动
  5. docker pull tomcat
  6. #启动运行
  7. [root@docker-study ~]# docker run -d -p 3355:8080 --name tomcat01 tomcat
  8. 2cc1e0f33ad035e19a0d4dda8342d36b9095d0305115294a121c508c9a958946
  9. [root@docker-study ~]# docker ps
  10. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  11. 2cc1e0f33ad0 tomcat "catalina.sh run" 5 seconds ago Up 4 seconds 0.0.0.0:3355->8080/tcp, :::3355->8080/tcp tomcat01
  12. #进入容器
  13. [root@docker-study ~]# docker exec -it tomcat01 /bin/bash
  14. root@2cc1e0f33ad0:/usr/local/tomcat# ls
  15. BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
  16. CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
  17. root@2cc1e0f33ad0:/usr/local/tomcat# ll
  18. bash: ll: command not found
  19. #发现问题,1,Linux命令少了,2,没有webapps 阿里云镜像的原因,默认是最小化安装,所有不必要的都删除掉了
  20. # webapps.dist目录下的文件复制到 webapps即可访问网页
  21. root@2cc1e0f33ad0:/usr/local/tomcat# cp -r webapps.dist/* webapps
  22. root@2cc1e0f33ad0:/usr/local/tomcat# cd webapps
  23. root@2cc1e0f33ad0:/usr/local/tomcat/webapps# ls
  24. ROOT docs examples host-manager manager
  25. root@2cc1e0f33ad0:/usr/local/tomcat/webapps#

部署es+kibana

  1. #es 暴露的端口很多
  2. #es 十分的耗内存
  3. #es 的数据一般需要放置到安全目录!挂载
  4. #--net somenetwork 网络配置
  5. #启动elasticsearch
  6. docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
  7. [root@docker-study ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
  8. Unable to find image 'elasticsearch:7.6.2' locally
  9. 7.6.2: Pulling from library/elasticsearch
  10. ab5ef0e58194: Pull complete
  11. c4d1ca5c8a25: Pull complete
  12. 941a3cc8e7b8: Pull complete
  13. 43ec483d9618: Pull complete
  14. c486fd200684: Pull complete
  15. 1b960df074b2: Pull complete
  16. 1719d48d6823: Pull complete
  17. Digest: sha256:1b09dbd93085a1e7bca34830e77d2981521a7210e11f11eda997add1c12711fa
  18. Status: Downloaded newer image for elasticsearch:7.6.2
  19. 33a87b02fc59c89072c53d7f5ed895621416af3dbc4e2bcf5a63fdfd65c5cefb
  20. #启动后Linux就卡住了,docker stats 查看CPU状态
  21. #查看es并测试是否启动成功
  22. [root@docker-study ~]# docker ps
  23. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  24. 33a87b02fc59 elasticsearch:7.6.2 "/usr/local/bin/dock…" 4 minutes ago Up 4 minutes 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch
  25. [root@docker-study ~]# curl localhost:9200
  26. {
  27. "name" : "33a87b02fc59",
  28. "cluster_name" : "docker-cluster",
  29. "cluster_uuid" : "CH-re-6tSvquYS39KNh6OQ",
  30. "version" : {
  31. "number" : "7.6.2",
  32. "build_flavor" : "default",
  33. "build_type" : "docker",
  34. "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
  35. "build_date" : "2020-03-26T06:34:37.794943Z",
  36. "build_snapshot" : false,
  37. "lucene_version" : "8.4.0",
  38. "minimum_wire_compatibility_version" : "6.8.0",
  39. "minimum_index_compatibility_version" : "6.0.0-beta1"
  40. },
  41. "tagline" : "You Know, for Search"
  42. }
  43. #修改配置增加内存限制, -e 环境配置修改
  44. [root@docker-study ~]# docker run -d --name elasticsearch05 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx521m" elasticsearch:7.6.2
  45. 1eba40920a6b055fdc04270176dff8a907f3edf7ee3db496d22a22105734962f
  46. [root@docker-study ~]# docker ps
  47. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  48. 1eba40920a6b elasticsearch:7.6.2 "/usr/local/bin/dock…" 3 seconds ago Up 2 seconds 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch05

可视化

portainer、Rancher(CI/CD时使用)

portainer

Docker 图形化管理工具,提供一个后台面板供我们操作

  1. [root@docker-study ~]# docker run -d -p 8088:9000 \
  2. > --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
  3. Unable to find image 'portainer/portainer:latest' locally
  4. latest: Pulling from portainer/portainer
  5. 94cfa856b2b1: Pull complete
  6. 49d59ee0881a: Pull complete
  7. a2300fd28637: Pull complete
  8. Digest: sha256:fb45b43738646048a0a0cc74fcee2865b69efde857e710126084ee5de9be0f3f
  9. Status: Downloaded newer image for portainer/portainer:latest
  10. 05b28d413e8408a53dd26f2985c261bd9897cd5f8f3dda9d10ac1abdf82c3907

外网浏览器访问服务器+端口

image.png
image.png