📦 容器管理
运行容器
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"
}
]