帮助命令

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

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

镜像命令

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

  1. [root@localhost ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. hello-world latest d1165f221234 3 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@localhost ~]# docker search mysql
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. mysql MySQL is a widely used, open-source relation 10970 [OK]
  4. mariadb MariaDB Server is a high performing open sou 4148 [OK]
  5. # 可选项
  6. --filter=STARS=3000 # 搜索星数大于3000的镜像

docker pull 下载镜像

  1. # 下载镜像 docker pull 镜像名[:tag]
  2. [root@localhost ~]# docker pull mysql
  3. Using default tag: latest # 如果不写tag 默认就是latest
  4. latest: Pulling from library/mysql
  5. 69692152171a: Pull complete # 分层下载 docker image的核心 联合文件系统
  6. 1651b0be3df3: Pull complete
  7. 951da7386bc8: Pull complete
  8. 0f86c95aa242: Pull complete
  9. 37ba2d8bd4fe: Pull complete
  10. 6d278bb05e94: Pull complete
  11. 497efbd93a3e: Pull complete
  12. f7fddf10c2c2: Pull complete
  13. 16415d159dfb: Pull complete
  14. 0e530ffc6b73: Pull complete
  15. b0a4a1a77178: Pull complete
  16. cd90f92aa9ef: Pull complete
  17. Digest: sha256:d50098d7fcb25b1fcb24e2d3247cae3fc55815d64fec640dc395840f8fa80969 # 签名
  18. Status: Downloaded newer image for mysql:latest
  19. docker.io/library/mysql:latest # 真实地址
  20. # 等价于它
  21. docker pull mysql
  22. docker pull docker.io/library/mysql:latest
  23. # 指定版本下载
  24. docker pull mysql:5.7
  25. [root@localhost ~]# docker pull mysql:5.7
  26. 5.7: Pulling from library/mysql
  27. 69692152171a: Already exists #联合文件系统 已经存在的文件不需要再下
  28. 1651b0be3df3: Already exists
  29. 951da7386bc8: Already exists
  30. 0f86c95aa242: Already exists
  31. 37ba2d8bd4fe: Already exists
  32. 6d278bb05e94: Already exists
  33. 497efbd93a3e: Already exists
  34. a023ae82eef5: Pull complete
  35. e76c35f20ee7: Pull complete
  36. e887524d2ef9: Pull complete
  37. ccb65627e1c3: Pull complete
  38. Digest: sha256:a682e3c78fc5bd941e9db080b4796c75f69a28a8cad65677c23f7a9f18ba21fa
  39. Status: Downloaded newer image for mysql:5.7
  40. docker.io/library/mysql:5.7

docker rmi 删除镜像

  1. docker rmi -f 容器id # 删除指定的容器
  2. docker rmi -f 容器id 容器id 容器id # 删除多个容器
  3. docker rmi -f $(docker images -aq) # 删除全部容器

容器命令

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

  1. docker pull centos

新建容器并使用

  1. docker run [可选参数] image
  2. # 参数说明
  3. --name="Name" # 容器名字 如tomcat01 tomcat02 用来区分容器
  4. -d # 后台方式运行
  5. -it # 使用交互方式运行,进入容器查看内容
  6. -p # 指定容器端口
  7. -p ip:主机端口:容器端口
  8. -p 主机端口:容器端口 (常用)
  9. -p 容器端口
  10. 容器端口
  11. -P # 随机指定端口
  12. # 测试 启动并进入容器
  13. [root@localhost ~]# docker run -it centos /bin/bash
  14. [root@1025b898f657 /]# ls # 查看容器内的centos 基础版本 有些指令不完善
  15. bin etc lib lost+found mnt proc run srv tmp var
  16. dev home lib64 media opt root sbin sys usr
  17. # 从容器中退回主机
  18. [root@1025b898f657 /]# exit
  19. exit
  20. [root@localhost ~]#

列出所有运行的容器

  1. # docker ps 命令
  2. # 列出当前正在运行的容器
  3. -a # 列出当前正在运行的容器+历史运行的容器
  4. -n=? # 显示最近创建的容器 ?代表想要显示的个数
  5. -q # 只显示容器编号
  6. [root@localhost ~]# docker ps
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. [root@localhost ~]# docker ps -a
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. 1025b898f657 centos "/bin/bash" 6 minutes ago Exited (0) 2 minutes ago vigorous_driscoll
  11. 3bbbd20ebfae hello-world "/hello" 2 hours ago Exited (0) 2 hours ago great_cori

退出容器

  1. exit # 容器停止并退出
  2. Ctrl + P + Q # 容器不停止但退出

删除容器

  1. docker rm 容器id # 删除指定容器 不能删除正在运行的容器
  2. docker rm -f $(docker ps -aq) # 删除所有容器
  3. docker ps -a -q|xargs docker rm # 删除所有容器

启动停止容器

  1. docker start 容器id # 启动指定容器
  2. docker restart 容器id # 重启指定容器
  3. docker stop 容器id # 关闭指定容器
  4. docker kill 容器id # 强制关闭指定容器
  5. docker stop $(docker ps -q) # 停止所有正在运行的容器

常用的其他命令

后台启动容器

  1. # 命令 docker run -d 镜像名
  2. [root@localhost ~]# docker run -d centos
  3. 109a9e4d93701fcd62d24de408546df9453f747f82fc8d74afdc0edb4cf7ddc6
  4. # 问题docker ps 发现 centos 停止了
  5. # 常见的坑 docker 容器使用后台运行,就必须有一个前台进程,docker发现没有应用,就会自动停止
  6. # 如 nginx 容器启动后发现自己没有提供服务,就会立刻停止,就是没有程序了

查看日志

  1. docker logs -f -t --tail 容器id
  2. # 显示日志
  3. -tf # 显示日志 带上时间戳
  4. --tail number # 要显示的日志条数
  5. [root@localhost ~]# docker logs -f -t --tail 10 af41af6d517d # 显示前10条日志

查看容器中的进程信息

  1. # 命令 docker top 容器id
  2. [root@localhost ~]# docker top af41af6d517d
  3. UID PID PPID C STIME TTY TIME CMD
  4. root 3293 3273 0 00:11 pts/0 00:00:00 /bin/bash

