开悟篇Docker从零到实战一篇文章搞定
目录
一:概述
1:why docker
2:Docker是什么?
3:Docker核心概念
二:初步体验
1:Docker核心架构图
2:准备工作
1:服务器
2:Docker安装
3:阿里云docker安装
4:镜像加速
三:Docker命令和帮助文档的使用
1:帮助文档
2:镜像的基本操作
1:查看本地下载的所有镜像
2:搜索镜像
3:下载镜像
4:删除镜像
5:查看镜像信息
6:组合使用删除镜像
3:容器基本操作
1:运行容器
1:直接运行
2:映射宿主机和容器端口
3:不以前台shell终端的方式运行
4:启动容器指定名称
2:导入一个镜像
3:查看容器信息
1:展示运行的docker容器
2:列出所有容器
3:列出所有退出状态的容器
4:停止|关闭|重启|立即关闭容器
5:删除容器
6:查看容器运行日志
7:查看容器内的进程
8:通过宿主机与容器内部进行交互
9:退出容器
10:文件交互
11:查看容器内进程
12:查看容器内细节命令
13:数据卷指令
14:将容器打成一个新的镜像
四:镜像原理
五:运行MySQL容器
1:下载MySQL镜像
2:启动镜像
3:进入MYSQL容器的Bash
4:创建表
5:验证数据卷 完成了数据同步
6:docker运行MySQL的容器数据备份
六:运行Redis
七:运行ES
八:高级网络
1:Docker容器之间通讯的必要性。
2:同一物理机上基于Docker引擎进行通讯的基本原理
3:总结
4:自定义网桥实现一组容器的通讯
1:创建自定义网桥
2:运行多个容器在指定网络中
九:高级数据卷
1:数据卷是怎么回事
2:数据卷基本原理
1:查看docker维护的数据卷
2:查看数据卷详细内容
3:删除一个数据卷
4:直接创建一个数据卷
十:Dockerfile
1:Dockerfile
2:Dockerfile构建流程
3:Dockerfile指令
1:FROM
2:RUN
3:EXPOSE
4:WORKDIR
5:ADD
6:COPY
7:ENV
8:VOLUMN
9:CMD
10:ENTRYPOINT
十一:Dockerfile自定义项目镜像
1:创建SpringBoot系项目
2:开发简单功能,链接数据库
3:测试项目代码
4:打包项目代码jar
5:编写Dockerfile生成镜像
6:运行Docker镜像
7:运行一个MySQL容器
8:搭建共享网络
9:最终结果展示
十二:Docker Compose
1:docker compose引入
2:简介
3:如何使用
4:Docker Compose安装
5:docker-compose第一个案例
1:创建一个空项目
2:在ems下创建一个模板文件
3:如何启动docker-compose
6:docker-compose模板指令
1:build指令
2:覆盖命令command
3:container_name
4:depends_on
5:environment
6:evn-file指定文件
7:healthcheck
8:image
9:networks
10:volumes
11:restart
7:docker-compose常用命令
1:up
2:down
3:docker exec
4:ps
5:restart
6:rm
7:top
8:unpause/pause
9:logs
十三:Docker可视化工具
1:简介
2:安装并启用
3:安装结果
一:概述
1:why docker
屏蔽环境差异。解决应用部署的不方便等。降低微服务部署时间。聚焦核心问题。
实际公司中打包基本上都不是直接用docker,而是使用k8s。不了解docker更不容易了解k8s。
2:Docker是什么?
VM虚拟机虚拟出来一套计算机,有虚拟的硬件设备和操作系统。Docker是一个应用容器引擎。一个容器可以理解为一个轻量级的虚拟机(只保留了操作系统必要的部分)
3:Docker核心概念
docker引擎就像是Java的虚拟机,必须有这个东西,才能运行docker。
镜像 image
一个镜像代表一个软件。相当于一个容器的模板
可以类比:我们安装盗版操作系统镜像 镜像可以创建容器。MySQL镜像,Redis镜像。MQ镜像。
特点:只读,不能修改
容器:一个轻量级的虚拟机。一个镜像运行一次就是一个容器。
镜像仓库:存放镜像的仓库:官方的镜像仓库:https://hub.docker.com/
本地仓库:用于存储在使用docker过程中相关镜像。都是从互联网仓库下载的。
二:初步体验
gitlab是一个远程代码仓库。公司一般有自己的私有的gitlab。
1:Docker核心架构图
阿里云镜像仓库:直接把国外的远程仓库,同步了一份。
2:准备工作
1:服务器
首先需要准备一个linux环境,我们搞一个vm的虚拟机。或者购买云服务器。当前使用centos7并且要求4GB以上内存。
2:Docker安装
官网的安装步骤
卸载旧的docker
sudo dnf remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
安装yum工具
sudo yum install -y yum-utils
设置仓库连接
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker引擎
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动docker引擎
将docker加入开机自启动的服务
sudo systemctl enable --now docker启动dockersudo systemctl start docker
验证是否安装成功
sudo docker run hello-world
docker容器引擎,管理容器的,容器是镜像创建的。他会去镜像仓库拉去helloworld的镜像。容器会打印helloworld。
停止docker
sudo systemctl stop docker
查看docker状态
systemctl status docker
推荐将当前用户加入docker组。
Linux当中有一个用户组的概念。root用户默认在root组,当前用户最好属于docker组,所以,我们先创建一个组,在将当前用户加入docker组。
sudo groupadd docker
usermod -aG docker $User
docker run hello-world
3:阿里云docker安装
阿里云提供了一个安装脚本,可以适配多种环境的安装。
通用方式安装:根据Linux发行版本无关。
获取该脚本:crul -fsSl get.docker.com -o get-docker.sh
执行脚本通过脚本下载,设置阿里云镜像下载:sudo sh get-docker.sh --mirror Aliyun
4:镜像加速
阿里为每一个开发者都提供了唯一的镜像加速:
登录阿里云--控制台--检索镜像加速服务--阿里云提供的镜像加速。
默认镜像仓库是在国外,我们需要配置镜像加速。现在配置阿里云的镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.xuanyuan.me"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
检测配置是否成功
[cuillei@bogon ~]$ docker info
Client: Docker Engine - CommunityVersion: 28.3.3Context: defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version: v0.26.1Path: /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version: v2.39.1Path: /usr/libexec/docker/cli-plugins/docker-composeServer:Containers: 2Running: 0Paused: 0Stopped: 2Images: 3Server Version: 28.3.3Storage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueUsing metacopy: falseNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: systemdCgroup Version: 2Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local splunk syslogCDI spec directories:/etc/cdi/var/run/cdiSwarm: inactiveRuntimes: io.containerd.runc.v2 runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 05044ec0a9a75232cad458027ca83437aae3f4darunc version: v1.2.5-0-g59923efinit version: de40ad0Security Options:seccompProfile: builtincgroupnsKernel Version: 5.14.0-601.el9.x86_64Operating System: CentOS Stream 9OSType: linuxArchitecture: x86_64CPUs: 4Total Memory: 7.47GiBName: bogonID: 24d29ae4-9fbf-4edb-ac49-7126990a6c08Docker Root Dir: /var/lib/dockerDebug Mode: falseExperimental: falseInsecure Registries:::1/128127.0.0.0/8Registry Mirrors:https://lzsuuf9m.mirror.aliyuncs.com/Live Restore Enabled: false
客户端引擎提供命令,服务端引擎运行服务。
QQ也有自己的客户端和服务端。
到这Docker已经安装成功并且成功启用了。
三:Docker命令和帮助文档的使用
1:帮助文档
docker --help 这个是大致的命令(大而全)
docker ps --help 查看ps命令的详细用法
或者访问官网地址查看文档
https://docs.docker.com/engine.reference/commandline/images/
2:镜像的基本操作
镜像:image
docker version查看客户端引擎和server端的版本的信息。
docker info 查看docker详细信息。
docker --help 查看帮助信息
1:查看本地下载的所有镜像
docker iamge ls
或者
docker images
2:搜索镜像
直接访问镜像地址,通过页面去看,一般都这么使用。
docker search mysql
3:下载镜像
[非必写]如果不写就从官网下载,如果不写标签就拿最新的标签。
dcoker pull [镜像仓库地址/] 镜像名[:标签]
docker pull 镜像名 会自动拉去最新镜像
docker pull 镜像名:latest
举例说明
[root@bogon ~]# docker pull alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/mysql_optimized:20240221-8.0.32-2.3.0
20240221-8.0.32-2.3.0: Pulling from alinux3/mysql_optimized
Digest: sha256:47244750f28e6caf9fc91df2a945d75fa4b6f2be669ece643928591e833640b7
Status: Image is up to date for alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/mysql_optimized:20240221-8.0.32-2.3.0
alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/mysql_optimized:20240221-8.0.32-2.3.0
4:删除镜像
docker image rm 镜像名:tag
docker image rm 镜像IDrm的必须得是没有运行过的镜像。docker image rm -f 镜像名:tag
docker image rm -f 进项ID强制删除,会把镜像给删除掉。
5:查看镜像信息
查看所有下载的镜像。
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/spark latest b774fd1e2551 17 months ago 617MB
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/spark 3 0896f5fbc416 17 months ago 617MB
alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/mysql_optimized 20240221-8.0.32-2.3.0 07cddd322c54 18 months ago 899MB
repository:仓库地址
tag:标签
image Id:镜像唯一标
查看镜像的id
[root@bogon ~]# docker images --help
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]List imagesAliases:docker image ls, docker image list, docker imagesOptions:-a, --all Show all images (default hides intermediate images)--digests Show digests-f, --filter filter Filter output based on conditions provided--format string Format output using a custom template:'table': Print output in table format with column headers (default)'table TEMPLATE': Print output in table format using the given Go template'json': Print in JSON format'TEMPLATE': Print output using the given Go template.Refer to https://docs.docker.com/go/formatting/ for more information about formatting output with templates--no-trunc Don't truncate output-q, --quiet Only show image IDs--tree List multi-platform images as a tree (EXPERIMENTAL)
[root@bogon ~]# docker images -q
b774fd1e2551
0896f5fbc416
07cddd322c54
[root@bogon ~]#
查看所有镜像的镜像id
[root@bogon ~]# docker images -a -q
b774fd1e2551
0896f5fbc416
07cddd322c54
[root@bogon ~]# docker images -aq
b774fd1e2551
0896f5fbc416
07cddd322c54
[root@bogon ~]#
列出所有镜像名字为mysql的镜像id
docker images --filter=reference='busy*:*libc'
docker images --filter=reference=mysql
6:组合使用删除镜像
[root@localhost /]# docker image rm -f $(docker image ls redis -q)
Untagged: redis:latest
Untagged: redis@sha256:b0efb06f6b4d8c1e2fd1b7c1e89e178d787b432b7b09286b4e7ea3dcdbac777a
Deleted: sha256:2f21f6e6fe03146ad470d4d98839e09d0fe91ed706320d970f9e749f5a3067bc
Deleted: sha256:75ef83067bb216d924be347737cdb1eb070e2260e98e8b5e3525eeb995b4c884
Deleted: sha256:180ef53c584c69b4dfb83b05d42c686c1ed86f108eb116f67ad8d7571a123f18
Deleted: sha256:b7610a1994c4493f5c5ac846b6d6a837467bcb733679c1e7214bcd30eee3752a
Deleted: sha256:f0603094ff40fa7b5317b275dd3e5504042976d5b603f10034370351729859c7
Deleted: sha256:fcd63cd28f76d69c90b16fc090ed4a9426593d83bba8952841d36a992f473a45
Deleted: sha256:15e9161d29cc235e8f8693ddeafc94d9b03ed88ca420e9e65b632c01bf2f8cef
[root@localhost /]#
3:容器基本操作
容器的相关操作。
1:运行容器
1:直接运行
docker run 镜像名:tag
docker run 镜像ID
docker run 仓库地址/镜像名:tag
[root@localhost /]# docker run --ulimit nofile=65536:65536 -m 4g tomcat:9.0-jre11
Unable to find image 'tomcat:9.0-jre11' locally
9.0-jre11: Pulling from library/tomcat
32f112e3802c: Pull complete
ebe18f308a67: Pull complete
37221a9ff962: Pull complete
717c0d286ea2: Pull complete
3284fba73e3e: Pull complete
be4d776a2aa1: Pull complete
4f4fb700ef54: Pull complete
c178adfbd8af: Pull complete
0a753fd26410: Pull complete
Digest: sha256:9fd04e8a3a44492a0637dae2f437e6cfe532dd162e9f26a05411cf03cc1990bf
Status: Downloaded newer image for tomcat:9.0-jre11
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
12-Aug-2025 13:31:45.447 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/9.0.108
12-Aug-2025 13:31:45.450 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Jul 31 2025 18:19:48 UTC
12-Aug-2025 13:31:45.450 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.108.0
12-Aug-2025 13:31:45.450 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
12-Aug-2025 13:31:45.450 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 5.14.0-601.el9.x86_64
12-Aug-2025 13:31:45.450 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
12-Aug-2025 13:31:45.451 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /opt/java/openjdk
12-Aug-2025 13:31:45.451 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 11.0.28+6
12-Aug-2025 13:31:45.451 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Eclipse Adoptium
12-Aug-2025 13:31:45.451 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat
12-Aug-2025 13:31:45.451 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat
12-Aug-2025 13:31:45.459 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
12-Aug-2025 13:31:45.459 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
12-Aug-2025 13:31:45.459 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
12-Aug-2025 13:31:45.460 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
12-Aug-2025 13:31:45.460 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
12-Aug-2025 13:31:45.460 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
12-Aug-2025 13:31:45.460 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
12-Aug-2025 13:31:45.460 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
12-Aug-2025 13:31:45.460 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
12-Aug-2025 13:31:45.460 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
12-Aug-2025 13:31:45.460 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
12-Aug-2025 13:31:45.460 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dsun.io.useCanonCaches=false
12-Aug-2025 13:31:45.460 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
12-Aug-2025 13:31:45.461 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
12-Aug-2025 13:31:45.461 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
12-Aug-2025 13:31:45.461 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
12-Aug-2025 13:31:45.461 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
12-Aug-2025 13:31:45.469 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.3.1] using APR version [1.7.2].
12-Aug-2025 13:31:45.469 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
12-Aug-2025 13:31:45.469 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
12-Aug-2025 13:31:45.472 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.13 30 Jan 2024]
12-Aug-2025 13:31:45.653 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
12-Aug-2025 13:31:45.669 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [366] milliseconds
12-Aug-2025 13:31:45.707 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
12-Aug-2025 13:31:45.707 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.108]
12-Aug-2025 13:31:45.718 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
12-Aug-2025 13:31:45.731 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [61] milliseconds
容器ID,基于那个image创建,容器内执行程序的命令,容器创建时间,当前状态(up,dwon),容器内服务监听的端口,容器的名字。
这样运行一个容器没有任何意义,因为容器与当前机器没有进行交互。容器与容器之间也是隔离的。
我们想在希望8080可以直接访问容器的8080接口,这个时候就需要映射宿主机端口和容器端口,这样访问宿主机端口的时候,就会直接将宿主机端口内容转向容器端口。
docker run -p 8080:8080 tomcat:9.0jre11启动 将系统的8080端口:专项 容器内服务监听的8080端口再起一个窗口
docker run -p 8081:8080 tomcat:9.0jre11
2:映射宿主机和容器端口
[root@localhost ~]# docker run -p 8080:8080 tomcat:9.0-jre11
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
12-Aug-2025 13:58:54.745 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/9.0.108
12-Aug-2025 13:58:54.747 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Jul 31 2025 18:19:48 UTC
12-Aug-2025 13:58:54.747 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.108.0
12-Aug-2025 13:58:54.747 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
12-Aug-2025 13:58:54.747 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 5.14.0-601.el9.x86_64
12-Aug-2025 13:58:54.747 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
12-Aug-2025 13:58:54.747 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /opt/java/openjdk
12-Aug-2025 13:58:54.747 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 11.0.28+6
12-Aug-2025 13:58:54.748 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Eclipse Adoptium
12-Aug-2025 13:58:54.748 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat
12-Aug-2025 13:58:54.748 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat
12-Aug-2025 13:58:54.763 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
12-Aug-2025 13:58:54.763 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
12-Aug-2025 13:58:54.763 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
12-Aug-2025 13:58:54.763 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dsun.io.useCanonCaches=false
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
12-Aug-2025 13:58:54.764 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
12-Aug-2025 13:58:54.769 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.3.1] using APR version [1.7.2].
12-Aug-2025 13:58:54.769 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
12-Aug-2025 13:58:54.769 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
12-Aug-2025 13:58:54.773 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.13 30 Jan 2024]
12-Aug-2025 13:58:54.966 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
12-Aug-2025 13:58:54.983 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [402] milliseconds
12-Aug-2025 13:58:55.035 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
12-Aug-2025 13:58:55.036 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.108]
12-Aug-2025 13:58:55.048 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
12-Aug-2025 13:58:55.073 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [89] milliseconds
测试效果
3:不以前台shell终端的方式运行
上边的例子是以前段shell终端的例子运行,现在我们不这样运行了。
[root@localhost /]# docker run -p 8080:8080 -d tomcat:9.0-jre11
644a2e27f2fad966e8659f7c0dcbd2c1d37ca573c7d5029571d429844baf0f36
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
644a2e27f2fa tomcat:9.0-jre11 "catalina.sh run" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp sleepy_lichterman## -d就表示后台运行
## 返回一个容器ID
4:启动容器指定名称
docker run -p 8080:8080 -p 8081:8081 -d --name tomcat01 tomat:9.0-jre11## MQ往往有两个端口,需要映射两个外部端口。[root@localhost /]# docker run -p 8083:8080 -d --name tomcat01 tomcat:9.0-jre11
7508c78a5f6dbe46e06e70051eafd32f8d8e0a8c09239383039c437b42dff757
[root@localhost /]#
[root@localhost /]#
[root@localhost /]#
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7508c78a5f6d tomcat:9.0-jre11 "catalina.sh run" 23 seconds ago Up 22 seconds 0.0.0.0:8083->8080/tcp, [::]:8083->8080/tcp tomcat01
644a2e27f2fa tomcat:9.0-jre11 "catalina.sh run" 6 minutes ago Up 6 minutes 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp sleepy_lichterman
[root@localhost /]#
2:导入一个镜像
docker load -i 镜像名
3:查看容器信息
1:展示运行的docker容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb325c0e80f1 tomcat:9.0-jre11 "catalina.sh run" 3 minutes ago Up 3 minutes 0.0.0.0:8081->8080/tcp, [::]:8081->8080/tcp focused_shaw
b54865dcfaf9 tomcat:9.0-jre11 "catalina.sh run" 7 minutes ago Up 7 minutes 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp gracious_wiles
dd969070533f tomcat:9.0-jre11 "catalina.sh run" 39 minutes ago Up 39 minutes 8080/tcp hopeful_curran
[root@localhost ~]#
重点关注下ports 0.0.0.0表示任意Ip可以访问(默认开启所有远程权限),第三个代表谁也访问不了。
下图:说明说明没有容器在进行运行。
2:列出所有容器
无论是否在运行
docker ps -a
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7508c78a5f6d tomcat:9.0-jre11 "catalina.sh run" 23 seconds ago Up 22 seconds 0.0.0.0:8083->8080/tcp, [::]:8083->8080/tcp tomcat01
644a2e27f2fa tomcat:9.0-jre11 "catalina.sh run" 6 minutes ago Up 6 minutes 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp sleepy_lichterman
[root@localhost /]#
[root@localhost /]#
[root@localhost /]#
[root@localhost /]#
[root@localhost /]#
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7508c78a5f6d tomcat:9.0-jre11 "catalina.sh run" 2 minutes ago Up 2 minutes 0.0.0.0:8083->8080/tcp, [::]:8083->8080/tcp tomcat01
644a2e27f2fa tomcat:9.0-jre11 "catalina.sh run" 8 minutes ago Up 8 minutes 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp sleepy_lichterman
cb325c0e80f1 tomcat:9.0-jre11 "catalina.sh run" 16 minutes ago Exited (129) 8 minutes ago focused_shaw
b54865dcfaf9 tomcat:9.0-jre11 "catalina.sh run" 19 minutes ago Exited (129) 8 minutes ago gracious_wiles
323bcddd3a0e tomcat:9.0-jre11 "catalina.sh run" 24 minutes ago Exited (130) 23 minutes ago nervous_rhodes
dd969070533f tomcat:9.0-jre11 "catalina.sh run" 51 minutes ago Exited (130) 8 minutes ago hopeful_curran
9e705b288eae tomcat:8.0-jre8 "catalina.sh run" 52 minutes ago Exited (139) 52 minutes ago wonderful_bohr
47779f64faf7 tomcat:8.0-jre8 "catalina.sh run" 53 minutes ago Exited (139) 53 minutes ago laughing_babbage
dcb79690494e tomcat:8.0-jre8 "catalina.sh run" 53 minutes ago Exited (139) 53 minutes ago dazzling_saha
36e122433fa8 tomcat:8.0-jre8 "catalina.sh run" 54 minutes ago Exited (139) 54 minutes ago intelligent_murdock
a22062e617ea tomcat:8.0-jre8 "catalina.sh run" 58 minutes ago Exited (139) 58 minutes ago suspicious_goldberg
9aac67eb0ee0 74cc54e27dc4 "/hello" 22 hours ago Exited (0) 22 hours ago wonderful_lamarr
[root@localhost /]#
3:列出所有退出状态的容器
docker ps -f status=exited
列出所有退出状态的容器的ID
docker ps -f status=exited -q
容器继续运行的条件:docker当中容器继续能运行的条件,docker必须得有一个前台进行,如果没有前台进程。容器被认为空闲, 就会退出。
helloworld这个容器执行完毕之后,就完事了。这种的没有前台进程,后续就不在运行了。
4:停止|关闭|重启|立即关闭容器
docker start 容器名称|ID
docker stop 容器名称|ID
docker restart 容器名称|ID
docker kill 容器名称|ID[root@localhost /]# docker start dd969070533f
dd969070533f
[root@localhost /]# docker restart dd969070533f
dd969070533f
[root@localhost /]# docker stop dd969070533f
dd969070533f
[root@localhost /]# docker start dd969070533f
dd969070533f
[root@localhost /]# docker kill dd969070533f
dd969070533f
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7508c78a5f6d tomcat:9.0-jre11 "catalina.sh run" 9 minutes ago Up 9 minutes 0.0.0.0:8083->8080/tcp, [::]:8083->8080/tcp tomcat01
644a2e27f2fa tomcat:9.0-jre11 "catalina.sh run" 14 minutes ago Up 14 minutes 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp sleepy_lichterman
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7508c78a5f6d tomcat:9.0-jre11 "catalina.sh run" 9 minutes ago Up 9 minutes 0.0.0.0:8083->8080/tcp, [::]:8083->8080/tcp tomcat01
644a2e27f2fa tomcat:9.0-jre11 "catalina.sh run" 14 minutes ago Up 14 minutes 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp sleepy_lichterman
cb325c0e80f1 tomcat:9.0-jre11 "catalina.sh run" 23 minutes ago Exited (129) 15 minutes ago focused_shaw
b54865dcfaf9 tomcat:9.0-jre11 "catalina.sh run" 26 minutes ago Exited (129) 15 minutes ago gracious_wiles
323bcddd3a0e tomcat:9.0-jre11 "catalina.sh run" 31 minutes ago Exited (130) 29 minutes ago nervous_rhodes
dd969070533f tomcat:9.0-jre11 "catalina.sh run" 58 minutes ago Exited (137) 15 seconds ago hopeful_curran
9e705b288eae tomcat:8.0-jre8 "catalina.sh run" 59 minutes ago Exited (139) 59 minutes ago wonderful_bohr
47779f64faf7 tomcat:8.0-jre8 "catalina.sh run" About an hour ago Exited (139) About an hour ago laughing_babbage
dcb79690494e tomcat:8.0-jre8 "catalina.sh run" About an hour ago Exited (139) About an hour ago dazzling_saha
36e122433fa8 tomcat:8.0-jre8 "catalina.sh run" About an hour ago Exited (139) About an hour ago intelligent_murdock
a22062e617ea tomcat:8.0-jre8 "catalina.sh run" About an hour ago Exited (139) About an hour ago suspicious_goldberg
9aac67eb0ee0 74cc54e27dc4 "/hello" 22 hours ago Exited (0) 22 hours ago wonderful_lamarr
[root@localhost /]#
5:删除容器
docker rm 容器名称|容器ID[root@localhost /]# docker rm 9aac
9aac
[root@localhost /]# docker rm -f $(docker ps -a -q)
7508c78a5f6d
644a2e27f2fa
cb325c0e80f1
b54865dcfaf9
323bcddd3a0e
dd969070533f
9e705b288eae
47779f64faf7
dcb79690494e
36e122433fa8
a22062e617ea
[root@localhost /]#
6:查看容器运行日志
docker logs 容器ID:容器名称
docker logs -f 容器ID:容器名称 事实查看日志。
docker logs -f -t 容器id:容器名称 实时且有时间戳。
docker logs --tail 5 查看文件尾部最后5行。
7:查看容器内的进程
docker top 容器ID|容器名称[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87c68ee3529b tomcat:9.0-jre11 "catalina.sh run" 6 minutes ago Up 6 minutes 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp tomcat01
[root@localhost /]# docker top 87c
UID PID PPID C STIME TTY TIME CMD
root 7658 7636 0 10:56 ? 00:00:02 /opt/java/openjdk/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 -Dsun.io.useCanonCaches=false -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -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
[root@localhost /]# PID容器内部的进程的ID。
8:通过宿主机与容器内部进行交互
进入容器
docker exec -it 容器ID|容器名称 bash-it:进入容器的交互模型
exec:进入
bash:容器内部交互页面[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87c68ee3529b tomcat:9.0-jre11 "catalina.sh run" 6 minutes ago Up 6 minutes 0.0.0.0:8080->8080/