Dockerfile
Docker 通过读取 Dockerfile 中的指令来构建镜像。Dockerfile 是一个文本文件,其中包含构建源代码的指令。
以下是最常见的指令类型:
操作说明 | 描述 |
---|---|
FROM <image> |
为您的图像定义一个基础。 |
RUN <command> |
在当前图像之上的新层中执行任何命令并提交结果。RUN 还具有用于运行命令的 shell 形式。 |
WORKDIR <directory> |
为Dockerfile 中其后的任何RUN 、CMD 、ENTRYPOINT 、COPY 和指令设置工作目录。ADD |
COPY <src> <dest> |
<src> 从路径中的容器文件系统复制新文件或目录并将其添加到其中<dest> 。src在主机,dest在容器 |
CMD <command> |
允许您定义基于此映像启动容器后运行的默认程序。每个 Dockerfile 只有一个CMD ,当存在多个时,仅CMD 考虑最后一个实例。 |
您可以使用命令的标志<something>.Dockerfile
指定 Dockerfile 文件名。
以下 Dockerfile 创建一个容器映像,其中安装了所有依赖项并自动启动您的应用程序。
# syntax=docker/dockerfile:1 FROM ubuntu:22.04 # install app dependencies RUN apt-get update && apt-get install -y python3 python3-pip RUN pip install flask==3.0.* # install app COPY hello.py / # final configuration ENV FLASK_APP=hello EXPOSE 8000 #此镜像暴露的端口号 CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] #CMD
指令设置从镜像运行容器时要执行的命令。
#CMD ["executable","param1","param2"]
(执行形式),"executable":可执行文件,如果省略此参数,则取变量ENTRYPOINT的值。
exec 形式,这是首选形式:
ENTRYPOINT ["executable", "param1", "param2"]
壳体形式:
ENTRYPOINT command param1 param2
Building
docker build -t test:latest . #-t指示镜像名称和标签 .表示 当前目录
docker build -f- PATH # 标准输入构建
tar czf foo.tar.gz *
$ docker build - < foo.tar.gz #tar包构建
$docker build --file test.Dockerfile - < foo.tar.gz #tar包构建,指定dockerfile文件名
$docker build https://github.com/user/myrepo.git #远程构建
docker run -p 127.0.0.1:8000:8000 test:latest
多阶段构建
标签相当于注释,可以在构建文件中以键值对的形式存在。