当前位置:   article > 正文

Docker - 镜像 | 容器 | 数据卷 日常开发常用指令 + 演示(一文通关)

Docker - 镜像 | 容器 | 数据卷 日常开发常用指令 + 演示(一文通关)

目录

Docker 开发常用指令汇总

辅助命令

docker version

docker info

docker --help

docker stats

镜像命令

查看镜像信息

下载镜像

搜索镜像

删除镜像

容器命令

查看运行中的容器

运行容器

修改容器启动参数

停止、启动、重启、暂停、恢复容器

杀死容器

删除容器

查看容器日志

进入容器内部

容器与宿主机之间的文件拷贝

如何部署一个 web 项目(war 包项目)

查看容器内运行的进程信息

查看容器内部细节

数据卷

作用&使用场景&注意事项

容器启动时指定数据卷

查看 docker 所有数据卷

创建一个别名数据卷

查看数据卷详细内容

删除一个数据卷

容器打包镜像

背景

将容器打包成一个新的镜像

镜像的备份和恢复


Docker 开发常用指令汇总


辅助命令

docker version

用来查看 docker 客户端引擎 和 server 端引擎版本信息

  1. [root@VM-8-17-centos ~]# docker version
  2. Client: Docker Engine - Community
  3. Version: 24.0.7
  4. API version: 1.43
  5. Go version: go1.20.10
  6. Git commit: afdd53b
  7. Built: Thu Oct 26 09:11:35 2023
  8. OS/Arch: linux/amd64
  9. Context: default
  10. Server: Docker Engine - Community
  11. Engine:
  12. Version: 24.0.7
  13. API version: 1.43 (minimum version 1.12)
  14. Go version: go1.20.10
  15. Git commit: 311b9ff
  16. Built: Thu Oct 26 09:10:36 2023
  17. OS/Arch: linux/amd64
  18. Experimental: false
  19. containerd:
  20. Version: 1.6.24
  21. GitCommit: 61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
  22. runc:
  23. Version: 1.1.9
  24. GitCommit: v1.1.9-0-gccaecfc
  25. docker-init:
  26. Version: 0.19.0
  27. GitCommit: de40ad0

docker info

用来查看 docker 引擎详细信息

  1. [root@VM-8-17-centos ~]# docker info
  2. Client: Docker Engine - Community
  3. Version: 24.0.7
  4. Context: default
  5. Debug Mode: false
  6. Plugins:
  7. buildx: Docker Buildx (Docker Inc.)
  8. Version: v0.11.2
  9. Path: /usr/libexec/docker/cli-plugins/docker-buildx
  10. compose: Docker Compose (Docker Inc.)
  11. Version: v2.21.0
  12. Path: /usr/libexec/docker/cli-plugins/docker-compose
  13. Server:
  14. Containers: 4
  15. Running: 4
  16. Paused: 0
  17. Stopped: 0
  18. Images: 8
  19. Server Version: 24.0.7
  20. Storage Driver: overlay2
  21. Backing Filesystem: extfs
  22. Supports d_type: true
  23. Using metacopy: false
  24. Native Overlay Diff: true
  25. userxattr: false
  26. Logging Driver: json-file
  27. Cgroup Driver: cgroupfs
  28. Cgroup Version: 1
  29. Plugins:
  30. Volume: local
  31. Network: bridge host ipvlan macvlan null overlay
  32. Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
  33. Swarm: inactive
  34. Runtimes: io.containerd.runc.v2 runc
  35. Default Runtime: runc
  36. Init Binary: docker-init
  37. containerd version: 61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
  38. runc version: v1.1.9-0-gccaecfc
  39. init version: de40ad0
  40. Security Options:
  41. seccomp
  42. Profile: builtin
  43. Kernel Version: 3.10.0-1160.99.1.el7.x86_64
  44. Operating System: CentOS Linux 7 (Core)
  45. OSType: linux
  46. Architecture: x86_64
  47. CPUs: 2
  48. Total Memory: 1.952GiB
  49. Name: VM-8-17-centos
  50. ID: 38c01492-c895-4bbc-8e2e-a575241b4201
  51. Docker Root Dir: /var/lib/docker
  52. Debug Mode: false
  53. Experimental: false
  54. Insecure Registries:
  55. 127.0.0.0/8
  56. Registry Mirrors:
  57. https://q9n10oke.mirror.aliyuncs.com/
  58. Live Restore Enabled: false

docker --help

用来查看帮助文档,给出了对于不同指令的解释

  1. [root@VM-8-17-centos ~]# docker --help
  2. Usage: docker [OPTIONS] COMMAND
  3. A self-sufficient runtime for containers
  4. Common Commands:
  5. run Create and run a new container from an image
  6. exec Execute a command in a running container
  7. ps List containers
  8. build Build an image from a Dockerfile
  9. pull Download an image from a registry
  10. push Upload an image to a registry
  11. images List images
  12. login Log in to a registry
  13. logout Log out from a registry
  14. search Search Docker Hub for images
  15. version Show the Docker version information
  16. info Display system-wide information
  17. Management Commands:
  18. builder Manage builds
  19. buildx* Docker Buildx (Docker Inc., v0.11.2)
  20. compose* Docker Compose (Docker Inc., v2.21.0)
  21. container Manage containers
  22. context Manage contexts
  23. image Manage images
  24. manifest Manage Docker image manifests and manifest lists
  25. network Manage networks
  26. plugin Manage plugins
  27. system Manage Docker
  28. trust Manage trust on Docker images
  29. volume Manage volumes
  30. Swarm Commands:
  31. swarm Manage Swarm
  32. Commands:
  33. attach Attach local standard input, output, and error streams to a running container
  34. commit Create a new image from a container's changes
  35. cp Copy files/folders between a container and the local filesystem
  36. create Create a new container
  37. diff Inspect changes to files or directories on a container's filesystem
  38. events Get real time events from the server
  39. export Export a container's filesystem as a tar archive
  40. history Show the history of an image
  41. import Import the contents from a tarball to create a filesystem image
  42. inspect Return low-level information on Docker objects
  43. kill Kill one or more running containers
  44. load Load an image from a tar archive or STDIN
  45. logs Fetch the logs of a container
  46. pause Pause all processes within one or more containers
  47. port List port mappings or a specific mapping for the container
  48. rename Rename a container
  49. restart Restart one or more containers
  50. rm Remove one or more containers
  51. rmi Remove one or more images
  52. save Save one or more images to a tar archive (streamed to STDOUT by default)
  53. start Start one or more stopped containers
  54. stats Display a live stream of container(s) resource usage statistics
  55. stop Stop one or more running containers
  56. tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  57. top Display the running processes of a container
  58. unpause Unpause all processes within one or more containers
  59. update Update configuration of one or more containers
  60. wait Block until one or more containers stop, then print their exit codes
  61. Global Options:
  62. --config string Location of client config files (default "/root/.docker")
  63. -c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
  64. -D, --debug Enable debug mode
  65. -H, --host list Daemon socket to connect to
  66. -l, --log-level string Set the logging level ("debug", "info", "warn", "error", "fatal") (default "info")
  67. --tls Use TLS; implied by --tlsverify
  68. --tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
  69. --tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
  70. --tlskey string Path to TLS key file (default "/root/.docker/key.pem")
  71. --tlsverify Use TLS and verify the remote
  72. -v, --version Print version information and quit
  73. Run 'docker COMMAND --help' for more information on a command.
  74. For more help on how to use Docker, head to https://docs.docker.com/go/guides/

