跳到主要内容Docker 镜像与容器核心操作命令详解 | 极客日志Shell / Bashjava
Docker 镜像与容器核心操作命令详解
Docker 镜像作为应用模板,容器为运行实例。内容涵盖镜像与容器的核心操作命令,包括查看、搜索、拉取、删除及创建、启动、停止、进入、删除等基础用法。重点解析网络映射与数据卷挂载功能,支持外网访问与数据持久化。文末提供 JDK、Tomcat、MySQL、Nginx 的实战部署示例,覆盖日常开发常见场景。
极客零度16 浏览 在上一篇文章中,我们完成了 Docker 的核心概念认知和 CentOS 7 下的环境搭建,而 Docker 的日常使用,核心围绕镜像和容器展开:镜像是应用的'模板',容器是镜像的'运行实例',掌握二者的操作命令,是使用 Docker 的基础。本文作为系列第二篇,将详细讲解 Docker 镜像和容器的所有常用命令,包括基础操作、进阶使用,同时讲解网络映射、数据卷挂载等核心功能,让你轻松上手 Docker 的日常操作。
一、Docker 基础通用命令
在学习镜像和容器命令前,先掌握几个 Docker 的通用命令,用于查看信息、获取帮助,这是日常排错和学习的基础:
docker version
docker info
docker 命令 --help
Docker 的官方帮助文档非常详细,地址:https://docs.docker.com/engine/reference/commandline/docker/,遇到不懂的命令可随时查阅。
二、Docker 镜像核心操作命令
镜像是 Docker 的基础,所有容器都基于镜像创建,镜像的操作主要包括查看、搜索、拉取、删除四大核心,以下为详细命令及使用示例。
1. 查看本地镜像:docker images
docker images
执行 docker images 后,终端会显示 5 列信息:
- REPOSITORY:镜像的仓库源(如 hello-world、mysql、tomcat);
- TAG:镜像的标签(用于区分版本,如 latest、5.7、8.5,latest 表示最新版);
- IMAGE ID:镜像的唯一 ID(唯一标识一个镜像,可通过 ID 操作镜像);
- CREATED:镜像的创建时间;
- SIZE:镜像的大小。
2. 搜索仓库中的镜像:docker search
用于在 Docker Hub(或配置的国内仓库)中搜索指定名称的镜像,语法:docker search 镜像名
docker search mysql
执行后会显示镜像的名称、描述、星级(STARS)、是否官方(OFFICIAL)、是否自动构建(AUTOMATED),优先选择官方(OFFICIAL) 镜像,安全性和稳定性更高。
3. 拉取(下载)镜像:docker pull
从配置的镜像仓库中下载指定镜像到本地,语法:docker pull 镜像名:标签,标签不写默认拉取 latest(最新版)。
docker pull mysql
docker pull mysql:5.7
docker pull tomcat:8.5
Docker 的镜像采用分层下载(联合文件系统),下载新版本时,只会下载与老版本不同的层,节省磁盘空间和下载时间。
4. 删除本地镜像:docker rmi
删除本地指定的镜像,语法:docker rmi -f 镜像名/镜像 ID,-f 表示强制删除(若镜像有运行的容器,需先停止容器再删除)。
docker rmi -f 1b6b1fe7261e
docker rmi -f mysql:5.7
docker rmi -f 镜像 ID1 镜像 ID2 镜像名 3:标签
docker rmi -f $(docker images -aq)
$(docker images -aq) 表示获取本地所有镜像的 ID,结合 docker rmi -f 实现批量删除。
三、Docker 容器核心操作命令
容器是镜像的运行实例,应用的实际运行在容器中完成,容器的操作比镜像更丰富,核心包括查看、创建、启动、停止、进入、退出、删除,同时还有日志查看、进程查看等进阶操作,以下为详细命令及使用示例。
Docker 容器有两种核心运行状态,对应不同的创建命令,日常使用中需根据需求选择:
- 前台交互式运行:容器启动后,进入容器的交互终端,关闭终端则容器停止,适用于调试容器;
- 后台守护式运行:容器启动后,在后台运行,不占用终端,适用于生产环境运行应用。
1. 查看容器:docker ps
执行 docker ps 后,终端会显示 7 列信息:
- CONTAINER ID:容器的唯一 ID;
- IMAGE:容器基于的镜像名;
- COMMAND:容器启动时执行的命令;
- CREATED:容器的创建时间;
- STATUS:容器的状态(Up:运行中,Exited:已停止);
- PORTS:容器的端口映射关系;
- NAMES:容器的名称(创建时可指定,未指定则 Docker 自动生成)。
2. 创建并启动容器:docker run
这是最核心的容器命令,语法:docker run [可选参数] 镜像名 [容器内执行的命令],核心可选参数是重点,需熟练掌握。
--name="容器名"
-d
-it
-p
-P
-v
-e
docker run -it --name tomcat01 tomcat /bin/bash
docker run -itd --name tomcat02 -p 8080:8080 tomcat
docker run -itd --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql/data:/var/lib/mysql mysql:5.7
3. 停止容器:docker stop
停止正在运行的容器,语法:docker stop 容器 ID/容器名
docker stop tomcat02
docker kill 容器 ID/容器名
4. 启动已停止的容器:docker start
启动之前创建并停止的容器,语法:docker start 容器 ID/容器名
5. 重启容器:docker restart
重启运行中或已停止的容器,语法:docker restart 容器 ID/容器名
6. 进入运行中的容器:docker exec /docker attach
当容器以 -d(后台)方式运行时,需要进入容器内部进行操作,有两种命令,推荐使用 docker exec,二者的核心区别:
docker exec:在容器中开启一个新的终端,执行命令,退出终端不影响容器运行;
docker attach:进入容器的原有终端,退出终端则容器停止(适用于调试)。
docker exec -it 容器 ID/容器名 /bin/bash
docker exec -it tomcat02 /bin/bash
进入容器后,终端提示符会变为 root@容器 ID:/#,此时可执行 Linux 命令(如 ls、cd、mkdir),容器的底层是精简版的 Linux 系统。
7. 退出容器
在容器的交互终端中,有两种退出方式,对应不同的容器状态:
8. 删除容器:docker rm
删除已停止的容器,语法:docker rm -f 容器 ID/容器名,-f 表示强制删除(可删除运行中的容器)。
docker rm tomcat01
docker rm -f tomcat02
docker rm -f 容器 ID1 容器名 2
docker rm -f $(docker ps -aq)
9. 容器进阶操作命令
(1)查看容器日志:docker logs
查看容器的运行日志,用于排错,语法:docker logs [可选参数] 容器 ID/容器名
-t
-f
--tail 数字
docker logs -tf --tail 10 mysql01
(2)查看容器内的进程:docker top
查看容器中正在运行的进程,类似 Linux 的 top 命令,语法:docker top 容器 ID/容器名
(3)查看容器的元数据:docker inspect
查看容器的详细信息(元数据),包括容器的 IP、端口映射、数据卷挂载、环境变量等,语法:docker inspect 容器 ID/容器名
(4)宿主机与容器之间的文件拷贝:docker cp
docker cp /home/test.txt tomcat02:/usr/local/tomcat/webapps
docker cp tomcat02:/usr/local/tomcat/webapps/index.html /home
四、Docker 核心功能:网络映射与数据卷挂载
单纯的创建容器无法满足实际应用需求,因为容器和宿主机默认网络不通、文件不共享,而网络映射(-p) 和数据卷挂载(-v) 是解决这两个问题的核心功能,也是 Docker 实战中必须掌握的。
1. 网络映射(-p):实现外网访问容器
Docker 容器默认拥有独立的网络空间,与宿主机、外网不通,通过 -p 参数将宿主机的端口映射到容器的暴露端口,外网访问宿主机的端口时,请求会被转发到容器内部,实现外网访问容器中的应用。
-p 宿主机 IP:宿主机端口:容器端口
-p 宿主机端口:容器端口
-p 容器端口
Tomcat 的默认暴露端口是 8080,将宿主机的 3344 端口映射到容器的 8080 端口:
docker run -itd --name tomcat03 -p 3344:8080 tomcat
此时,在外网通过 http://宿主机 IP:3344 即可访问容器中的 Tomcat 服务(需开放服务器安全组的 3344 端口)。
2. 数据卷挂载(-v):实现宿主机与容器文件共享
数据卷(Volume)是 Docker 的持久化存储方案,通过 -v 参数将宿主机的目录与容器的目录建立映射,二者的文件实时同步、相互共享,核心价值:
- 数据持久化:容器被删除后,数据仍保存在宿主机的目录中,不会丢失;
- 方便修改配置:直接在宿主机修改文件,无需进入容器,同步到容器中;
- 实现容器间数据共享:多个容器挂载同一个宿主机目录,实现数据互通。
-v 宿主机绝对路径目录:容器内目录
-v 容器内目录
-v 卷名:容器内目录
注意:宿主机目录必须是绝对路径,若目录不存在,Docker 会自动创建。
实战示例 1:Tomcat 容器配置与项目挂载
Tomcat 官方镜像的 webapps 目录默认无文件,将宿主机的 /tmp/webapps 目录挂载到容器的 /usr/local/tomcat/webapps 目录,直接在宿主机上传项目,容器即可识别:
docker run -itd --name tomcat04 -p 8080:8080 -v /tmp/webapps:/usr/local/tomcat/webapps tomcat
将 Tomcat 项目包上传到宿主机的 /tmp/webapps 目录,容器会自动同步,外网通过 http://宿主机 IP:8080/项目名 即可访问。
实战示例 2:MySQL 容器数据持久化
MySQL 的核心数据存储在容器的 /var/lib/mysql 目录,将宿主机的 /home/mysql/data 目录挂载到该目录,即使容器被删除,MySQL 的数据仍保存在宿主机中:
docker run -itd --name mysql02 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql/data:/var/lib/mysql mysql:5.7
五、常用镜像的快速部署实战
掌握了镜像、容器命令和核心功能后,我们来实战部署几个最常用的镜像(JDK、Tomcat、MySQL、Nginx),覆盖日常开发的绝大多数场景,直接复制命令即可使用。
1. 部署 JDK8 容器
docker pull kdvolder/jdk8
docker run -it --name jdk8 kdvolder/jdk8 /bin/bash
java -version
2. 部署 Tomcat 容器(带项目挂载)
docker pull tomcat:8.5
mkdir -p /tmp/tomcat-webapps
docker run -itd --name tomcat85 -p 8080:8080 -v /tmp/tomcat-webapps:/usr/local/tomcat/webapps tomcat:8.5
3. 部署 MySQL5.7 容器(数据持久化 + 外网访问)
docker pull mysql:5.7
mkdir -p /home/mysql57/data
docker run -itd --name mysql57 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql57/data:/var/lib/mysql mysql:5.7
docker exec -it mysql57 /bin/bash
mysql -uroot -p123456
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
exit
修改完成后,可通过 Navicat、DBeaver 等工具,用 宿主机 IP:3306、用户名 root、密码 123456 连接 MySQL。
4. 部署 Nginx 容器(配置 + 页面挂载)
docker pull nginx
mkdir -p /home/nginx/conf /home/nginx/html
docker run -itd --name tmp-nginx nginx
docker cp tmp-nginx:/etc/nginx/nginx.conf /home/nginx/conf/
docker cp tmp-nginx:/usr/share/nginx/html/index.html /home/nginx/html/
docker rm -f tmp-nginx
docker run -itd --name nginx01 -p 80:80 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/usr/share/nginx/html nginx
直接在宿主机的 /home/nginx/html 目录修改 index.html,或上传静态项目,外网通过 http://宿主机 IP 即可访问;修改 /home/nginx/conf/nginx.conf 可配置 Nginx 反向代理、跨域等功能。
相关免费在线工具
- Keycode 信息
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
- Escape 与 Native 编解码
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
- JavaScript / HTML 格式化
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
- JavaScript 压缩与混淆
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online