Docker--容器常用命令
·
Docker–容器常用命令
一、为什么需要掌握容器常用命令?在微服务架构盛行的今天,Docker 已成为开发、测试和生产环境的标准容器化工具。作为全栈工程师,我们每天都会与容器打交道:从本地开发环境搭建、CI/CD 流水线构建,到线上故障排查,都离不开对容器操作的熟练度。掌握容器常用命令,不仅能提升开发效率,还能在关键时刻快速定位问题。本文将从实战角度出发,通过大量代码示例,带你彻底掌握 Docker 容器的核心操作。## 二、容器生命周期管理### 1. 创建与启动容器docker run 是最常用的命令,它集成了创建和启动两个步骤。bash# 启动一个 Nginx 容器,映射宿主机 8080 端口到容器 80 端口# -d: 后台运行# --name: 指定容器名称# -p: 端口映射docker run -d --name my-nginx -p 8080:80 nginx:latest# 查看容器是否启动docker ps# 启动一个交互式容器(用于调试)# -it: 分配交互式终端docker run -it --name debug-container ubuntu:20.04 /bin/bash### 2. 停止与启动容器bash# 停止运行中的容器docker stop my-nginx# 启动已停止的容器docker start my-nginx# 重启容器(停止后再启动)docker restart my-nginx# 暂停容器进程(不释放资源)docker pause my-nginx# 恢复暂停的容器docker unpause my-nginx### 3. 删除容器bash# 删除一个已停止的容器docker rm my-nginx# 强制删除运行中的容器docker rm -f my-nginx# 删除所有已停止的容器(清理环境)docker container prune## 三、容器信息查看与监控### 1. 查看容器列表bash# 查看运行中的容器docker ps# 查看所有容器(包括已停止的)docker ps -a# 以表格形式查看,显示容器 ID 和名称docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"### 2. 查看容器日志日志是排查问题的第一手资料。bash# 查看容器实时日志(类似 tail -f)docker logs -f my-nginx# 查看最后 100 行日志docker logs --tail 100 my-nginx# 查看带时间戳的日志docker logs -t my-nginx### 3. 查看容器资源占用bash# 实时监控容器 CPU、内存、网络 I/Odocker stats my-nginx# 一次查看所有容器的资源占用docker stats --no-stream### 4. 查看容器进程详情bash# 查看容器内运行的进程docker top my-nginx# 查看容器详细配置(JSON 格式)docker inspect my-nginx# 提取特定信息(如 IP 地址)docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-nginx## 四、容器内操作### 1. 进入容器执行命令这是开发调试中最常用的操作。bash# 进入运行中的容器,启动交互式 Shelldocker exec -it my-nginx /bin/bash# 在容器内执行单个命令(不进入 Shell)docker exec my-nginx ls /var/log/nginx# 在容器内执行命令并获取输出docker exec my-nginx cat /etc/nginx/nginx.conf### 2. 复制文件到/从容器bash# 从宿主机复制文件到容器docker cp /tmp/index.html my-nginx:/usr/share/nginx/html/# 从容器复制文件到宿主机docker cp my-nginx:/var/log/nginx/access.log ./access.log# 批量复制目录docker cp ./config/ my-nginx:/etc/nginx/conf.d/### 3. 容器内执行 Python 脚本示例以下是一个完整的实战场景:创建一个 Python Web 应用容器,并执行测试。第一步:创建 Python 应用python# app.py - 简单的 Flask Web 应用from flask import Flaskimport osapp = Flask(__name__)@app.route('/')def hello(): # 获取容器主机名,用于验证多容器环境 hostname = os.uname().nodename return f"Hello from container: {hostname}"if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)第二步:构建并运行容器bash# 创建 Dockerfilecat > Dockerfile << EOFFROM python:3.9-slimWORKDIR /appCOPY app.py .RUN pip install flaskEXPOSE 5000CMD ["python", "app.py"]EOF# 构建镜像docker build -t my-flask-app .# 启动容器docker run -d --name flask-app -p 5000:5000 my-flask-app# 测试应用是否运行curl http://localhost:5000# 进入容器查看日志docker exec -it flask-app cat /app/app.py# 在容器内执行 Python 交互式命令docker exec -it flask-app python -c "import flask; print(flask.__version__)"## 五、容器网络与端口操作### 1. 端口映射管理bash# 查看容器端口映射情况docker port my-nginx# 动态映射端口(随机宿主机端口)docker run -d -P --name random-port nginx:latest# 查看随机分配的端口docker port random-port### 2. 网络配置bash# 创建自定义网络docker network create my-network# 将容器连接到指定网络docker network connect my-network my-nginx# 查看容器网络配置docker network inspect my-network# 断开容器网络docker network disconnect my-network my-nginx### 3. 多容器通信示例bash# 启动两个容器在同一网络docker run -d --name web1 --network my-network nginx:latestdocker run -d --name web2 --network my-network nginx:latest# 从 web1 容器内 ping web2(使用容器名作为主机名)docker exec web1 ping web2# 验证网络连通性docker exec web1 curl http://web2:80## 六、容器数据持久化### 1. 数据卷操作bash# 创建数据卷docker volume create my-data# 挂载数据卷到容器docker run -d --name data-container -v my-data:/data ubuntu:20.04# 查看数据卷信息docker volume inspect my-data# 在容器内写入数据docker exec data-container touch /data/test.txt# 验证数据持久化(删除容器后卷依然存在)docker rm -f data-containerdocker volume ls### 2. 宿主机目录挂载bash# 将宿主机当前目录挂载到容器docker run -d --name dev-env -v $(pwd):/workspace ubuntu:20.04# 挂载宿主机特定目录docker run -d --name log-collector -v /var/log:/logs ubuntu:20.04## 七、容器清理与维护bash# 删除所有停止的容器docker container prune -f# 删除所有未使用的卷docker volume prune -f# 清理所有未使用的资源(容器、网络、镜像、卷)docker system prune -a --volumes# 查看 Docker 磁盘使用情况docker system df## 八、实战:完整的多容器部署流程bash# 1. 清理环境docker container prune -fdocker network prune -f# 2. 创建网络docker network create app-network# 3. 启动 MySQL 数据库docker run -d --name mysql-db \ --network app-network \ -e MYSQL_ROOT_PASSWORD=root \ -e MYSQL_DATABASE=test \ mysql:5.7# 4. 启动应用容器(依赖数据库)docker run -d --name flask-app \ --network app-network \ -p 5000:5000 \ -e DB_HOST=mysql-db \ my-flask-app# 5. 验证容器间通信docker exec flask-app ping mysql-db# 6. 查看所有运行中容器docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"# 7. 停止并删除所有容器docker stop flask-app mysql-dbdocker rm flask-app mysql-db## 九、总结通过本文的实战代码演示,我们系统性地学习了 Docker 容器的常用命令,涵盖了容器生命周期管理、信息查看、内部操作、网络配置、数据持久化以及环境清理等核心场景。作为全栈工程师,在日常开发中应牢记以下几点:- 快速调试:善用 docker exec -it 进入容器排查问题,比反复构建镜像更高效- 资源监控:定期使用 docker stats 检查容器资源占用,避免 OOM- 数据安全:使用 docker cp 和 docker volume 管理数据,避免数据丢失- 网络隔离:通过自定义网络实现容器间安全通信,避免使用 --link 旧方式- 定期清理:养成 docker system prune 的运维习惯,释放磁盘空间掌握这些命令后,你将能更从容地应对从本地开发到线上运维的各类容器化挑战。记住,Docker 容器操作的核心在于理解容器的无状态特性,将持久化数据与容器解耦,这样才能发挥出容器编排的最大价值。
更多推荐
所有评论(0)