docker stats

查看容器运行的监控指标 cpu...

  1. CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
  2. 82f2d06ab55b nacos 0.58% 702.4MiB / 1.952GiB 35.14% 656B / 0B 29.9MB / 4.41MB 97
  3. ee15a523b211 redis 0.15% 12.22MiB / 1.952GiB 0.61% 12.5kB / 31.9kB 4.9MB / 0B 4

镜像命令

查看镜像信息

查看当前本地仓库中存在哪些镜像.

  1. docker images -q | 镜像名
  2. // -q 和 镜像名 是可选参数

a)docker images 就是 docker image ls 的缩写,用来镜像以及信息

  1. [root@VM-8-17-centos ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. redis 5 c5da061a611a 2 years ago 110MB
  4. mysql 5.7 c20987f18b13 2 years ago 448MB
  5. rabbitmq 3.8-management 699038cb2b96 2 years ago 250MB
  6. nacos/nacos-server 1.4.2 938169b118c7 2 years ago 956MB
  7. redis 5.0.9 987b553c835f 3 years ago 98.3MB
  8. bladex/sentinel-dashboard 1.8.0 61c10eaefbcf 3 years ago 147MB
  9. nacos/nacos-server 1.2.0 763941e566bb 3 years ago 732MB
  10. bladex/sentinel-dashboard 1.7.1 d12e18546bfd 3 years ago 148MB
  1. REPOSITORY:镜像名称
  2. TAG:版本
  3. IMAGE ID:镜像 id
  4. CREATED:镜像创建的时间(官方创建此镜像的时间)
  5. SIZE:镜像大小

b)docker images -q 是用来查看所有镜像 id 的

  1. [root@VM-8-17-centos ~]# docker images -q
  2. c5da061a611a
  3. c20987f18b13
  4. 699038cb2b96
  5. 938169b118c7
  6. 987b553c835f
  7. 61c10eaefbcf
  8. 763941e566bb
  9. d12e18546bfd

Ps:一个镜像的 id 是很长的,这里只会展示一个部分

c)docker images 镜像名 用来查看指定镜像信息(镜像名相同,版本不同)

  1. [root@VM-8-17-centos ~]# docker images redis
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. redis 5 c5da061a611a 2 years ago 110MB
  4. redis 5.0.9 987b553c835f 3 years ago 98.3MB

同理,docker images -q 镜像名 就是展示指定镜像名的镜像id.

  1. [root@VM-8-17-centos ~]# docker images -q redis
  2. c5da061a611a
  3. 987b553c835f

下载镜像

用来下载一个镜像

docker pull 镜像名:版本号

a)例如下载最新版本 redis:docker pull redis 等同于 docker pull redis:latest

b)例如下载指定版本 redis:docker pull redis:5.0.9

搜索镜像

搜索镜像,只能查看远端仓库是否存在该镜像,不能列出版本.

docker search 镜像名

a)例如查看 tomcat 镜像是否存在

  1. [root@VM-8-17-centos ~]# docker search tomcat
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. tomcat Apache Tomcat is an open source implementati… 3618 [OK]
  4. tomee Apache TomEE is an all-Apache Java EE certif… 113 [OK]
  5. bitnami/tomcat Bitnami Tomcat Docker Image 51 [OK]
  6. bitnamicharts/tomcat 0
  7. secoresearch/tomcat-varnish Tomcat and Varnish 5.0 0 [OK]
  8. vulhub/tomcat 0
  9. islandora/tomcat 0
  10. wnprcehr/tomcat 0
  11. jumpserver/tomcat Apache Tomcat is an open source implementati… 0
  12. hivdb/tomcat-with-nucamino 0
  13. sismics/tomcat Apache Tomcat Servlet Container 1
  14. eclipse/rdf4j-workbench Dockerfile for Eclipse RDF4J Server and Work… 6
  15. eclipse/hadoop-dev Ubuntu 14.04, Maven 3.3.9, JDK8, Tomcat 8 0 [OK]
  16. gbif/ipt The GBIF Integrated Publishing Toolkit (IPT)… 2
  17. dhis2/base-dev Images in this repository contains DHIS2 WAR… 0
  18. eclipse/alpine_jdk8 Based on Alpine 3.3. JDK 1.8, Maven 3.3.9, T… 1 [OK]
  19. dhis2/base Images in this repository contains DHIS2 WAR… 0
  20. jelastic/tomcat An image of the Tomcat Java application serv… 4
  21. cfje/tomcat-resource Tomcat Concourse Resource 2
  22. rightctrl/tomcat CentOS , Oracle Java, tomcat application ssl… 7 [OK]
  23. amd64/tomcat Apache Tomcat is an open source implementati… 8
  24. arm64v8/tomcat Apache Tomcat is an open source implementati… 9
  25. tomcat2111/papercut-mf PaperCut MF Application Server 0
  26. softwareplant/tomcat Tomcat images for jira-cloud testing 0 [OK]
  27. tomcatengineering/pg_backup_rotated Clone of martianrock/pg_backup_rotated but w… 0

删除镜像

删除指定镜像

docker image rm 镜像名(name:tag) | 镜像id

a)正常删除(要求:必须是没有正在运行的镜像),例如删除 tomcat:8.0 镜像

  1. [root@VM-8-17-centos ~]# docker image rm tomcat:8.0
  2. Untagged: tomcat:8.0
  3. Untagged: tomcat@sha256:8ecb10948deb32c34aeadf7bf95d12a93fbd3527911fa629c1a3e7823b89ce6f
  4. Deleted: sha256:ef6a7c98d192507d6066dcf24e44bec66d07ec9cf7c55d8d3d1ea0a24660bdef
  5. Deleted: sha256:6dc5bbd9ede58ce52f6e9d34eaac4e3bf1fbb3014e9eae344677bf3c2f022a17
  6. Deleted: sha256:6f22c12dcf0ac783b0b00471e38262c708761a677e6a847a57a5d7cce2cbc7f1
  7. Deleted: sha256:dbefc7cd29b21d99c136d6234ca442cdb89fc91f3c91ef6c1d333d37424d2f44
  8. Deleted: sha256:d65396dbf112285c9d395bb33c2eb2f776cd9b959c007152c10a2f25fbf1c198
  9. Deleted: sha256:5b8a875f80bdd2e9f9cf2c0852243e0cb59ea7be5e92620b2c2089800bb18594
  10. Deleted: sha256:d97b31b9ca51e024a895e2f6fa032224fb73ba2a070149499ce87306ed9d7af6
  11. Deleted: sha256:3717c4f05493340d97d982bc6ed8cba98869833918de23c78c39414788dd08c1
  12. Deleted: sha256:b9c326fb510188d2958888aee970ae93925c2a2ad8a78b2ec3a521747ee3ec4f
  13. Deleted: sha256:8cc193ff8a5b4837eab54bee27418daadad8825f13b8fab55229b4954fee6f9f
  14. Deleted: sha256:b1852f6f3f85863ed849af673e566ad8de76dac4d2c6526d791e965978c1ce62
  15. Deleted: sha256:8c466bf4ca6ffdda8b7717b1cd6fe31109529ee64e626a003a224fb8bd2bc469