查看镜像元数据

  1. # 命令
  2. docker inspect 容器id
  3. # 测试
  4. [root@localhost ~]# docker inspect af41af6d517d
  5. [
  6. {
  7. "Id": "af41af6d517ddb28a9b937e6e9a52d8cd9bced5c12f986a09f2037c75cf59bc1",
  8. "Created": "2021-06-08T16:11:44.012734671Z",
  9. "Path": "/bin/bash",
  10. "Args": [],
  11. "State": {
  12. "Status": "running",
  13. "Running": true,
  14. "Paused": false,
  15. "Restarting": false,
  16. "OOMKilled": false,
  17. "Dead": false,
  18. "Pid": 3293,
  19. "ExitCode": 0,
  20. "Error": "",
  21. "StartedAt": "2021-06-08T16:11:44.400958524Z",
  22. "FinishedAt": "0001-01-01T00:00:00Z"
  23. },
  24. "Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
  25. "ResolvConfPath": "/var/lib/docker/containers/af41af6d517ddb28a9b937e6e9a52d8cd9bced5c12f986a09f2037c75cf59bc1/resolv.conf",
  26. "HostnamePath": "/var/lib/docker/containers/af41af6d517ddb28a9b937e6e9a52d8cd9bced5c12f986a09f2037c75cf59bc1/hostname",
  27. "HostsPath": "/var/lib/docker/containers/af41af6d517ddb28a9b937e6e9a52d8cd9bced5c12f986a09f2037c75cf59bc1/hosts",
  28. "LogPath": "/var/lib/docker/containers/af41af6d517ddb28a9b937e6e9a52d8cd9bced5c12f986a09f2037c75cf59bc1/af41af6d517ddb28a9b937e6e9a52d8cd9bced5c12f986a09f2037c75cf59bc1-json.log",
  29. "Name": "/confident_kapitsa",
  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/2d06ad018aab349d50c09f3d9aa813e283e9654d11c8cdf41cd4ce518fa8f8ee-init/diff:/var/lib/docker/overlay2/7aa72e785757a3f4174929835c0cd6986e08bf6fa28fec65a8284663488f5334/diff",
  133. "MergedDir": "/var/lib/docker/overlay2/2d06ad018aab349d50c09f3d9aa813e283e9654d11c8cdf41cd4ce518fa8f8ee/merged",
  134. "UpperDir": "/var/lib/docker/overlay2/2d06ad018aab349d50c09f3d9aa813e283e9654d11c8cdf41cd4ce518fa8f8ee/diff",
  135. "WorkDir": "/var/lib/docker/overlay2/2d06ad018aab349d50c09f3d9aa813e283e9654d11c8cdf41cd4ce518fa8f8ee/work"
  136. },
  137. "Name": "overlay2"
  138. },
  139. "Mounts": [],
  140. "Config": {
  141. "Hostname": "af41af6d517d",
  142. "Domainname": "",
  143. "User": "",
  144. "AttachStdin": true,
  145. "AttachStdout": true,
  146. "AttachStderr": true,
  147. "Tty": true,
  148. "OpenStdin": true,
  149. "StdinOnce": true,
  150. "Env": [
  151. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  152. ],
  153. "Cmd": [
  154. "/bin/bash"
  155. ],
  156. "Image": "centos",
  157. "Volumes": null,
  158. "WorkingDir": "",
  159. "Entrypoint": null,
  160. "OnBuild": null,
  161. "Labels": {
  162. "org.label-schema.build-date": "20201204",
  163. "org.label-schema.license": "GPLv2",
  164. "org.label-schema.name": "CentOS Base Image",
  165. "org.label-schema.schema-version": "1.0",
  166. "org.label-schema.vendor": "CentOS"
  167. }
  168. },
  169. "NetworkSettings": {
  170. "Bridge": "",
  171. "SandboxID": "186d1b2fbd9cfec8f49dd40101b3dc47bf97e9c6d92df8b95ff0a189cfad7535",
  172. "HairpinMode": false,
  173. "LinkLocalIPv6Address": "",
  174. "LinkLocalIPv6PrefixLen": 0,
  175. "Ports": {},
  176. "SandboxKey": "/var/run/docker/netns/186d1b2fbd9c",
  177. "SecondaryIPAddresses": null,
  178. "SecondaryIPv6Addresses": null,
  179. "EndpointID": "944602d6fd5af269fca524d89571d729b670e93f670b0bbcc4386da4de43f6b4",
  180. "Gateway": "172.17.0.1",
  181. "GlobalIPv6Address": "",
  182. "GlobalIPv6PrefixLen": 0,
  183. "IPAddress": "172.17.0.2",
  184. "IPPrefixLen": 16,
  185. "IPv6Gateway": "",
  186. "MacAddress": "02:42:ac:11:00:02",
  187. "Networks": {
  188. "bridge": {
  189. "IPAMConfig": null,
  190. "Links": null,
  191. "Aliases": null,
  192. "NetworkID": "2b50586c472a79b46b4c3c8b742e6b2cf856034f9fc71fc576873be1324d3bad",
  193. "EndpointID": "944602d6fd5af269fca524d89571d729b670e93f670b0bbcc4386da4de43f6b4",
  194. "Gateway": "172.17.0.1",
  195. "IPAddress": "172.17.0.2",
  196. "IPPrefixLen": 16,
  197. "IPv6Gateway": "",
  198. "GlobalIPv6Address": "",
  199. "GlobalIPv6PrefixLen": 0,
  200. "MacAddress": "02:42:ac:11:00:02",
  201. "DriverOpts": null
  202. }
  203. }
  204. }
  205. }
  206. ]

