深入理解Docker容器生命周期管理和操作技巧
容器是Docker的核心概念,理解其完整的生命周期对于有效管理容器至关重要。
创建 → 运行 → 暂停/停止 → 重启/删除
↓
已创建 (Created) → 运行中 (Running) → 已暂停 (Paused)
↓
已停止 (Stopped) → 已删除 (Deleted)
容器已创建但尚未启动。此时容器已经分配了文件系统,但尚未运行任何进程。
对应命令: docker create
容器正在运行,执行指定的进程。这是容器的主要工作状态。
对应命令: docker run, docker start
容器的进程被暂停,但容器状态保持。可以随时恢复运行。
对应命令: docker pause, docker unpause
容器进程已终止,但容器配置和文件系统仍然存在。
对应命令: docker stop, docker kill
掌握容器创建的各种参数和选项,能够更灵活地控制容器行为。
# 基本运行(如果镜像不存在会自动拉取)
docker run nginx
# 后台运行(守护进程模式)
docker run -d nginx
# 指定容器名称(便于管理)
docker run -d --name my-nginx nginx
# 端口映射(主机端口:容器端口)
docker run -d -p 8080:80 nginx
# 多个端口映射
docker run -d -p 8080:80 -p 8443:443 nginx
# 环境变量设置
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql
# 交互式运行(用于调试和开发)
docker run -it ubuntu /bin/bash
# 自动删除容器(退出后自动清理)
docker run --rm -it ubuntu /bin/bash
# 设置容器重启策略
docker run -d --restart=unless-stopped nginx
# 资源限制(内存和CPU)
docker run -d --memory=512m --cpus=1.5 nginx
# 挂载数据卷
docker run -d -v /host/path:/container/path nginx
# 设置工作目录
docker run -d --workdir=/app nginx
# 设置主机名
docker run -d --hostname=my-container nginx
# 链接到其他容器
docker run -d --link mysql-container:db nginx
-d:后台运行(守护进程模式)-it:交互式终端(-i保持STDIN打开,-t分配伪终端)-p:端口映射(格式:主机端口:容器端口)--name:指定容器名称(必须唯一)-e:设置环境变量(可多次使用)-v:挂载数据卷(主机路径:容器路径)--rm:容器停止后自动删除(适合临时任务)--restart:设置重启策略(no, on-failure, always, unless-stopped)--memory:内存限制(如512m, 1g)--cpus:CPU限制(如1.5表示1.5个CPU核心)# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止)
docker ps -a
# 查看容器详细信息
docker inspect my-nginx
# 查看容器日志
docker logs my-nginx
# 实时查看日志
docker logs -f my-nginx
# 查看容器资源使用情况
docker stats my-nginx
# 停止容器
docker stop my-nginx
# 强制停止容器
docker kill my-nginx
# 启动已停止的容器
docker start my-nginx
# 重启容器
docker restart my-nginx
# 暂停容器
docker pause my-nginx
# 恢复容器
docker unpause my-nginx
# 进入运行中的容器(推荐)
docker exec -it my-nginx /bin/bash
# 在容器中执行命令
docker exec my-nginx ls /usr/share/nginx/html
# 使用attach进入容器(不推荐,退出会停止容器)
docker attach my-nginx
# 删除已停止的容器
docker rm my-nginx
# 强制删除运行中的容器
docker rm -f my-nginx
# 删除所有已停止的容器
docker container prune
# 删除所有容器
docker rm -f $(docker ps -aq)
# 从容器复制文件到主机
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
# 从主机复制文件到容器
docker cp ./index.html my-nginx:/usr/share/nginx/html/
# 查看容器文件系统变化
docker diff my-nginx
# 将容器保存为新镜像
docker commit my-nginx my-custom-nginx:v1.0
# 添加提交信息
docker commit -m "Added custom config" -a "Author" my-nginx my-custom-nginx:v1.0
容器的状态转换: