Docker基础
一、镜像管理
1 搜索镜像
docker search 是 Docker 提供的一个命令行工具,用于在 Docker Hub(或其他配置的镜像仓库)中搜索可用的镜像。
这个命令非常有用,尤其是在你想要查找某个特定功能的镜像(如 Nginx、MySQL、Python 等)时。
示例:搜索 Nginx 镜像
root@00b62e4bbab4:/workspace<span class="token comment"># docker search nginx</span>
NAME DESCRIPTION STARS OFFICIAL
nginx Official build of Nginx. <span class="token number">20880</span> <span class="token punctuation">[</span>OK<span class="token punctuation">]</span>
nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers fo… <span class="token number">108</span>
nginx/nginx-prometheus-exporter NGINX Prometheus Exporter <span class="token keyword">for</span> NGINX and NGIN… <span class="token number">51</span>
nginx/unit This repository is retired, use the Docker o… <span class="token number">65</span>
nginx/nginx-ingress-operator NGINX Ingress Operator <span class="token keyword">for</span> NGINX and NGINX P… <span class="token number">2</span>
nginx/nginx-quic-qns NGINX QUIC interop <span class="token number">1</span>
nginx/nginxaas-loadbalancer-kubernetes <span class="token number">1</span>
nginx/unit-preview Unit preview features <span class="token number">0</span>
bitnami/nginx Bitnami container image <span class="token keyword">for</span> NGINX <span class="token number">200</span>
输出字段说明:
| 字段 | 说明 |
|---|---|
NAME |
镜像名称 |
DESCRIPTION |
镜像描述 |
STARS |
收藏数(受欢迎程度) |
OFFICIAL |
是否为官方镜像([OK] 表示是) |
AUTOMATED |
是否为自动构建的镜像 |
使用建议:
- 优先选择官方镜像([OK] in OFFICIAL):更安全、更新更及时。
- 关注
STARS数量:代表社区认可度。
2 拉取镜像
docker pull 是一个常用的 Docker 命令,用于从镜像仓库(如 Docker Hub)下载(拉取)镜像到本地机器。
拉取默认标签的镜像
如果不指定标签,默认会拉取 latest 标签的镜像,以下指令等价于:docker pull ubuntu:latest
示例:
root@00b62e4bbab4:/workspace<span class="token comment"># docker pull ubuntu</span>
Using default tag: latest
latest: Pulling from library/ubuntu
b08e2ff4391e: Pull complete
Digest: sha256:440dcf6a5640b2ae5c77724e68787a906afb8ddee98bf86db94eea8528c2c076
Status: Downloaded newer image <span class="token keyword">for</span> ubuntu:latest
docker.io/library/ubuntu:latest
拉取特定版本的镜像(指定标签)
示例:拉取 Ubuntu 22.04 版本的镜像
root@00b62e4bbab4:/workspace<span class="token comment"># docker pull ubuntu:22.04</span>
<span class="token number">22.04</span>: Pulling from library/ubuntu
e735f3a6b701: Pull complete
Digest: sha256:3c61d3759c2639d4b836d32a2d3c83fa0214e36f195a3421018dbaaf79cbe37f
Status: Downloaded newer image <span class="token keyword">for</span> ubuntu:22.04
docker.io/library/ubuntu:22.04
3 查看镜像
在使用 Docker 时,我们经常需要查看本地已经存在的镜像
示例:
<span class="token comment"># 查看docker所有镜像</span>
root@00b62e4bbab4:/workspace<span class="token comment"># docker images</span>
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu <span class="token number">22.04</span> 1b668a2d748d <span class="token number">2</span> weeks ago <span class="token number">77</span>.9MB
ubuntu latest f9248aac10f2 <span class="token number">2</span> weeks ago <span class="token number">78</span>.1MB
4 删除镜像
docker rmi 是 Docker 提供的用于 删除一个或多个本地镜像(image) 的命令。
删除单个镜像(通过名称:标签)
<span class="token function">docker</span> rmi nginx:latest
删除多个镜像
<span class="token function">docker</span> rmi nginx redis mysql
使用镜像 ID 删除镜像
<span class="token function">docker</span> rmi 602e111c06b6
强制删除镜像(即使有容器依赖)
⚠️ 注意:强制删除可能会导致已经运行的容器无法正常工作。
<span class="token function">docker</span> rmi <span class="token parameter variable">-f</span> nginx
删除悬空镜像
悬空镜像是没有标签的镜像,通常是在构建失败或更新镜像后留下的旧版本。
<span class="token function">docker</span> image prune
如果想删除所有未被使用的镜像(包括没有容器使用的镜像)
<span class="token function">docker</span> image prune <span class="token parameter variable">-a</span>
5 镜像标签
docker tag 命令用于 为现有镜像创建一个新的标签(tag)。这在你希望重命名镜像、为镜像打版本号、或准备推送镜像到远程仓库(如 Docker Hub)时非常有用。
⚠️ 注意:新标签和原标签指向同一个镜像 ID,不会复制镜像,只是添加了一个新的“标签”。
示例:
<span class="token comment"># 1.先用 docker images 查看本地已有的镜像</span>
root@00b62e4bbab4:/workspace<span class="token comment"># docker images</span>
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu <span class="token number">22.04</span> 1b668a2d748d <span class="token number">2</span> weeks ago <span class="token number">77</span>.9MB
ubuntu latest f9248aac10f2 <span class="token number">2</span> weeks ago <span class="token number">78</span>.1MB
<span class="token comment"># 2.给镜像打一个新的标签</span>
<span class="token function">docker</span> tag ubuntu ubuntu:25.10
<span class="token comment"># 查看系统镜像</span>
root@00b62e4bbab4:/workspace<span class="token comment"># docker images</span>
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu <span class="token number">22.04</span> 1b668a2d748d <span class="token number">2</span> weeks ago <span class="token number">77</span>.9MB
ubuntu <span class="token number">1.12</span> f9248aac10f2 <span class="token number">2</span> weeks ago <span class="token number">78</span>.1MB
ubuntu latest f9248aac10f2 <span class="token number">2</span> weeks ago <span class="token number">78</span>.1MB
6 镜像推送
docker push 命令用于将镜像推送到镜像仓库(如 Docker Hub),也可以推送到自己搭建的镜像仓库(Harbor)。
这里以推送到cnb平台仓库为例,cnb镜像推送命名规则:docker.cnb.cool/<组织名>/[子组织名]/<仓库名>/<image_name>:<tag>
示例:
<span class="token function">docker</span> pull nginx
<span class="token function">docker</span> tag nginx docker.cnb.cool/<span class="token operator"><</span>组织名<span class="token operator">></span>/<span class="token punctuation">[</span>子组织名<span class="token punctuation">]</span>/<span class="token operator"><</span>仓库名<span class="token operator">></span>/nginx:1.24.2
<span class="token function">docker</span> push docker.cnb.cool/<span class="token operator"><</span>组织名<span class="token operator">></span>/<span class="token punctuation">[</span>子组织名<span class="token punctuation">]</span>/<span class="token operator"><</span>仓库名<span class="token operator">></span>/nginx:1.24.2
二、容器生命周期管理
1 创建并启动一个新容器
docker run [options] 命令是一个常用的 Docker 命令,用于创建并启动一个新容器。
常用选项:
-d: 后台运行容器,并返回容器 ID。-it: 启动一个交互式的容器,并进入容器。--name: 指定容器的名称。--rm: 创建并运行容器后,自动删除容器。p: 端口映射,将容器的端口映射到主机的端口。v: 挂载卷,将容器的文件系统映射到主机的文件系统。e: 设置环境变量。
示例:
<span class="token function">docker</span> run <span class="token parameter variable">-d</span> <span class="token parameter variable">-it</span> <span class="token parameter variable">-p</span> <span class="token number">80</span>:80 <span class="token parameter variable">--name</span> my-nginx nginx:1.12.0
2 停止容器
docker stop 命令是一个常用的 Docker 命令,用于停止一个正在运行的容器。docker stop 命令会向容器发送一个停止信号,并等待容器停止。如果容器无法停止,则需要使用 docker kill 命令强制停止容器。
示例:
<span class="token comment"># 1. 根据容器名称停止容器</span>
<span class="token function">docker</span> stop my-nginx
<span class="token comment"># 2. 根据容器ID停止容器</span>
<span class="token function">docker</span> stop 5c86c7e2fc95
3 启动/重启已停止容器
docker start 命令是一个常用的 Docker 命令,用于启动一个已停止的容器。
示例:
<span class="token comment"># 1. 根据容器名称启动容器</span>
<span class="token function">docker</span> start my-nginx
<span class="token comment"># 2. 根据容器ID启动容器</span>
<span class="token function">docker</span> start 5c86c7e2fc95
<span class="token comment"># 3. 重启已停止的容器</span>
<span class="token function">docker</span> restart my-nginx
<span class="token comment"># 4. 根据容器ID重启容器</span>
<span class="token function">docker</span> restart 5c86c7e2fc95
4 删除容器
docker rm 命令是一个常用的 Docker 命令,用于删除一个或多个容器。docker rm 命令会删除容器,但不会删除容器所使用的镜像。
示例:
<span class="token comment"># 1. 根据容器名称删除容器</span>
<span class="token function">docker</span> <span class="token function">rm</span> my-nginx
<span class="token comment"># 2. 根据容器ID删除容器</span>
<span class="token function">docker</span> <span class="token function">rm</span> 5c86c7e2fc95
<span class="token comment"># 3. 强制删除容器</span>
<span class="token function">docker</span> <span class="token function">rm</span> <span class="token parameter variable">-f</span> my-nginx
<span class="token comment"># 4. 删除所有停止的容器</span>
<span class="token function">docker</span> <span class="token function">rm</span> <span class="token variable"><span class="token variable">$(</span><span class="token function">docker</span> <span class="token function">ps</span> <span class="token parameter variable">-a</span> <span class="token parameter variable">-q</span><span class="token variable">)</span></span>
5 查看所有容器
docker ps 命令是一个常用的 Docker 命令,用于查看所有正在运行的容器。
示例:
<span class="token comment"># 1. 查看所有正在运行的容器</span>
<span class="token function">docker</span> <span class="token function">ps</span>
<span class="token comment"># 2. 查看所有容器(包含已停止的容器)</span>
<span class="token function">docker</span> <span class="token function">ps</span> <span class="token parameter variable">-a</span>
三、容器交互与监控
1 容器交互
docker exec 命令是一个常用的 Docker 命令,用于在运行中的容器中执行命令。
docker exec -it :在运行中的容器内执行命令 (常用 /bin/bash, /bin/sh)
示例:
<span class="token function">docker</span> <span class="token builtin class-name">exec</span> <span class="token parameter variable">-it</span> my-nginx <span class="token function">bash</span>
2 容器日志
docker logs 命令是一个常用的 Docker 命令,用于查看容器的日志。
示例:
<span class="token comment"># 1. 查看容器的当前日志</span>
<span class="token function">docker</span> logs my-nginx
<span class="token comment"># 2. 持续查看容器的日志</span>
<span class="token function">docker</span> logs <span class="token parameter variable">-f</span> my-nginx
3 容器/镜像信息
docker inspect 命令是一个常用的 Docker 命令,用于查看容器或镜像的详细信息。
示例:
<span class="token comment"># 1. 查看容器的详细信息</span>
<span class="token function">docker</span> inspect my-nginx
<span class="token comment"># 2. 查看镜像的详细信息</span>
<span class="token function">docker</span> inspect nginx
<span class="token comment"># 3. 获取容器的IP地址</span>
<span class="token function">docker</span> inspect <span class="token parameter variable">--format</span><span class="token operator">=</span><span class="token string">'{{.NetworkSettings.IPAddress}}'</span> my-nginx
<span class="token comment"># 4. 查看容器资源使用情况 (CPU, 内存, 网络, 磁盘)</span>
<span class="token function">docker</span> stats my-nginx
<span class="token comment"># 5. 查看容器内运行的进程</span>
docket <span class="token function">top</span> my-nginx