进入当前正在运行的容器

  1. # 我们通常容器都是以后台方式运行的,需要进入容器,修改一下配置
  2. # 命令1
  3. docker exec -it 容器id
  4. # 测试
  5. [root@localhost ~]# docker ps
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. af41af6d517d centos "/bin/bash" 19 minutes ago Up 19 minutes confident_kapitsa
  8. [root@localhost ~]# docker exec -it af41af6d517d /bin/bash
  9. [root@af41af6d517d /]# ls
  10. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  11. [root@af41af6d517d /]# ps -ef
  12. UID PID PPID C STIME TTY TIME CMD
  13. root 1 0 0 16:11 pts/0 00:00:00 /bin/bash
  14. root 17 0 0 16:32 pts/1 00:00:00 /bin/bash
  15. root 32 17 0 16:32 pts/1 00:00:00 ps -ef
  16. # 命令2
  17. docker attach 容器id
  18. # 测试
  19. [root@localhost ~]# docker ps
  20. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  21. af41af6d517d centos "/bin/bash" 23 minutes ago Up 23 minutes confident_kapitsa
  22. [root@localhost ~]# docker attach af41af6d517d
  23. [root@af41af6d517d /]#
  24. 正在执行当前的代码...
  25. # 两个命令的区别
  26. docker exec -it 容器id # 进入容器后开启一个新的终端,可以在里面操作(常用)
  27. docker attach 容器id # 进入容器正在执行的终端,不会启动新的进程

从容器内拷贝文件到主机

  1. docker cp 容器id:容器内路径 目的地主机路径
  2. # 查看当前主机目录下
  3. [root@localhost home]# ls
  4. admin
  5. [root@localhost home]# docker ps
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. ffa44a9e0ccd centos "/bin/bash" 5 minutes ago Up 5 minutes bold_buck
  8. # 进入docker容器内部
  9. [root@localhost home]# docker attach ffa44a9e0ccd
  10. [root@ffa44a9e0ccd /]# cd /home/
  11. [root@ffa44a9e0ccd home]# ls
  12. # 在容器内新建一个文件 test.java
  13. [root@ffa44a9e0ccd home]# touch test.java
  14. [root@ffa44a9e0ccd home]# ls
  15. test.java
  16. [root@ffa44a9e0ccd home]# exit
  17. exit
  18. # 将这个文件拷贝到主机上
  19. [root@localhost home]# docker cp ffa44a9e0ccd:/home/test.java /home/
  20. [root@localhost home]# ls
  21. admin test.java
  22. # 这里是一个手动拷贝过程,未来我们使用 -V 卷技术,可以实现,自动同步

小结

  1. # 当前shell下attach 连接指定镜像
  2. attach Attach local standard input, output, and error streams to a running container
  3. # 通过Dockerfile 定制镜像
  4. build Build an image from a Dockerfile
  5. # 提交当前容器为新镜像
  6. commit Create a new image from a container's changes
  7. # 从容器中拷贝指定文件或目录到宿主机上
  8. cp Copy files/folders between a container and the local filesystem
  9. # 创建一个新的容器,同run ,但不启动容器
  10. create Create a new container
  11. # 查看docker的变化
  12. diff Inspect changes to files or directories on a container's filesystem
  13. # 从deoker 容器获取实时事件
  14. events Get real time events from the server
  15. # 在已经存在的容器上运行命令
  16. exec Run a command in a running container
  17. # 导出容器的内容流作为一个 tar 归档文件[对应 import]
  18. export Export a container's filesystem as a tar archive
  19. # 展示一个镜像形成历史
  20. history Show the history of an image
  21. # 列出系统当前镜像
  22. images List images
  23. # 从tar包中的内容创建一个新的文件系统映像[对应 export]
  24. import Import the contents from a tarball to create a filesystem image
  25. # 显示系统相关信息
  26. info Display system-wide information
  27. # 查看容器详细信息
  28. inspect Return low-level information on Docker objects
  29. # kill 指定docker 容器
  30. kill Kill one or more running containers
  31. # 从一个 tar 包中加载一个镜像[对应 save]
  32. load Load an image from a tar archive or STDIN
  33. # 注册或登录一个docker源服务器
  34. login Log in to a Docker registry
  35. # 从当前docker registry 退出
  36. logout Log out from a Docker registry
  37. # 输出当前容器日志信息
  38. logs Fetch the logs of a container
  39. # 暂停容器
  40. pause Pause all processes within one or more containers
  41. # 查看映射端口对应的容器内部源端口
  42. port List port mappings or a specific mapping for the container
  43. # 列出容器列表
  44. ps List containers
  45. # 从docker 镜像源服务器拉取指定镜像或库镜像
  46. pull Pull an image or a repository from a registry
  47. # 推送指定镜像或库镜像至docker 镜像源服务器
  48. push Push an image or a repository to a registry
  49. # 容器重命名
  50. rename Rename a container
  51. # 重启运行的容器
  52. restart Restart one or more containers
  53. # 移除一个或多个容器
  54. rm Remove one or more containers
  55. # 移除一个或多个镜像
  56. rmi Remove one or more images
  57. # 创建一个新容器并运行一个命令
  58. run Run a command in a new container
  59. # 保存一个镜像为一个 tar 包[对应 load]
  60. save Save one or more images to a tar archive (streamed to STDOUT by default)
  61. # 在 docker hub 中查找镜像
  62. search Search the Docker Hub for images
  63. # 启动容器
  64. start Start one or more stopped containers
  65. # 查看所有运行中的容器资源使用情况
  66. stats Display a live stream of container(s) resource usage statistics
  67. # 停止容器
  68. stop Stop one or more running containers
  69. # 给源中镜像打标签
  70. tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  71. # 查看容器中运行的容器信息
  72. top Display the running processes of a container
  73. # 取消暂停容器
  74. unpause Unpause all processes within one or more containers
  75. # 更新一个或多个容器配置信息
  76. update Update configuration of one or more containers
  77. # 查看docker 版本号
  78. version Show the Docker version information
  79. # 截取docker停止运行时的信号量
  80. wait Block until one or more containers stop, then print their exit codes

src=http___blog.itpub.net_ueditor_php_upload_image_20200618_1592488251857376.png&refer=http___blog.itpub.jpg

作业练习

Docker 安装 Nginx

  1. 1. 搜索镜像
  2. [root@localhost home]# docker search nginx
  3. NAME DESCRIPTION STAR
  4. nginx Official build of Nginx. 1498
  5. jwilder/nginx-proxy Automated Nginx reverse proxy for docker con 2033
  6. 2. 下载镜像
  7. [root@localhost home]# docker pull nginx
  8. Using default tag: latest
  9. latest: Pulling from library/nginx
  10. 69692152171a: Pull complete
  11. 30afc0b18f67: Pull complete
  12. 596b1d696923: Pull complete
  13. febe5bd23e98: Pull complete
  14. 8283eee92e2f: Pull complete
  15. 351ad75a6cfa: Pull complete
  16. Digest: sha256:6d75c99af15565a301e48297fa2d121e15d80ad526f8369c526324f0f7ccb750
  17. Status: Downloaded newer image for nginx:latest
  18. docker.io/library/nginx:latest
  19. 3. 查看镜像
  20. [root@localhost home]# docker images
  21. REPOSITORY TAG IMAGE ID CREATED SIZE
  22. nginx latest d1a364dc548d 2 weeks ago 133MB
  23. hello-world latest d1165f221234 3 months ago 13.3kB
  24. centos latest 300e315adb2f 6 months ago 209MB
  25. 4. 启动镜像
  26. [root@localhost home]# docker run -d --name nginx01 -p 3344:80 nginx
  27. ca3353f3adafb24dea2e196b5bcea2b5289fa8467fc3678ef8d5a33baae8436c
  28. [root@localhost home]# docker ps
  29. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  30. ca3353f3adaf nginx "/docker-entrypoint.…" 7 seconds ago Up 6 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
  31. 78d14e03e04f centos "/bin/bash" 30 minutes ago Up 30 minutes
  32. 5. 本机自测
  33. [root@localhost home]# curl localhost:3344
  34. <!DOCTYPE html>
  35. <html>
  36. <head>
  37. <title>Welcome to nginx!</title>

