Skip to content

Docker运行容器镜像指令 ​

这篇文档是 Docker 高频命令速查表,重点放在“日常会反复敲的命令”,不讲底层原理,也不展开 Compose 和 K8s。

1. 镜像相关命令 ​

1.1 搜索镜像 ​

bash
docker search nginx

适合:

  • 先确认官方镜像是否存在
  • 查看镜像命名是否正确

1.2 拉取镜像 ​

bash
docker pull nginx:latest
docker pull mysql:8.0
docker pull mcr.microsoft.com/dotnet/aspnet:8.0

经验建议:

  • 生产环境尽量不要长期依赖 latest
  • 优先写明确版本号,方便回滚和排障

1.3 查看本地镜像 ​

bash
docker images

1.4 删除镜像 ​

bash
docker rmi nginx:latest
docker rmi IMAGE_ID

如果镜像正被容器占用,需要先删容器。

1.5 导出镜像 ​

bash
docker save -o nginx.tar nginx:latest

1.6 导入镜像 ​

bash
docker load -i nginx.tar

适合:

  • 无公网环境迁移
  • 生产环境离线导入
  • 做镜像备份

2. 容器相关命令 ​

2.1 启动容器 ​

前台交互式 ​

bash
docker run --rm -it ubuntu:22.04 bash

适合临时测试。

后台服务式 ​

bash
docker run -d --name my-nginx -p 8080:80 nginx:latest

常用参数说明:

  • -d:后台运行
  • --name:指定容器名
  • -p 8080:80:宿主机 8080 映射容器 80

2.2 查看正在运行的容器 ​

bash
docker ps

2.3 查看所有容器 ​

bash
docker ps -a

2.4 查看容器日志 ​

bash
docker logs my-nginx
docker logs -f my-nginx
docker logs --tail 100 my-nginx

2.5 进入容器 ​

bash
docker exec -it my-nginx sh
docker exec -it my-app bash

经验上:

  • Alpine 镜像大多用 sh
  • Ubuntu / Debian 镜像通常可用 bash

2.6 停止容器 ​

bash
docker stop my-nginx

2.7 启动已存在容器 ​

bash
docker start my-nginx

2.8 重启容器 ​

bash
docker restart my-nginx

2.9 删除容器 ​

bash
docker rm my-nginx
docker rm -f my-nginx

3. 常用运行参数速查 ​

参数作用典型示例
-d后台运行docker run -d nginx
-it交互式终端docker run -it ubuntu bash
--rm退出即删docker run --rm -it ubuntu bash
--name指定容器名docker run --name my-nginx nginx
-p端口映射-p 8080:80
-v目录挂载-v ./data:/var/lib/mysql
-e环境变量-e MYSQL_ROOT_PASSWORD=123456
--restart重启策略--restart unless-stopped

4. 最常见的组合命令 ​

4.1 跑一个 Nginx ​

bash
docker run -d --name my-nginx -p 8080:80 nginx:latest

4.2 跑一个 MySQL ​

bash
docker run -d \
  --name my-mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 3306:3306 \
  -v ./mysql-data:/var/lib/mysql \
  mysql:8.0

4.3 跑一个带挂载目录的应用 ​

bash
docker run -d \
  --name my-app \
  -p 5000:5000 \
  -v ./logs:/app/logs \
  my-app:1.0.0

5. 容器排障时最常用的命令 ​

5.1 容器起不来 ​

先看状态:

bash
docker ps -a

再看日志:

bash
docker logs CONTAINER_NAME

5.2 端口访问不到 ​

先确认容器是否在跑:

bash
docker ps

再确认端口映射:

bash
docker port CONTAINER_NAME

5.3 容器内到底有没有这个文件 ​

bash
docker exec -it CONTAINER_NAME sh

进去以后再用:

bash
ls -lh
pwd
cat xxx.conf

5.4 看资源占用 ​

bash
docker stats

适合快速看:

  • 哪个容器吃 CPU
  • 哪个容器占内存高

6. 不建议继续保留的旧习惯 ​

6.1 滥用 --privileged ​

除非明确知道自己在做什么,否则不要把容器都开成特权模式。

bash
docker run --privileged ...

这会大幅放大容器权限,很多时候只是“为了省事”,但并不必要。

6.2 无脑使用 latest ​

开发测试阶段可以临时用,生产和长期维护场景尽量写死版本。

6.3 把所有东西都塞进一个容器 ​

应用、数据库、Nginx、定时任务全塞一个容器,后面会非常难维护。

经验上:

  • 单一职责优先
  • 多服务用 Compose 组织

7. 高频命令小抄 ​

bash
# 镜像
docker pull nginx:latest
docker images
docker rmi nginx:latest
docker save -o nginx.tar nginx:latest
docker load -i nginx.tar

# 容器
docker run -d --name my-nginx -p 8080:80 nginx:latest
docker ps
docker ps -a
docker logs -f my-nginx
docker exec -it my-nginx sh
docker stop my-nginx
docker start my-nginx
docker restart my-nginx
docker rm -f my-nginx

# 资源与排障
docker stats
docker port my-nginx

8. 一句话总结 ​

Docker 命令很多,但日常真正高频反复用的其实就围绕四件事:拉镜像、起容器、看状态、做清理。先把这套命令熟到不用查,后面再上 Compose 和部署实战会轻松很多。

方舟 · Ark