b)强制删除(可以删除正在运行的镜像):docker image rm -f 镜像名(name:tag) | 镜像 id

c)批量删除,例如删除所有 tomcat 镜像:docker image rm -f $(docker image tomcat -q)

容器命令

查看运行中的容器

查看运行中的容器信息

docker ps -a | -q

a)查看当前 docker 引擎中正在运行的容器

  1. [root@VM-8-17-centos ~]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. abc6284fe34d redis:5.0.9 "docker-entrypoint.s…" 5 weeks ago Up 5 weeks 0.0.0.0:6380->6379/tcp, :::6380->6379/tcp redis
  4. d442ff7829df nacos/nacos-server:1.4.2 "bin/docker-startup.…" 6 weeks ago Up 5 weeks 0.0.0.0:8848->8848/tcp, :::8848->8848/tcp nacos
  5. fc16ae62dc0f mysql:5.7 "docker-entrypoint.s…" 7 weeks ago Up 7 weeks 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp mysql
  6. a7dbf979b1e6 rabbitmq:3.8-management "docker-entrypoint.s…" 7 weeks ago Up 7 weeks 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp mq
  • CONTAINER ID:容器 id
  • IMAGE:基于那个镜像运行的
  • COMMAND:容器内启动服务的命令
  • CREATED:容器创建时间
  • STATUS:容器状态
  • PORTS:容器服务监听端口("->" 前表示宿主机端口,"->" 后表示映射的容器端口)
  • NAMES:容器名称(启动时,通过 --name 参数自定义的)

b)查看所有容器(运行 和 停止 的容器):docker ps -a

c)查看所有容器id:docker ps -aq

运行容器

docker run -d(后台运行) -p(端口映射) --name 自定义容器名 镜像名:tag

以下拿 tomcat:8.0 来举例 

a)简单运行一个容器(这种方式运行容器,会导致容器内无法访问,因为这里涉及到容器端口映射的概念,后面会讲)

  1. [root@VM-8-17-centos ~]# docker run tomcat:8.0
  2. 23-Dec-2023 12:25:27.847 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.0.53
  3. 23-Dec-2023 12:25:27.849 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Jun 29 2018 14:42:45 UTC
  4. 23-Dec-2023 12:25:27.849 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.0.53.0
  5. 23-Dec-2023 12:25:27.849 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
  6. 23-Dec-2023 12:25:27.849 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 3.10.0-1160.99.1.el7.x86_64
  7. 23-Dec-2023 12:25:27.849 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
  8. 23-Dec-2023 12:25:27.849 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-7-openjdk-amd64/jre
  9. 23-Dec-2023 12:25:27.849 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.7.0_181-b01
  10. 23-Dec-2023 12:25:27.850 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation
  11. 23-Dec-2023 12:25:27.850 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat
  12. 23-Dec-2023 12:25:27.850 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat
  13. 23-Dec-2023 12:25:27.851 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
  14. 23-Dec-2023 12:25:27.851 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
  15. 23-Dec-2023 12:25:27.851 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
  16. 23-Dec-2023 12:25:27.851 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
  17. 23-Dec-2023 12:25:27.851 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
  18. 23-Dec-2023 12:25:27.851 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
  19. 23-Dec-2023 12:25:27.851 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
  20. 23-Dec-2023 12:25:27.851 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
  21. 23-Dec-2023 12:25:27.852 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library 1.2.17 using APR version 1.5.1.
  22. 23-Dec-2023 12:25:27.852 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
  23. 23-Dec-2023 12:25:27.855 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized (OpenSSL 1.1.0f 25 May 2017)
  24. 23-Dec-2023 12:25:28.071 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-apr-8080"]
  25. 23-Dec-2023 12:25:28.083 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-apr-8009"]
  26. 23-Dec-2023 12:25:28.086 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 951 ms
  27. 23-Dec-2023 12:25:28.147 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina
  28. 23-Dec-2023 12:25:28.148 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.0.53
  29. 23-Dec-2023 12:25:28.163 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/docs
  30. 23-Dec-2023 12:25:28.827 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/docs has finished in 663 ms
  31. 23-Dec-2023 12:25:28.827 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/examples
  32. 23-Dec-2023 12:25:29.319 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/examples has finished in 492 ms
  33. 23-Dec-2023 12:25:29.319 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/host-manager
  34. 23-Dec-2023 12:25:29.379 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/host-manager has finished in 60 ms
  35. 23-Dec-2023 12:25:29.379 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/manager
  36. 23-Dec-2023 12:25:29.439 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/manager has finished in 60 ms
  37. 23-Dec-2023 12:25:29.439 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/ROOT
  38. 23-Dec-2023 12:25:29.468 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/ROOT has finished in 29 ms
  39. 23-Dec-2023 12:25:29.486 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
  40. 23-Dec-2023 12:25:29.550 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-apr-8009"]
  41. 23-Dec-2023 12:25:29.554 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1467 ms

b)运行 tomcat 容器,设置容器与宿主机端口映射关系

docker run -p 8081:8080 tomcat:8.0

Ps:-p 8081(宿主机):8080(容器)

c)运行 tomcat 容器,设置设置容器与宿主机端口映射关系,后台启动服务

docker run -p 8081:8080 -d tomcat:8.0

d)运行 tomcat 容器,设置设置容器与宿主机端口映射关系,后台启动服务,自定义容器名称

docker run -p 8081:8080 -d --name tomcat_1 tomcat:8.0

修改容器启动参数

docker update 容器id/容器名 修改参数

例如修改 nacos 的启动方式为 --restart=always

  1. ➜ ~ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 3000a4240d3b mongo:5.0.5 "docker-entrypoint.s…" 3 days ago Up About an hour 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp mongo
  4. f92e0e8b035a mysql:8.0.33 "docker-entrypoint.s…" 3 days ago Up About an hour 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
  5. 2f9781622313 nacos/nacos-server:v2.3.2 "bin/docker-startup.…" 3 weeks ago Up About an hour 0.0.0.0:7848->7848/tcp, :::7848->7848/tcp, 0.0.0.0:8848->8848/tcp, :::8848->8848/tcp, 0.0.0.0:9848->9848/tcp, :::9848->9848/tcp nacos
  6. bbcede76d550 redis:5.0.9 "docker-entrypoint.s…" 3 months ago Up About an hour 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis
  7. ➜ ~ docker update nacos --restart=always
  8. nacos
  9. ➜ ~