Docker 安装 tomcat

  1. # 官方的使用命令
  2. docker run -it --rm tomcat:9.0
  3. docker run -it --rm -p 8888:8080 tomcat:9.0
  4. # 我们之前的启动都是后台,停止容器之后,容器还是可以查到
  5. # --rm 代表用完即删,一般用于测试
  6. # 正常使用
  7. docker run -it -d -p 8888:8080 tomcat:9.0
  8. # 启动容器测试发现tomcat启动成功,访问的页面是404
  9. # 进入容器
  10. [root@localhost ~]# docker ps
  11. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  12. 8081f50767d2 tomcat:9.0 "catalina.sh run" 5 minutes ago Up 5 minutes 0.0.0.0:8888->8080/tcp, :::8888->8080/tcp great_jackson
  13. [root@localhost ~]# docker exec -it 8081f50767d2 /bin/bash
  14. # 发现问题 1.Linux命令少了 2.没有webapps
  15. root@8081f50767d2:/usr/local/tomcat# ll
  16. bash: ll: command not found
  17. root@8081f50767d2:/usr/local/tomcat# ls
  18. BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
  19. CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
  20. root@8081f50767d2:/usr/local/tomcat# cd webapps
  21. root@8081f50767d2:/usr/local/tomcat/webapps# ls
  22. root@8081f50767d2:/usr/local/tomcat/webapps#
  23. # 原因,阿里云默认是最小的镜像,把不必要的都剔除了,保证最小可运行环境
  24. # 可以将webapps.dist里的文件拷贝到webapps下
  25. root@8081f50767d2:/usr/local/tomcat# cp -r webapps.dist/* webapps
  26. root@8081f50767d2:/usr/local/tomcat# cd webapps
  27. root@8081f50767d2:/usr/local/tomcat/webapps# ls
  28. ROOT docs examples host-manager manager
  29. # 再次访问发现出现tomcat首页

