如何编写高效Dockerfile示例?

Docker核心概念

  1. 镜像(Image)

    只读模板,包含应用运行环境和代码(如Ubuntu+Python环境)

  2. 容器(Container)

    镜像的运行实例,具有独立文件系统和网络

  3. 仓库(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

安全最佳实践

  1. 非root用户运行容器
    FROM alpine
    RUN adduser -D appuser && chown -R appuser /app
    USER appuser  # 在Dockerfile中切换用户
  2. 定期更新镜像
    docker scan nginx:1.23  # 扫描镜像漏洞
    docker pull nginx:latest  # 获取安全更新
  3. 限制资源
    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"  # 检查退出代码

引用说明 参考:

  1. Docker官方文档(docs.docker.com)
  2. CIS Docker Benchmark安全标准
  3. 《Docker Deep Dive》技术专著(Nigel Poulton著)
  4. 云原生计算基金会(CNCF)容器最佳实践白皮书

更新日期:2025年10月
技术验证环境:Docker Engine 24.0.6, Linux Kernel 5.15+

掌握这些命令后,建议通过Docker官方实验室进行实操练习,遇到复杂场景时,优先查阅官方文档确保操作准确性。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6002.html

(0)
酷番叔酷番叔
上一篇 2025年7月1日 19:16
下一篇 2025年7月1日 19:27

相关推荐

  • ASP为何无法连接数据库?

    在网站开发过程中,ASP(Active Server Pages)作为一种经典的动态网页技术,常用于构建基于数据库的Web应用,开发者经常会遇到“ASP连接不了数据库”的问题,这不仅影响开发进度,还可能导致线上服务中断,本文将系统分析该问题的常见原因,并提供详细的排查步骤和解决方案,帮助开发者快速定位并解决问题……

    2025年11月22日
    12700
  • ASP链接是什么?

    在Web开发领域,ASP(Active Server Pages)作为一种成熟的服务器端脚本技术,常用于构建动态网页和应用程序,ASP链接是实现数据交互和页面导航的核心功能,本文将围绕ASP链接的技术原理、实现方式及最佳实践展开详细说明,ASP链接的基本概念ASP链接主要指通过ASP代码实现的超链接或数据库连接……

    2025年11月22日
    16100
  • 国内知名域名注册服务商盘点,你选对了吗?国内域名注册商哪家好

    国内主流域名注册服务商包括阿里云、腾讯云、华为云、西部数码及新网,其中阿里云凭借市场份额与技术生态占据首位,腾讯云以用户体验见长,西部数码则在中小站长群体中拥有深厚积淀,选择域名注册商并非简单的比价行为,而是关乎网站长期稳定运行、ICP备案效率及SEO基础建设的战略决策,2026年的互联网环境下,域名管理已深度……

    2026年5月17日
    14500
  • Windows命令行如何快速切换磁盘?

    命令提示符(CMD)中的切换方法直接切换驱动器输入目标盘符 + 冒号(),按回车即可:D: // 切换到D盘E: // 切换到E盘示例:C:\Users> D:D:\> // 已成功切换到D盘根目录切换驱动器并同时进入目录分两步操作:先切换驱动器,再用cd进入目录:D: // 先切换到D盘cd \P……

    2025年7月16日
    24100
  • 语音识别技术错误点何在?语音识别技术哪些错误值得注意?

    认为其已具备完全的人类情感理解能力,或在无噪声环境下也能保持100%的绝对准确率,且无需任何后期人工校对即可直接用于法律或医疗等高风险场景,语音识别(ASR)作为人工智能的基石,在2026年已从单纯的“语音转文字”进化为多模态交互的核心入口,公众认知中仍存在诸多误区,本文将基于行业最新实践,拆解常见错误认知,揭……

    2026年6月15日
    3900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信