【docker】如何编写dockerfile文件,构建docker镜像

本文详细介绍了Docker镜像的概念、结构,重点讲解了Dockerfile中的关键构建指令,如FROM、CMD、COPY、RUN等,并给出了一个实际的Dockerfile示例,以及如何在Linux终端中构建Docker镜像。

一、docker 镜像与 dockerfile

1.1 什么是Docker镜像

Docker镜像是一个打包好的文件,里面包含了我们要运行的命令、应用程序,以及命令或者应用程序运行所需要的运行环境,例如配置文件,环境变量,文件系统等。

1.2 Docker 镜像的结构

  • 镜像结构分层(layer),镜像的层可以被复用,避免文件存储上的冗余,节省磁盘空间,可以使用 docker inspect 命令查看镜像的分层情况;

在这里插入图片描述

  • dockerfile中每个指令都会产生一个镜像层,所以在编写 dockerfile 时尽量精简合并指令,避免生成的镜像过于冗余臃肿;
  • Docker镜像的构建是在 Docker Daemon 上完成的,运行 docker build 命令后,Docker客户端会把指令信息和构建上下文内的所有文件打包上传到 Docker Daemon 中进行构建。

二、dockerfile 中常用的构建指令

  • FROM: 指定构建镜像时使用的基础镜像;
  • CMD: 指定启动容器时执行的命令;
  • COPY:将指定文件/文件夹复制到指定目录;
  • RUN: 用于指定执行Linux命令或者脚本;
  • ARG: 创建变量,创建的变量仅在镜像构建过程中可用;
  • ENV: 创建环境变量,创建的变量不仅在镜像构建过程中可用,在容器的运行期间也可用;
  • EXPOSE:声明容器对外暴露的端口号;
  • MAINTAINER: 指定镜像维护者信息,姓名、邮箱等;
  • WORKDIR:指定在创建容器后,从宿主机进入容器时的默认目录;

三、dockerfile 内容示例

# 使用 ubuntu 镜像作为基础镜像
FROM ubuntu:20.04

# 设置工作目录
WORKDIR /home/workspace

# 指定镜像维护者信息
MAINTAINER fuyou<2394xxxx@qq.com>
 
# 复制应用程序到镜像中
COPY run.py /home/workspace
 
# 安装应用程序所需的依赖
RUN apt update && apt upgrade && apt install python && apt install vim
 
# 设置环境变量
ENV APP_ENV production
 
# 容器启动时运行的命令
CMD ["python", "run.py"]

EXPOSE 8088

四、构建 docker 镜像

在安装了docker运行环境的Linux终端中,执行命令docker build -f dockerfile.txt -t test-app:1.0.0 /home/lighthouse/docker

docker build: 构建docker镜像指令主体;
-f ${filename}: 指定构建镜像时使用的dockerfile文件。可忽略不写,此时默认使用名为Dockerfile的dockerfile文件;
-t ${imageName}: 指定构建产生的镜像名称及版本,如果不指定版本号,则版本号默认为latest;
/home/workspace : 构建上下文,用于存放构建docker镜像时所需要的所有文件等资源,在镜像构建过程中会把构建上下文中所有的文件或者目录都进行打包。所以指定的构建上下文不用存放其他的文件等资源。

要使用 Docker Desktop 根据 `Dockerfile` 构建镜像,可以按照以下步骤操作: 1. **准备 Dockerfile** 确保在项目目录中已经存在一个 `Dockerfile`,例如以下是一个简单的示例,用于构建一个基于 Alpine 镜像并运行 `bc` 基准测试的脚本: ```dockerfile # A simple /bin/sh CPU benchmark using bc on alpine image FROM alpine RUN apk update && apk add bc WORKDIR '/payload' ADD benchmark_bc.sh . CMD ["sh", "benchmark_bc.sh"] ``` 2. **打开 Docker Desktop** 启动 Docker Desktop 应用程序,并确保 Docker 引擎正在运行。 3. **使用终端构建镜像** 在包含 `Dockerfile` 的目录中打开终端(或 PowerShell),然后运行以下命令来构建镜像: ```bash docker build -t your-image-name . ``` 其中 `your-image-name` 是你希望为镜像指定的名称。构建完成后,可以在 Docker Desktop 的 **Images** 选项卡中看到新构建镜像。 4. **运行容器** 构建完成后,可以使用以下命令运行容器: ```bash docker run -it your-image-name ``` 如果需要将容器映射到特定端口或挂载卷,可以使用 `-p` 和 `-v` 参数进行配置,例如: ```bash docker run -itd --name your-container-name -p 8080:8080 -v /host/path:/container/path your-image-name ``` 5. **验证构建结果** 在 Docker Desktop 的 **Containers** 选项卡中,可以看到正在运行的容器。可以点击进入容器的日志或终端,验证应用是否正常运行。 ### 使用 Docker Desktop 图形界面构建镜像 1. **导入项目** 在 Docker Desktop 中,可以通过 **Add Kubernetes resources** 或直接在本地文件系统中定位到包含 `Dockerfile` 的目录。 2. **构建镜像** 在 Docker Desktop 的 **Images** 选项卡中,点击 **Build Image** 按钮,选择包含 `Dockerfile` 的目录,并输入镜像名称,然后点击构建。 3. **查看构建日志** 构建过程中,Docker Desktop 会显示构建日志,确保没有错误。 4. **运行容器** 构建完成后,可以在 **Images** 列表中找到镜像,点击 **Run** 按钮来启动容器,并根据需要配置端口映射、环境变量等。 ### 注意事项 - 确保 Docker Desktop 已启用 **WSL2**(在 Windows 环境下),以便更好地支持 Linux 容器。 - 如果遇到网络问题,可以检查 Docker 的代理设置或尝试使用 `--network host` 参数。 - 如果需要构建多阶段镜像,确保 `Dockerfile` 中的语法正确,并且 Docker Desktop 支持多阶段构建功能[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值