部署 es + kibana

  1. # 安装elasticsearch
  2. # es 暴露的端口很多
  3. # es 十分耗内存
  4. # es 的数据需要挂载到安全目录
  5. # --net somenetwork 网络配置 没有可以去掉
  6. docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
  7. # 下载启动elasticsearch
  8. docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.13.1
  9. # 测试es是否启动成功了
  10. [root@localhost ~]# curl localhost:9200
  11. {
  12. "name" : "4dcada7df025",
  13. "cluster_name" : "docker-cluster",
  14. "cluster_uuid" : "YnRVjdhrQ7yKPPGhS7shPQ",
  15. "version" : {
  16. "number" : "7.13.1",
  17. "build_flavor" : "default",
  18. "build_type" : "docker",
  19. "build_hash" : "9a7758028e4ea59bcab41c12004603c5a7dd84a9",
  20. "build_date" : "2021-05-28T17:40:59.346932922Z",
  21. "build_snapshot" : false,
  22. "lucene_version" : "8.8.2",
  23. "minimum_wire_compatibility_version" : "6.8.0",
  24. "minimum_index_compatibility_version" : "6.0.0-beta1"
  25. },
  26. "tagline" : "You Know, for Search"
  27. }
  28. # docker stats 查看cpu的状态
  29. [root@localhost ~]# docker stats
  30. CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
  31. 4dcada7df025 elasticsearch 0.27% 593.9MiB / 991MiB 59.93% 656B / 0B 1.86GB / 2.88MB 47
  32. # 发现内存占比达到 59.93% 十分耗内存
  33. # 关闭es
  34. [root@localhost ~]# docker stop elasticsearch
  35. elasticsearch
  36. # 删除容器 否则执行下面的命令会出现容器名已存在报错 若下面命令改成--name elasticsearch01等名称可忽略
  37. [root@localhost ~]# docker rm elasticsearch
  38. elasticsearch
  39. # 增加使用内存的限制 修改配置文件 -e 环境配置修改
  40. [root@localhost ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.13.1
  41. b9ac2f257e11d8a2f23499a51f756fdc864ff18f4c07027c29a9e8563dca5a63
  42. [root@localhost ~]# docker ps
  43. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  44. b9ac2f257e11 elasticsearch:7.13.1 "/bin/tini -- /usr/l…" 8 seconds ago Up 7 seconds 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch
  45. # 再次查看内存使用情况
  46. [root@localhost ~]# docker stats
  47. CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
  48. b9ac2f257e11 elasticsearch 0.32% 429.5MiB / 991MiB 43.34% 656B / 0B 231MB / 2.44MB 46
  49. #内存占比下降到 43.34% 配置成功生效
  1. # 安装kibana
  2. # 运行kibana 注意版本要与es一致
  3. docker run -d --name kibana --net somenetwork -p 5601:5601 kibana:tag
  4. [root@localhost ~]# docker run -d --name kibana -p 5601:5601 kibana:7.13.1
  5. Unable to find image 'kibana:7.13.1' locally
  6. 7.13.1: Pulling from library/kibana
  7. 7a0437f04f83: Already exists
  8. ad86619e7d57: Pull complete
  9. ...
  10. Digest: sha256:298a8520298f229f4be784f8fb204976b4e5215b89968f82bc45a469c00933ab
  11. Status: Downloaded newer image for kibana:7.13.1
  12. 1082559a7d0e81473c62d40a2e87682197b4241fb60167f8b00cb7500e3cf17b
  13. [root@localhost ~]# docker ps
  14. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  15. 1082559a7d0e kibana:7.13.1 "/bin/tini -- /usr/l…" 17 seconds ago Up 14 seconds 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana
  16. b9ac2f257e11 elasticsearch:7.13.1 "/bin/tini -- /usr/l…" 3 hours ago Up 3 hours 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch
  17. # 浏览器访问 http://192.168.1.211:5601/ 成功访问
  1. # 配置 kibana连接es
  2. # 停止 es 和 kibana
  3. [root@localhost ~]# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 1082559a7d0e kibana:7.13.1 "/bin/tini -- /usr/l…" 17 seconds ago Up 14 seconds 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana
  6. b9ac2f257e11 elasticsearch:7.13.1 "/bin/tini -- /usr/l…" 3 hours ago Up 3 hours 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch
  7. [root@localhost ~]# docker rm $(docker ps -aq)
  8. 1082559a7d0e
  9. b9ac2f257e11
  10. [root@localhost ~]# docker ps
  11. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  12. # 启动elasticsearch
  13. [root@localhost ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.13.1
  14. 9d59b7b0e8aa2c977f0869de64f6f0245dbfaf2e62f863c522331117c96f8d03
  15. # 启动kibana
  16. # --link docker会自动在被连接容器内创建基于–link参数的环境变量 主要用来解决两个容器的连接问题
  17. # 源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。
  18. # docker run -d --name 接收容器名(#如tomcat) --link 源容器(被连接容器)(#如mysql)
  19. [root@localhost ~]# docker run -d -p 5601:5601 --name kibana --link elasticsearch:elasticsearch docker.io/kibana:7.13.1
  20. 5e675ab4e89585caf73e7d6489c5964e2d3e92a258e75ffcb07456f4400b09e1
  21. [root@localhost ~]# docker ps
  22. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  23. 5e675ab4e895 kibana:7.13.1 "/bin/tini -- /usr/l…" 6 seconds ago Up 5 seconds 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana
  24. 9d59b7b0e8aa elasticsearch:7.13.1 "/bin/tini -- /usr/l…" 44 seconds ago Up 43 seconds 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch

测试:访问http://192.168.1.211:9200/ 以及 http://192.168.1.211:5601
image.png
image.png