Skip to content

📦 容器管理

运行容器

bash
# 最简单的运行方式
docker run nginx

# 后台运行 + 给容器起名字
docker run -d --name my-nginx nginx
a1b2c3d4e5f6...

# 端口映射:宿主机 8080 -> 容器 80
docker run -d --name web -p 8080:80 nginx

# 环境变量
docker run -d --name db \
  -e MYSQL_ROOT_PASSWORD=mypassword \
  -e MYSQL_DATABASE=myapp \
  mysql:8.0

# 限制资源:最多用 1 个 CPU 和 512MB 内存
docker run -d --name limited \
  --cpus="1.0" \
  --memory="512m" \
  nginx

# 重启策略:总是自动重启
docker run -d --restart=unless-stopped --name always-up nginx

📝 备注: 📝 参数小抄:-d后台运行 |-p端口映射 |-e环境变量 |--name容器名 |-v挂载卷 |-it交互模式

容器生命周期

bash
# 查看运行中的容器
docker ps
CONTAINER ID   IMAGE     COMMAND                  STATUS        PORTS                  NAMES
a1b2c3d4e5f6   nginx     "/docker-entrypoint.…"   Up 5 minutes  0.0.0.0:8080->80/tcp   my-nginx

# 查看所有容器(包括已停止的)
docker ps -a

# 停止容器
docker stop my-nginx

# 启动已停止的容器
docker start my-nginx

# 重启容器
docker restart my-nginx

# 删除已停止的容器
docker rm my-nginx

# 强制删除运行中的容器
docker rm -f my-nginx

# 清理所有已停止的容器
docker container prune

进入容器和查看日志

bash
# 进入正在运行的容器(开一个交互式终端)
docker exec -it my-nginx /bin/bash
root@a1b2c3d4e5f6:/# ls
bin  boot  dev  docker-entrypoint.d  etc  home  lib
root@a1b2c3d4e5f6:/# cat /etc/nginx/nginx.conf
...
root@a1b2c3d4e5f6:/# exit

# 在容器内执行单条命令(不进入容器)
docker exec my-nginx nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

# 查看容器日志
docker logs my-nginx
172.17.0.1 - - [20/Jun/2026:10:30:00 +0000] "GET / HTTP/1.1" 200 615
172.17.0.1 - - [20/Jun/2026:10:30:05 +0000] "GET /favicon.ico HTTP/1.1" 404 555

# 实时跟踪日志(类似 tail -f)
docker logs -f --tail 100 my-nginx

# 查看容器资源使用情况
docker stats
CONTAINER ID   NAME       CPU %   MEM USAGE / LIMIT   MEM %   NET I/O       BLOCK I/O
a1b2c3d4e5f6   my-nginx   0.05%   2.5MiB / 512MiB     0.49%   1.2kB / 0B    0B / 0B

数据持久化:Volume(卷)

容器就像临时工棚——拆了就没了。但你的数据(数据库文件、上传的图片)不能丢!Volume 就是在集装箱里装了一个保险箱,集装箱拆了,保险箱还在。

bash
# 创建命名卷
docker volume create mysql-data

# 使用命名卷
docker run -d --name db \
  -v mysql-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=mypassword \
  mysql:8.0

# 使用绑定挂载(把宿主机目录映射进去)
docker run -d --name web \
  -v /home/user/website:/usr/share/nginx/html \
  -p 8080:80 \
  nginx

# 只读挂载(容器只能读,不能写)
docker run -d -v /config:/etc/app/config:ro myapp

# 查看所有卷
docker volume ls
DRIVER    VOLUME NAME
local     mysql-data

# 查看卷详情
docker volume inspect mysql-data
[
    {
        "CreatedAt": "2026-06-20T10:00:00Z",
        "Driver": "local",
        "Mountpoint": "/var/lib/docker/volumes/mysql-data/_data",
        "Name": "mysql-data"
    }
]