Docker核心概念
- 镜像(Image)
只读模板,包含应用运行环境和代码(如Ubuntu+Python环境)
- 容器(Container)
镜像的运行实例,具有独立文件系统和网络
- 仓库(Registry)
存储镜像的平台(如Docker Hub)
镜像管理命令
▶ 拉取镜像
docker pull nginx:1.23 # 从仓库下载指定版本镜像
▶ 查看本地镜像
docker images # 显示镜像ID、标签、大小 REPOSITORY TAG IMAGE ID CREATED SIZE nginx 1.23 a8758716bb6a 2 weeks ago 187MB
▶ 构建镜像
RUN apk add --no-cache python3 COPY app.py /app/ CMD ["python3", "/app/app.py"]
docker build -t my-app:v1 . # -t指定镜像名称,.表示当前目录
▶ 删除镜像
docker rmi a8758716bb6a # 通过IMAGE ID删除 docker image prune # 清理未被使用的镜像
容器生命周期管理
▶ 启动容器
docker run -d -p 8080:80 --name my-nginx nginx:1.23
-d
:后台运行-p 8080:80
:主机8080端口映射容器80端口--name
:指定容器名称
▶ 查看运行中的容器
docker ps # 常用参数 -a(显示所有容器) -q(仅显示ID) CONTAINER ID IMAGE STATUS NAMES c3f279d17e0a nginx:1.23 Up 2 minutes my-nginx
▶ 进入容器终端
docker exec -it my-nginx /bin/bash # -it进入交互模式
▶ 停止/删除容器
docker stop my-nginx # 停止运行 docker start my-nginx # 重新启动 docker rm my-nginx # 删除已停止的容器 docker rm -f my-nginx # 强制删除运行中的容器
数据持久化与网络
▶ 挂载数据卷
docker run -v /host/data:/container/data nginx
- 将主机目录
/host/data
映射到容器内部
▶ 创建网络
docker network create my-net docker run --network=my-net --name app1 my-app docker run --network=my-net --name app2 my-app # 同一网络内容器互通
日志与监控
▶ 查看日志
docker logs -f --tail 100 my-nginx # 实时查看最后100行日志
▶ 资源监控
docker stats # 实时显示CPU/内存占用 CONTAINER ID NAME CPU % MEM USAGE / LIMIT c3f279d17e0a my-nginx 0.01% 5MiB / 1GiB
实战示例:部署Web应用
# 1. 拉取镜像 docker pull mysql:8.0 docker pull wordpress:latest # 2. 创建网络 docker network create wp-net # 3. 启动MySQL docker run -d --name mysql-db \ -e MYSQL_ROOT_PASSWORD=secret \ -v mysql_data:/var/lib/mysql \ --network wp-net \ mysql:8.0 # 4. 启动WordPress docker run -d --name my-blog \ -p 80:80 \ -e WORDPRESS_DB_HOST=mysql-db \ -e WORDPRESS_DB_USER=root \ -e WORDPRESS_DB_PASSWORD=secret \ --network wp-net \ wordpress
安全最佳实践
- 非root用户运行容器
FROM alpine RUN adduser -D appuser && chown -R appuser /app USER appuser # 在Dockerfile中切换用户
- 定期更新镜像
docker scan nginx:1.23 # 扫描镜像漏洞 docker pull nginx:latest # 获取安全更新
- 限制资源
docker run -d --memory=512m --cpus=1.5 my-app
常见问题排查
- 端口冲突:
Error: Port is already allocated
使用docker ps
查找占用端口的容器,修改映射端口或停止冲突容器 - 容器启动失败:
docker logs [容器ID] # 查看错误日志 docker inspect [容器ID] | grep "ExitCode" # 检查退出代码
引用说明 参考:
- Docker官方文档(docs.docker.com)
- CIS Docker Benchmark安全标准
- 《Docker Deep Dive》技术专著(Nigel Poulton著)
- 云原生计算基金会(CNCF)容器最佳实践白皮书
更新日期:2025年10月
技术验证环境:Docker Engine 24.0.6, Linux Kernel 5.15+
掌握这些命令后,建议通过Docker官方实验室进行实操练习,遇到复杂场景时,优先查阅官方文档确保操作准确性。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6002.html