2025-02-05
编程
00
请注意,本文编写于 82 天前,最后修改于 54 天前,其中某些信息可能已经过时。

目录

创建打包文件夹
dockerfile参数详解
FROM命令详解
RUN命令详解
shell 形式
exec 形式
ADD命令详解
ENV命令详解
单个环境变量
多个环境变量
环境变量替换
容器内使用
COPY命令详解
WORKDIR命令详解
USER命令详解
EXPOSE命令详解
CMD命令详解
dockerfile打包
dockerfile模板

使用Dockerfile来创建快速镜像

创建打包文件夹

首先创建一个Dockerfile,包含一些创建镜像的指令;使用docker build来创建新的像。 创建一个目录和一个Dockerfile,该目录包含你的代码和需要的文件。

. ├── client.py ├── Dockerfile ├── README.md └── service

dockerfile参数详解

FROM FROOM 指定基础镜像,必须为第一个命令 RUN 构建镜像时运行的命令 ADD 添加文件到容器,tar类型文件会自动解压,可以访问网络资源,如wget等 ENV 设置环境变量 COPY 功能类似ADD,但是不会自动解压文件,也不能访问网络资源 WORKDIR 工作目录,类似于cd命令,chdir() USER 指定容器运行时的用户名或UID EXPOSE 暴露应用程序运行所需的端口 CMD 构建镜像后调用,也是在容器启动时才调用

FROM命令详解

基本语法: FROM <image>[:<tag>]

image 表示你想要使用的镜像名称。
tag(可选)是特定版本的标识符,默认为 latest,即如果没有指定标签,则会使用最新版的基础镜像。

RUN命令详解

一般是为了安装一些容器中安装所需安装包和依赖

基本语法: RUN <command>

shell 形式

command 命令将在一个 shell 中运行,默认情况下是 /bin/sh -c 在 Linux 或者 cmd /S /C 在 Windows。可以使用链式命令

RUN apt-get update && apt-get install -y \ package-bar

exec 形式

RUN ["executable", "param1", "param2"]

ADD命令详解

基本语法: ADD <src>... <dest> 或者 json格式 ADD ["<src>",... "<dest>"]

src 表示源文件或目录,可以是相对路径(相对于构建上下文),也可以是绝对路径,甚至是一个远程文件 URL。
dest 目标路径是指定在容器内部的路径,可以是绝对路径,也可以是相对于 WORKDIR 的相对路径。

ADD ./local-directory /app/data

ENV命令详解

基本语法: ENV <key>=<value>

单个环境变量

ENV MY_NAME="John Doe"

多个环境变量

ENV MY_NAME="John Doe" MY_YEAR="Ten Year Old"

环境变量替换

ENV SOURCE_DIR=/path/to/source COPY ${SOURCE_DIR} /app/

容器内使用

docker run --rm myimage printenv MY_NAME

COPY命令详解

基本语法: COPY <src>... <dest> 或者 json格式 COPY ["<src>",... "<dest>"]

src 表示源文件或目录路径,可以是相对路径(相对于 Dockerfile 所在的目录),也可以是绝对路径。
dest 表示目标路径,指的是容器内部的位置。它可以是绝对路径,也可以是相对于 WORKDIR 的相对路径。

COPY ./local-directory /app/data

WORKDIR命令详解

基本语法: WORKDIR <path>

path 是容器内部的工作目录路径。它可以是相对路径或绝对路径。如果是相对路径,则它是相对于上一个 WORKDIR 指令设置的路径

USER命令详解

基本语法: USER <user>[:<group>] 或者 基本语法: USER <UID>[:<GID>]

user 可以是用户名或用户ID(UID)。
group 可选,可以是组名或组ID(GID),当指定组时需要用冒号 : 分隔用户名和组名。

EXPOSE命令详解

EXPOSE <port> [<port>/<protocol>...]

port:可以是一个或多个端口号。
protocol:可选参数,指定协议(TCP 或 UDP)。默认情况下,Docker 使用 TCP 协议。

EXPOSE 80 EXPOSE 80/tcp EXPOSE 53/udp EXPOSE 80 443 EXPOSE 80/tcp 443/tcp

CMD命令详解

格式 CMD "python" "/yolov5ship/track_vv.py" 传入多个参数 CMD ["executable","param1","param2"] CMD ["python","/yolov5ship/track_vv.py","--port=5000"] CMD ["param1","param2"] CMD command param1 param2 执行多个命令 1、CMD command1&&command2&&command3 2、CMD command1;command2;command3

dockerfile打包

在创建的文件夹目录下运行打包程序

docker build -t hello-docker-image:V1.0 .

-t 参数指定构建成后,镜像的仓库、标签等

dockerfile模板

# FROM 指定基础镜像,必须为第一个命令 FROM anibali/pytorch:1.8.1-cuda11.1-ubuntu20.04 # 设置时区 ENV TZ=UTC RUN sudo ln -snf /usr/share/zoneinfo/$TZ /etc/localtime # shell执行(内部执行) RUN sudo apt-get update \ && sudo apt-get install -y libgl1-mesa-glx libgtk2.0-0 libsm6 libxext6 \ && sudo rm -rf /var/lib/apt/lists/* # 安装python程序运行程序的所有依赖 RUN python -m pip install --upgrade --no-cache-dir --ignore-installed -i https://mirrors.aliyun.com/pypi/simple \ flask==0.12.2 \ RUN python -m pip install --upgrade --no-cache-dir --ignore-installed --no-deps -i https://mirrors.aliyun.com/pypi/simple timm==0.3.2 #指定容器运行时的用户名或UID USER root #设置环境变量 ENV WORKPATH="/workspace" ENV DEVICE="cuda:0" ENV LC_ALL=C.UTF-8 \ LANG=C.UTF-8 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' > /etc/timezone # 创建工作目录 RUN sudo mkdir -p ${WORKPATH} # 将当前路径的文件复制到容器内对应的目录下 COPY ./ ${WORKPATH} # 切换到工作目录 WORKDIR ${WORKPATH} # 进入服务代码所在的路径 WORKDIR ${WORKPATH}/service # 构建镜像后调用,也是在容器启动时才调用,即通过gunicorn启动服务 CMD gunicorn -c gunicorn.conf.py --log-config log.conf app:app

文章如有错误,还望留言指正

参考资料
特殊原因,不便展示,请见谅