停止、启动、重启、暂停、恢复容器

停止容器:docker stop 容器id | name(这里的 name 是启动时自定义的)

启动容器:docker start 容器 id | name

重启容器:docker restart 容器 id | name

暂停容器:docker pause 容器 id | name

恢复容器(从暂停恢复到启动):docker unpause 容器 id | name

杀死容器

docker kill id | name

例如删除名称为 tomcat_1 的容器 

  1. [root@VM-8-17-centos ~]# docker kill tomcat_1
  2. tomcat_1

删除容器

a)正常删除容器(只能删除已经停止的容器):docker rm id | name

b)强制删除容器(可以删除运行中的容器):docker rm -f id | name

c)批量删除容器:docker rm -f $(docker ps -qa)

查看容器日志

docker logs -f id | name

a)查看当前容器的日志信息,例如查看 tomcat_1 容器的日志

  1. [root@VM-8-17-centos ~]# docker logs tomcat_1
  2. 23-Dec-2023 12:50:00.505 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.0.53
  3. 23-Dec-2023 12:50:00.508 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Jun 29 2018 14:42:45 UTC
  4. 23-Dec-2023 12:50:00.508 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.0.53.0
  5. 23-Dec-2023 12:50:00.508 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
  6. 23-Dec-2023 12:50:00.508 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 3.10.0-1160.99.1.el7.x86_64
  7. 23-Dec-2023 12:50:00.509 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
  8. 23-Dec-2023 12:50:00.509 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-7-openjdk-amd64/jre
  9. 23-Dec-2023 12:50:00.509 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.7.0_181-b01
  10. 23-Dec-2023 12:50:00.509 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation
  11. 23-Dec-2023 12:50:00.509 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat
  12. 23-Dec-2023 12:50:00.509 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat
  13. 23-Dec-2023 12:50:00.510 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
  14. 23-Dec-2023 12:50:00.510 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
  15. 23-Dec-2023 12:50:00.510 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
  16. 23-Dec-2023 12:50:00.510 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
  17. 23-Dec-2023 12:50:00.510 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
  18. 23-Dec-2023 12:50:00.510 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
  19. 23-Dec-2023 12:50:00.510 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
  20. 23-Dec-2023 12:50:00.510 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
  21. 23-Dec-2023 12:50:00.511 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library 1.2.17 using APR version 1.5.1.
  22. 23-Dec-2023 12:50:00.511 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
  23. 23-Dec-2023 12:50:00.515 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized (OpenSSL 1.1.0f 25 May 2017)
  24. 23-Dec-2023 12:50:00.712 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-apr-8080"]
  25. 23-Dec-2023 12:50:00.724 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-apr-8009"]
  26. 23-Dec-2023 12:50:00.726 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 920 ms
  27. 23-Dec-2023 12:50:00.780 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina
  28. 23-Dec-2023 12:50:00.780 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.0.53
  29. 23-Dec-2023 12:50:00.795 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/docs
  30. 23-Dec-2023 12:50:01.435 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/docs has finished in 639 ms
  31. 23-Dec-2023 12:50:01.435 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/examples
  32. 23-Dec-2023 12:50:01.931 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/examples has finished in 496 ms
  33. 23-Dec-2023 12:50:01.931 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/host-manager
  34. 23-Dec-2023 12:50:02.001 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/host-manager has finished in 70 ms
  35. 23-Dec-2023 12:50:02.002 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/manager
  36. 23-Dec-2023 12:50:02.075 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/manager has finished in 73 ms
  37. 23-Dec-2023 12:50:02.075 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/ROOT
  38. 23-Dec-2023 12:50:02.108 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/ROOT has finished in 33 ms
  39. 23-Dec-2023 12:50:02.118 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
  40. 23-Dec-2023 12:50:02.152 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-apr-8009"]
  41. 23-Dec-2023 12:50:02.155 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1429 ms

b)通过 -f 实时监控容器内服务的日志:docker logs -f id | name

进入容器内部

docker exec -it(交互模式) id | name bash

a)例如进入 tomcat_1 容器内部,然后查看容器内部的文件

  1. [root@VM-8-17-centos ~]# docker exec -it tomcat_1 bash
  2. root@e823da882acc:/usr/local/tomcat# ls
  3. LICENSE NOTICE RELEASE-NOTES RUNNING.txt bin conf include lib logs native-jni-lib temp webapps work

b)退出容器:exit

  1. root@e823da882acc:/usr/local/tomcat# exit
  2. exit
  3. [root@VM-8-17-centos ~]#

容器与宿主机之间的文件拷贝

a)将容器中指定文件拷贝到宿主机:docker cp 容器id:容器中文件或目录 宿主机目录

例如将 tomcat 容器中的 /usr/local/tomcat/RUNNING.txt 文件拷贝到宿主机的 /root/cyk/ 目录下

  1. [root@VM-8-17-centos cyk]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. e823da882acc tomcat:8.0 "catalina.sh run" 11 minutes ago Up 11 minutes 0.0.0.0:8082->8080/tcp, :::8082->8080/tcp tomcat_1
  4. abc6284fe34d redis:5.0.9 "docker-entrypoint.s…" 5 weeks ago Up 5 weeks 0.0.0.0:6380->6379/tcp, :::6380->6379/tcp redis
  5. d442ff7829df nacos/nacos-server:1.4.2 "bin/docker-startup.…" 6 weeks ago Up 5 weeks 0.0.0.0:8848->8848/tcp, :::8848->8848/tcp nacos
  6. fc16ae62dc0f mysql:5.7 "docker-entrypoint.s…" 7 weeks ago Up 7 weeks 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp mysql
  7. a7dbf979b1e6 rabbitmq:3.8-management "docker-entrypoint.s…" 7 weeks ago Up 7 weeks 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp mq
  8. [root@VM-8-17-centos cyk]#
  9. [root@VM-8-17-centos cyk]# docker cp e8:/usr/local/tomcat/RUNNING.txt /root/cyk/
  10. Successfully copied 17.9kB to /root/cyk/
  11. [root@VM-8-17-centos cyk]# ls
  12. RUNNING.txt

Ps:这里的 e8 是 tomcat_1 容器 id 的简写,只要能区分开,怎么简写都可以

b)将宿主机中指定文件拷贝到容器内:docker cp 宿主机目录 容器id:容器中文件或目录

如何部署一个 web 项目(war 包项目)

a)将 xxx.war 上传到 linux 服务器

b)通过 docker cp 命令将 xxx.war 赋值到 tomcat 的 webapp 目录中即可.

c)使用 ip 端口进行测试访问即可.

查看容器内运行的进程信息

docker top 容器id | name

a)查看 tomcat_1 容器内运行的进程信息

  1. [root@VM-8-17-centos cyk]# docker top tomcat_1
  2. UID PID PPID C STIME TTY TIME CMD
  3. root 32112 32092 0 20:49 ? 00:00:05 /docker-java-home/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

查看容器内部细节

docker inspect 容器id | name

a)例如查看 tomcat_1 容器内部细节 

  1. [root@VM-8-17-centos cyk]# docker inspect tomcat_1
  2. [
  3. {
  4. "Id": "e823da882accc99496e297da6cbf0004e3b1033304f65d6a2d3e538a36d53665",
  5. "Created": "2023-12-23T12:49:58.845311366Z",
  6. "Path": "catalina.sh",
  7. "Args": [
  8. "run"
  9. ],
  10. "State": {
  11. "Status": "running",
  12. "Running": true,
  13. "Paused": false,
  14. "Restarting": false,
  15. "OOMKilled": false,
  16. "Dead": false,
  17. "Pid": 32112,
  18. "ExitCode": 0,
  19. "Error": "",
  20. "StartedAt": "2023-12-23T12:49:59.234928823Z",
  21. "FinishedAt": "0001-01-01T00:00:00Z"
  22. },
  23. "Image": "sha256:ef6a7c98d192507d6066dcf24e44bec66d07ec9cf7c55d8d3d1ea0a24660bdef",
  24. "ResolvConfPath": "/var/lib/docker/containers/e823da882accc99496e297da6cbf0004e3b1033304f65d6a2d3e538a36d53665/resolv.conf",
  25. "HostnamePath": "/var/lib/docker/containers/e823da882accc99496e297da6cbf0004e3b1033304f65d6a2d3e538a36d53665/hostname",
  26. "HostsPath": "/var/lib/docker/containers/e823da882accc99496e297da6cbf0004e3b1033304f65d6a2d3e538a36d53665/hosts",
  27. "LogPath": "/var/lib/docker/containers/e823da882accc99496e297da6cbf0004e3b1033304f65d6a2d3e538a36d53665/e823da882accc99496e297da6cbf0004e3b1033304f65d6a2d3e538a36d53665-json.log",
  28. "Name": "/tomcat_1",
  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. "8080/tcp": [
  46. {
  47. "HostIp": "",
  48. "HostPort": "8082"
  49. }
  50. ]
  51. },
  52. "RestartPolicy": {
  53. "Name": "no",
  54. "MaximumRetryCount": 0
  55. },
  56. "AutoRemove": false,
  57. "VolumeDriver": "",
  58. "VolumesFrom": null,
  59. "ConsoleSize": [
  60. 36,
  61. 171
  62. ],
  63. "CapAdd": null,
  64. "CapDrop": null,
  65. "CgroupnsMode": "host",
  66. "Dns": [],
  67. "DnsOptions": [],
  68. "DnsSearch": [],
  69. "ExtraHosts": null,
  70. "GroupAdd": null,
  71. "IpcMode": "private",
  72. "Cgroup": "",
  73. "Links": null,
  74. "OomScoreAdj": 0,
  75. "PidMode": "",
  76. "Privileged": false,
  77. "PublishAllPorts": false,
  78. "ReadonlyRootfs": false,
  79. "SecurityOpt": null,
  80. "UTSMode": "",
  81. "UsernsMode": "",
  82. "ShmSize": 67108864,
  83. "Runtime": "runc",
  84. "Isolation": "",
  85. "CpuShares": 0,
  86. "Memory": 0,
  87. "NanoCpus": 0,
  88. "CgroupParent": "",
  89. "BlkioWeight": 0,
  90. "BlkioWeightDevice": [],
  91. "BlkioDeviceReadBps": [],
  92. "BlkioDeviceWriteBps": [],
  93. "BlkioDeviceReadIOps": [],
  94. "BlkioDeviceWriteIOps": [],
  95. "CpuPeriod": 0,
  96. "CpuQuota": 0,
  97. "CpuRealtimePeriod": 0,
  98. "CpuRealtimeRuntime": 0,
  99. "CpusetCpus": "",
  100. "CpusetMems": "",
  101. "Devices": [],
  102. "DeviceCgroupRules": null,
  103. "DeviceRequests": null,
  104. "MemoryReservation": 0,
  105. "MemorySwap": 0,
  106. "MemorySwappiness": null,
  107. "OomKillDisable": false,
  108. "PidsLimit": null,
  109. "Ulimits": null,
  110. "CpuCount": 0,
  111. "CpuPercent": 0,
  112. "IOMaximumIOps": 0,
  113. "IOMaximumBandwidth": 0,
  114. "MaskedPaths": [
  115. "/proc/asound",
  116. "/proc/acpi",
  117. "/proc/kcore",
  118. "/proc/keys",
  119. "/proc/latency_stats",
  120. "/proc/timer_list",
  121. "/proc/timer_stats",
  122. "/proc/sched_debug",
  123. "/proc/scsi",
  124. "/sys/firmware",
  125. "/sys/devices/virtual/powercap"
  126. ],
  127. "ReadonlyPaths": [
  128. "/proc/bus",
  129. "/proc/fs",
  130. "/proc/irq",
  131. "/proc/sys",
  132. "/proc/sysrq-trigger"
  133. ]
  134. },
  135. "GraphDriver": {
  136. "Data": {
  137. "LowerDir": "/var/lib/docker/overlay2/1807f8589086eb51f861c4938ddbd1da9395c48ef3b1bc40ded35195707c07db-init/diff:/var/lib/docker/overlay2/4272a408897873c3e991cc410cc9f3191dc2ebb5a8f940e386746a8b62e45b77/diff:/var/lib/docker/overlay2/aefe736cf7883ec152540cf245eebf8d1daee7ebd7752db0f2aed440db9c436e/diff:/var/lib/docker/overlay2/eab8218d1796d5eaa07da26ded1c78c01b0d7dfaf96654c7223f94fa022804ca/diff:/var/lib/docker/overlay2/6a1ae79728973f2f3dde69c44b8bf36c7e3e8dee18a67777f2c18298c27b72e3/diff:/var/lib/docker/overlay2/4284addc9df80d1ca1f05dddd850dd749c9cc55c34f28b0876d5eaacc2d576e5/diff:/var/lib/docker/overlay2/ed77212064855a9fee7e0403c15a23667de8c08fe7d59635f328c1b91e8e0af1/diff:/var/lib/docker/overlay2/1e0a0cebf48bf83030ebecda040939bc9eb11094883fa716bde5789cfc8d5ed1/diff:/var/lib/docker/overlay2/648a8998071f0296333f194e322e6785fb01b763e684543c6d665eb74965567b/diff:/var/lib/docker/overlay2/96aaa73c0076e21994ad88907d5f425ebf630fab7e091eb301073b4429c2f609/diff:/var/lib/docker/overlay2/6315239813db62569e9e729bbf20f7d6220df8a170fbd4fae2e1eba015e4f51d/diff:/var/lib/docker/overlay2/6951fbc42d9b579b84c403fdb31421d105aac328ad81e2e3e1d55a11556afcf7/diff",
  138. "MergedDir": "/var/lib/docker/overlay2/1807f8589086eb51f861c4938ddbd1da9395c48ef3b1bc40ded35195707c07db/merged",
  139. "UpperDir": "/var/lib/docker/overlay2/1807f8589086eb51f861c4938ddbd1da9395c48ef3b1bc40ded35195707c07db/diff",
  140. "WorkDir": "/var/lib/docker/overlay2/1807f8589086eb51f861c4938ddbd1da9395c48ef3b1bc40ded35195707c07db/work"
  141. },
  142. "Name": "overlay2"
  143. },
  144. "Mounts": [],
  145. "Config": {
  146. "Hostname": "e823da882acc",
  147. "Domainname": "",
  148. "User": "",
  149. "AttachStdin": false,
  150. "AttachStdout": false,
  151. "AttachStderr": false,
  152. "ExposedPorts": {
  153. "8080/tcp": {}
  154. },
  155. "Tty": false,
  156. "OpenStdin": false,
  157. "StdinOnce": false,
  158. "Env": [
  159. "PATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  160. "LANG=C.UTF-8",
  161. "JAVA_HOME=/docker-java-home/jre",
  162. "JAVA_VERSION=7u181",
  163. "JAVA_DEBIAN_VERSION=7u181-2.6.14-1~deb8u1",
  164. "CATALINA_HOME=/usr/local/tomcat",
  165. "TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib",
  166. "LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib",
  167. "OPENSSL_VERSION=1.1.0f-3+deb9u2",
  168. "GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 713DA88BE50911535FE716F5208B0AB1D63011C7 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23",
  169. "TOMCAT_MAJOR=8",
  170. "TOMCAT_VERSION=8.0.53",
  171. "TOMCAT_SHA512=cd8a4e48a629a2f2bb4ce6b101ebcce41da52b506064396ec1b2915c0b0d8d82123091242f2929a649bcd8b65ecf6cd1ab9c7d90ac0e261821097ab6fbe22df9",
  172. "TOMCAT_TGZ_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz \thttps://www-us.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz \thttps://www.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz \thttps://archive.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz",
  173. "TOMCAT_ASC_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz.asc \thttps://www-us.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz.asc \thttps://www.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz.asc \thttps://archive.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz.asc"
  174. ],
  175. "Cmd": [
  176. "catalina.sh",
  177. "run"
  178. ],
  179. "Image": "tomcat:8.0",
  180. "Volumes": null,
  181. "WorkingDir": "/usr/local/tomcat",
  182. "Entrypoint": null,
  183. "OnBuild": null,
  184. "Labels": {}
  185. },
  186. "NetworkSettings": {
  187. "Bridge": "",
  188. "SandboxID": "7c5c3740d5acbd7748c07d0203d0833f72ebb617c7b3d0e76a3e6d8a2510e062",
  189. "HairpinMode": false,
  190. "LinkLocalIPv6Address": "",
  191. "LinkLocalIPv6PrefixLen": 0,
  192. "Ports": {
  193. "8080/tcp": [
  194. {
  195. "HostIp": "0.0.0.0",
  196. "HostPort": "8082"
  197. },
  198. {
  199. "HostIp": "::",
  200. "HostPort": "8082"
  201. }
  202. ]
  203. },
  204. "SandboxKey": "/var/run/docker/netns/7c5c3740d5ac",
  205. "SecondaryIPAddresses": null,
  206. "SecondaryIPv6Addresses": null,
  207. "EndpointID": "2294463d89e7a91ee32cbd717403ceb9d1079fc23fca9cd251c003fa019bff0c",
  208. "Gateway": "172.17.0.1",
  209. "GlobalIPv6Address": "",
  210. "GlobalIPv6PrefixLen": 0,
  211. "IPAddress": "172.17.0.6",
  212. "IPPrefixLen": 16,
  213. "IPv6Gateway": "",
  214. "MacAddress": "02:42:ac:11:00:06",
  215. "Networks": {
  216. "bridge": {
  217. "IPAMConfig": null,
  218. "Links": null,
  219. "Aliases": null,
  220. "NetworkID": "3be1ce6eea6f4f139c964c6afa94dd46fa60576e291edbc56d730c3c977b018c",
  221. "EndpointID": "2294463d89e7a91ee32cbd717403ceb9d1079fc23fca9cd251c003fa019bff0c",
  222. "Gateway": "172.17.0.1",
  223. "IPAddress": "172.17.0.6",
  224. "IPPrefixLen": 16,
  225. "IPv6Gateway": "",
  226. "GlobalIPv6Address": "",
  227. "GlobalIPv6PrefixLen": 0,
  228. "MacAddress": "02:42:ac:11:00:06",
  229. "DriverOpts": null
  230. }
  231. }
  232. }
  233. }
  234. ]

