容器基础操作

Docker 容器的创建、启动、停止、删除等基础操作


📋 目录


创建容器

docker create

创建容器但不启动。

# 创建容器
docker create --name my-container nginx:latest
 
# 创建容器并设置环境变量
docker create --name my-container \
  -e ENV_VAR=value \
  nginx:latest
 
# 创建容器并映射端口
docker create --name my-container \
  -p 8080:80 \
  nginx:latest

docker run

创建并运行容器。

# 运行容器(前台)
docker run nginx:latest
 
# 运行容器(后台)
docker run -d nginx:latest
 
# 运行容器(指定名称)
docker run -d --name my-nginx nginx:latest
 
# 运行容器(交互式)
docker run -it ubuntu:20.04 /bin/bash
 
# 运行容器(端口映射)
docker run -d -p 8080:80 nginx:latest
 
# 运行容器(自动删除)
docker run --rm ubuntu:20.04 echo "Hello"

启动与停止容器

docker start

启动已停止的容器。

# 启动容器
docker start my-container
 
# 启动容器并附加到输出
docker start -a my-container
 
# 启动多个容器
docker start container1 container2
 
# 启动所有已停止的容器
docker start $(docker ps -a -q)

docker stop

停止运行中的容器。

# 停止容器
docker stop my-container
 
# 停止容器(立即停止)
docker stop -t 0 my-container
 
# 停止多个容器
docker stop container1 container2
 
# 停止所有运行中的容器
docker stop $(docker ps -q)

docker kill

强制停止容器。

# 强制停止容器
docker kill my-container
 
# 发送特定信号
docker kill -s SIGTERM my-container

重启容器

docker restart

重启容器。

# 重启容器
docker restart my-container
 
# 重启多个容器
docker restart container1 container2
 
# 重启所有容器
docker restart $(docker ps -q)

删除容器

docker rm / docker container rm

删除容器。

# 删除已停止的容器
docker rm my-container
 
# 强制删除运行中的容器
docker rm -f my-container
 
# 删除多个容器
docker rm container1 container2
 
# 删除所有已停止的容器
docker container prune
 
# 删除所有容器(包括运行中的)
docker rm -f $(docker ps -aq)

批量删除

# 删除所有已停止的容器
docker container prune -f
 
# 删除指定状态的容器
docker rm $(docker ps -a -f "status=exited" -q)

查看容器状态

docker ps / docker container ls

列出容器。

# 列出运行中的容器
docker ps
 
# 列出所有容器(包括已停止的)
docker ps -a
 
# 只显示容器 ID
docker ps -q
 
# 显示最近创建的容器
docker ps -l
 
# 按格式输出
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
 
# 过滤容器
docker ps -f "name=nginx"
docker ps -f "status=running"
docker ps -f "ancestor=nginx:latest"

docker inspect

查看容器详细信息。

# 查看容器信息
docker inspect my-container
 
# 查看特定信息
docker inspect -f '{{.NetworkSettings.IPAddress}}' my-container
docker inspect -f '{{.Config.Env}}' my-container
docker inspect -f '{{.State.Status}}' my-container
docker inspect -f '{{.Mounts}}' my-container

docker stats

实时查看容器资源使用情况。

# 查看所有容器的资源使用
docker stats
 
# 查看指定容器
docker stats my-container
 
# 只显示一次(不持续更新)
docker stats --no-stream
 
# 按格式输出
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"

进入容器内部

docker exec

在运行中的容器内执行命令。

# 执行命令
docker exec my-container ls /app
 
# 交互式执行(进入容器)
docker exec -it my-container /bin/bash
 
# 以 root 用户执行
docker exec -u root my-container command
 
# 在后台执行
docker exec -d my-container command

docker attach

附加到容器的标准输入、输出和错误流。

# 附加到容器
docker attach my-container
 
# 退出而不停止容器
# 使用 Ctrl+P, Ctrl+Q

注意docker attach 会附加到主进程,如果主进程退出,容器也会停止。建议使用 docker exec


容器生命周期

状态转换

创建 (Created) → 运行 (Running) → 停止 (Stopped) → 删除 (Removed)
                ↓
            暂停 (Paused) → 恢复 (Running)

容器状态

  • Created:容器已创建但未启动
  • Running:容器正在运行
  • Paused:容器已暂停
  • Restarting:容器正在重启
  • Removing:容器正在删除
  • Exited:容器已退出
  • Dead:容器已死亡

查看容器状态

# 查看容器状态
docker ps -a --format "table {{.Names}}\t{{.Status}}"
 
# 查看容器退出码
docker inspect -f '{{.State.ExitCode}}' my-container

容器日志

docker logs

查看容器日志。

# 查看日志
docker logs my-container
 
# 实时查看日志(类似 tail -f)
docker logs -f my-container
 
# 查看最后 N 行
docker logs --tail 100 my-container
 
# 查看带时间戳的日志
docker logs -t my-container
 
# 查看指定时间范围的日志
docker logs --since "2023-01-01T00:00:00" my-container
docker logs --until "2023-01-01T23:59:59" my-container
 
# 查看最近 10 分钟的日志
docker logs --since 10m my-container

容器文件操作

docker cp

在容器和本地文件系统之间复制文件。

# 从容器复制到本地
docker cp my-container:/path/to/file /local/path
 
# 从本地复制到容器
docker cp /local/path my-container:/path/to/file
 
# 复制目录
docker cp my-container:/app ./app

实用技巧

批量操作

# 启动所有已停止的容器
docker start $(docker ps -a -q)
 
# 停止所有运行中的容器
docker stop $(docker ps -q)
 
# 删除所有已停止的容器
docker rm $(docker ps -a -f "status=exited" -q)
 
# 删除所有容器
docker rm -f $(docker ps -aq)

容器清理

# 删除所有已停止的容器
docker container prune
 
# 删除所有未使用的容器、网络、镜像
docker system prune
 
# 删除所有未使用的资源(包括未使用的镜像)
docker system prune -a

📚 参考资源


相关笔记