数据卷

作用&使用场景&注意事项

a)主要作用:

用来实现容器中数据和宿主机中数据进行映射的(这里可以类比 Vue 中的双向绑定,修改任意一方,另一方都会跟着修改)

b)使用场景:

  1. 易修改:即使我们不进入容器的内部,也可以通过修改宿主机文件系统的 conf 文件,来修改容器中的 conf 文件;
  2. 数据可复用:当创建了新的容器并且需要复用之前的 conf 文件时,可以直接再创建一个数据卷或者修改之前数据卷对容器目录的指向即可,来进行关联,这样就可以将之前的配置映射到新容器的配置中;
  3. 升级维护简单:如果来了新的容器,需要删除旧容器,也不用担心数据会被删除掉,因为数据在宿主机上还保存了一份。

c)注意事项:数据卷只能在容器首次启动时设置.

容器启动时指定数据卷

容器首次启动时指定 -v 参数

a)使用绝对路径设置数据卷

docker run -v 宿主机绝对路径:容器内绝对路径:ro .....(其他设置)

ro:表示 ready only,也就是只读的意思,如果在设置数据卷时指定 ro,代表日后从容器内访问该路径时是只读的.

Ps:这种方式会将容器该路径下的原始内容全部清空,始终以宿主机路径为主.

b)使用别名方式设置数据卷

docker run -v aa:/usr/local/tomcat/webapps ......(其他配置)

aa:

  1. 别名就代表一个 docker 自身维护的数据卷
  2. aa 代表 docker 数据卷中别名. (如果存在就直接使用,不存在就创建)
  3. 使用别名方式保留容器路径原始内容,前提是别名对应路径不能存在内容.

Ps:docker 根据别名创建目录默认在 /var/lib/docker/volumes/ 中.

通过 find 命令也可以查找到该路径

查看 docker 所有数据卷

通过 docker volume ls 即可查看

如下

  1. [root@VM-8-17-centos ~]# docker volume ls
  2. DRIVER VOLUME NAME
  3. local 1fa61b3ede8d2275b627925fb6c9270d0ce90cf802297a442cba63cac2bd8318
  4. local 5ea35e4af2de3e83feb7a290ad28cbb1efcea43f7fc239a24083a33dd358ee7d
  5. local 6d9ce8b53920cc2e57b15c6828e64055edffda6ecc8c70d51e3dbe720ae7525c
  6. local 6e7cdbf67ca74fd270fa99c64ac5e7a0608d419c68b35f1159918365f430ada4
  7. local 9b4f364313d3b30f69e9ef0cd33f023939ddf7b3477fe8d59957be15bf35116a
  8. local 25c87a7dccf3b2d8a72592c928e802edfec4243ec276442fa4d7045c65a95d7a
  9. local 37b3dbb78b118db577912d599c9b18b5f3de38519a74fd6f14b7a90a7e4a6ed7
  10. local 53b0ba745b895e113d38b7adea5775122e7468722d3c7050b8209166ef730608
  11. local 70b2e875c2ad077202f8e9d3503cc4e2ad48b119b5150ef47cfa98e6b713c1b2
  12. local 91e437d40a873ed676500c8c574c3bcfd7081ce3a800f0d15f9c89ee2c507ba4
  13. local 126a034b14738aa704b485b57d6146af54aa8c8778fc9645edf94b9cd979b651
  14. local 322c7e1b4e8c21fef177655444afe1a87e478a175502d2c5fa2223c22bd7c212
  15. local 3639cf3d08c4e838c675b026e572832b6cd2c7d75cb6052635374a2266a09b18
  16. local 7810b502a8c2334df68de79a88b4fb096c4c77d88380346022f26a83e830513f
  17. local 9362e057c7d64db8887a1da36089b053bebdd473a1b4213f7b3afa45fd1c5070
  18. local 41589e0d737e2b6794904e4630a621618c99e86d171230b7718a2c505f38fd1c
  19. local 176090d6b2c68af41962863317d97e912be5ca4b8917158db49ad549ad6f4561
  20. local 380554b41086565ff8e677f7de48e7fd4565bd28b4c193b4e859c20bef16e5c7
  21. local 651871ea674decee5310c1f80da30136df924cf46e377b595c8e2af3a280b162
  22. local 46888212f86c0ad196e798d3d9d77ca1c5b91ce55b2055dca13e1a8d07e7f7b7
  23. local 048558136abb49fbb611aecacb9080ad7cb931f9b4ac1e29b350a81572f507a8
  24. local a6e06baf59e0a30eb6a09cab7cebffc0500ebcfdad86a728fd4d68f98cce33fb
  25. local a81e39eb18b192822d177c48734c2d3cd7b52c1b1e9d19864438a13d83ec2288
  26. local aca12e56a6ffe71e33e46fd12c93aa0fc12abdc90a9f3778883d68a4b16e7633
  27. local c5c137ece3e1f8e210f75cc3141a2422a65de832111e3505f5ad0189f265088b
  28. local d50c81b40c2cd31f267e894048aa907b68e336cc0d9b74060112ffc30e67b4d0
  29. local e21898073e75de299a86adef3a8b2d9ed577a36aa3c5771d8f8d33de4cbb8ba4
  30. local ebd4d620e209c9062a5e6f9058d574e0a74e4554b1af108f7ffa1dc4d9f6ecb8
  31. local ecc0c22ac9231a32c7361cc6e2c81b9239a34e86e2c14fc60b01a5dea778658e
  32. local f2e477434d0dfe055b3cb1e8b7f998ea243d4001c7e10cfa0b81603673b51da3
  33. local f49c6495220342f9d587f1ac7653ddca92a7c43737dea8178cc8a3165514d974

创建一个别名数据卷

docker volume create 数据卷别名

例如创建数据卷别名为 aa,然后查看列表

  1. [root@VM-8-17-centos ~]# docker volume create aaa
  2. aaa
  3. [root@VM-8-17-centos ~]# docker volume ls
  4. DRIVER VOLUME NAME
  5. local 1fa61b3ede8d2275b627925fb6c9270d0ce90cf802297a442cba63cac2bd8318
  6. local 5ea35e4af2de3e83feb7a290ad28cbb1efcea43f7fc239a24083a33dd358ee7d
  7. local 6d9ce8b53920cc2e57b15c6828e64055edffda6ecc8c70d51e3dbe720ae7525c
  8. local 6e7cdbf67ca74fd270fa99c64ac5e7a0608d419c68b35f1159918365f430ada4
  9. local 9b4f364313d3b30f69e9ef0cd33f023939ddf7b3477fe8d59957be15bf35116a
  10. local 25c87a7dccf3b2d8a72592c928e802edfec4243ec276442fa4d7045c65a95d7a
  11. local 37b3dbb78b118db577912d599c9b18b5f3de38519a74fd6f14b7a90a7e4a6ed7
  12. local 53b0ba745b895e113d38b7adea5775122e7468722d3c7050b8209166ef730608
  13. local 70b2e875c2ad077202f8e9d3503cc4e2ad48b119b5150ef47cfa98e6b713c1b2
  14. local 91e437d40a873ed676500c8c574c3bcfd7081ce3a800f0d15f9c89ee2c507ba4
  15. local 126a034b14738aa704b485b57d6146af54aa8c8778fc9645edf94b9cd979b651
  16. local 322c7e1b4e8c21fef177655444afe1a87e478a175502d2c5fa2223c22bd7c212
  17. local 3639cf3d08c4e838c675b026e572832b6cd2c7d75cb6052635374a2266a09b18
  18. local 7810b502a8c2334df68de79a88b4fb096c4c77d88380346022f26a83e830513f
  19. local 9362e057c7d64db8887a1da36089b053bebdd473a1b4213f7b3afa45fd1c5070
  20. local 41589e0d737e2b6794904e4630a621618c99e86d171230b7718a2c505f38fd1c
  21. local 176090d6b2c68af41962863317d97e912be5ca4b8917158db49ad549ad6f4561
  22. local 380554b41086565ff8e677f7de48e7fd4565bd28b4c193b4e859c20bef16e5c7
  23. local 651871ea674decee5310c1f80da30136df924cf46e377b595c8e2af3a280b162
  24. local 46888212f86c0ad196e798d3d9d77ca1c5b91ce55b2055dca13e1a8d07e7f7b7
  25. local 048558136abb49fbb611aecacb9080ad7cb931f9b4ac1e29b350a81572f507a8
  26. local a6e06baf59e0a30eb6a09cab7cebffc0500ebcfdad86a728fd4d68f98cce33fb
  27. local a81e39eb18b192822d177c48734c2d3cd7b52c1b1e9d19864438a13d83ec2288
  28. local aaa
  29. local aca12e56a6ffe71e33e46fd12c93aa0fc12abdc90a9f3778883d68a4b16e7633
  30. local c5c137ece3e1f8e210f75cc3141a2422a65de832111e3505f5ad0189f265088b
  31. local d50c81b40c2cd31f267e894048aa907b68e336cc0d9b74060112ffc30e67b4d0
  32. local e21898073e75de299a86adef3a8b2d9ed577a36aa3c5771d8f8d33de4cbb8ba4
  33. local ebd4d620e209c9062a5e6f9058d574e0a74e4554b1af108f7ffa1dc4d9f6ecb8
  34. local ecc0c22ac9231a32c7361cc6e2c81b9239a34e86e2c14fc60b01a5dea778658e
  35. local f2e477434d0dfe055b3cb1e8b7f998ea243d4001c7e10cfa0b81603673b51da3
  36. local f49c6495220342f9d587f1ac7653ddca92a7c43737dea8178cc8a3165514d974

查看数据卷详细内容

数据卷详细信息中就包含了数据卷的在宿主机的绝对路径

docker volume inspect 数据卷别名

例如查看别名 aaa 的详细信息 

  1. [root@VM-8-17-centos ~]# docker volume inspect aaa
  2. [
  3. {
  4. "CreatedAt": "2023-12-27T15:54:07+08:00",
  5. "Driver": "local",
  6. "Labels": null,
  7. "Mountpoint": "/var/lib/docker/volumes/aaa/_data",
  8. "Name": "aaa",
  9. "Options": null,
  10. "Scope": "local"
  11. }
  12. ]

Ps:Mountpoint 就是在宿主机的绝对路径

删除一个数据卷

docker volume rm 数据卷别名

 例如删除别名为 aaa 的数据卷

  1. [root@VM-8-17-centos ~]# docker volume rm aaa
  2. aaa

容器打包镜像

背景

a)回顾三个核心概念

仓库 repository:docker 官方维护的一个仓库,用来集中存储镜像.

镜像 image:一个镜像代表一个软件服务,特点就是 "只读".

容器 container:镜像每运行一次形成一个容器,运行的容器代表一个正在运行的软件服务.

b)为什么要将容器打包成一个新的镜像?

容器可读可写,那么基于这个特性就可以对容器进行自己的深度定制.

将容器打包成一个新的镜像,日后运行的这个容器就存在原始定制的特性.

c)原理图

将容器打包成一个新的镜像

docker commit -m "对镜像的描述" -a "作者名称" 容器id | name  镜像名:版本

如下案例

  1. [root@VM-8-17-centos cyk]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. e823da882acc tomcat:8.0 "catalina.sh run" About an hour ago Up About an hour 0.0.0.0:8082->8080/tcp, :::8082->8080/tcp tomcat_1
  4. 07a1f69b4c4c tomcat:8.0 "catalina.sh run" About an hour ago Exited (137) About an hour ago objective_taussig
  5. abc6284fe34d redis:5.0.9 "docker-entrypoint.s…" 5 weeks ago Up 5 weeks 0.0.0.0:6380->6379/tcp, :::6380->6379/tcp redis
  6. d442ff7829df nacos/nacos-server:1.4.2 "bin/docker-startup.…" 6 weeks ago Up 5 weeks 0.0.0.0:8848->8848/tcp, :::8848->8848/tcp nacos
  7. fc16ae62dc0f mysql:5.7 "docker-entrypoint.s…" 7 weeks ago Up 7 weeks 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp mysql
  8. a7dbf979b1e6 rabbitmq:3.8-management "docker-entrypoint.s…" 7 weeks ago Up 7 weeks 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp mq
  9. [root@VM-8-17-centos cyk]#
  10. [root@VM-8-17-centos cyk]#
  11. [root@VM-8-17-centos cyk]#
  12. [root@VM-8-17-centos cyk]# docker commit -m "new test tomcat" -a "cyk" e8 tomcat_cyk:8.1
  13. sha256:9b9add65a1f1b2a9331bac5f0c047af6a921e0850b247638256843a770b4ed6d
  14. [root@VM-8-17-centos cyk]# docker images
  15. REPOSITORY TAG IMAGE ID CREATED SIZE
  16. tomcat_cyk 8.1 9b9add65a1f1 10 seconds ago 356MB
  17. redis 5 c5da061a611a 2 years ago 110MB
  18. mysql 5.7 c20987f18b13 2 years ago 448MB
  19. rabbitmq 3.8-management 699038cb2b96 2 years ago 250MB
  20. nacos/nacos-server 1.4.2 938169b118c7 2 years ago 956MB
  21. redis 5.0.9 987b553c835f 3 years ago 98.3MB
  22. bladex/sentinel-dashboard 1.8.0 61c10eaefbcf 3 years ago 147MB
  23. nacos/nacos-server 1.2.0 763941e566bb 3 years ago 732MB
  24. bladex/sentinel-dashboard 1.7.1 d12e18546bfd 3 years ago 148MB
  25. tomcat 8.0 ef6a7c98d192 5 years ago 356MB

镜像的备份和恢复

a)备份镜像: docker save 镜像名:tag -o (镜像名-tag).tar

b)恢复镜像:docker load -i xxx.tar

例如 docker load -i tomcat-8.0.tar 

c)如果是从官网下载的 tar 包需要通过 docker import 命令加载镜像,使用如下:

docker import tar文件 自定义镜像名:自定义版本号

例如要将官网下载的 Sentinel-1.8.3.tar.gz 加载成镜像:

  1. [root@VM-8-17-centos ~]# docker load -i Sentinel-1.8.3.tar.gz
  2. open /var/lib/docker/tmp/docker-import-3671647515/Sentinel-1.8.3/json: no such file or directory
  3. [root@VM-8-17-centos ~]#
  4. [root@VM-8-17-centos ~]#
  5. [root@VM-8-17-centos ~]# docker import Sentinel-1.8.3.tar.gz sentinel:1.8.3
  6. sha256:e313da793ccfd9a37e902569587f7944fac2676addceef452d430019b310c39a
  7. [root@VM-8-17-centos ~]#
  8. [root@VM-8-17-centos ~]#
  9. [root@VM-8-17-centos ~]# docker images
  10. REPOSITORY TAG IMAGE ID CREATED SIZE
  11. sentinel 1.8.3 e313da793ccf 8 seconds ago 7.75MB

此时直接通过原先的 docker run 命令可能会报错:docker: Error response from daemon: No command specified.

实际上这里 import 导出的并没有带 CMD 命令,因此需要在运行的时候手动指定,并且每个镜像的命令都不太一样,具体可以去官网看.

Ps:但还是不建议这种操作,建议还是去 docker hub 上去找镜像

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/743714
推荐阅读
相关标签
  

闽ICP备14008679号