Dockerfile的使用

Dockerfile是一个用来构建镜像的文本文件,包含了一条条构建镜像所需的指令和说明

1. 基本语法

1)FROM:指定基础镜像

语法:FROM <image>或者FROM <image>:<tag>

示例:

FROM ubuntu:18.04

第一条指令必须为FROM指令。并且,如果同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令

2)RUN:想在制作过程中运行哪些命令,在命令前面加上RUN即可

语法:RUN或者RUN ["executable","param1","param2"]

前者将在 终端中运行 ,即/bin/sh -c;后者使用exec执行。每条RUN指令将在当前镜像基础上执行指令 ,并提交为新的镜像。当命令较长时,可以使用\来换行。

示例:

RUN mkdir -p ~/.pip/

3)CMD:指定容器启动时执行的命令

语法:

支持三种格式:

CMD ["executable","param1","param2"] #使用exec执行,推荐的方式 CMD command param1 param2 #在/bin/sh中执行,提供给需要交互的应用 CMD ["param1","param2"] #提供给ENTRYPOINT的默认参数

指定启动窗口时执行的命令,每个Dockerfile只能有一条CMD命令。如果指定了多条,只有最后一条会被执行。如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令。

示例:

CMD ["daphne","-b","0.0.0.0","-p","8000","Django_project.asgi:application"]

4) ENV:指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持

示例:

ENV DEBIAN_FRONTEND noninteractive  #静默安装

5)ADD:COPY文件,会自动解压,该命令将复制指定的文件到容器中。可以是Dockerfile所在目录的一个相对路径,一个url,也可以是一个tar文件(自动解压为目录)。ADD是增强版的COPY。

示例:

ADD aliyun-epel.repo /etc/yum.repos.d/epel.repo

6)COPY:与ADD类似,复制本地主机的到容器中,目标路径不存在时,会自动创建。如果不需要解压,优先使用COPY命令,效率更高,更节约资源。

7)WORKDIR:设置当前工作目录

为后续的RUN、CMD等指令配置容器中的工作目录。可以使用多个WORKDIR指令。

示例:

WORKDIR /app

COPY . .

2. 使用Dockerfile编译镜像

cd path/to/Dockerfile  # 切换到dockerfile所在路径
docker build -t harbor.company.com/repo1/dev:tag .  # harbor.company.com为harbor平台,repo1为harbor仓库名,这样编译好的镜像可以直接推送到harbor仓库
docker push harbor.company.com/repo1/dev:tag  # 推送镜像

3. Dockerfile示例

FROM ubuntu:18.04

# updata apt source to tuna source
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse" > /etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse" >> /etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list

# Update pip source to tuna
RUN mkdir -p ~/.pip/ && \
    echo "[global]" > ~/.pip/pip.conf && \
    echo "index-url = https://pypi.tuna.tsinghua.edu.cn/simple" >> ~/.pip/pip.conf && \
    echo "[install]" >> ~/.pip/pip.conf && \
    echo "trusted-host = https://pypi.tuna.tsinghua.edu.cn" >> ~/.pip/pip.conf

# configure timezone
#RUN echo Asia/Shanghai > /etc/timezone
RUN apt update \
  && DEBIAN_FRONTEND=noninteractive apt install -y tzdata --no-install-recommends \
  && echo "Asia/Shanghai" > /etc/timezone  \
  && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
  && dpkg-reconfigure -f noninteractive tzdata

# install 
RUN apt update && DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends \
        git make=4.2.1-1.2 g++=4:9.3.0-1ubuntu2 file python3.8 bison=2:3.5.1+dfsg-1 flex=2.6.4-6.2 openssl \
        libssl-dev bc=1.07.1-2build1 libarchive-zip-perl=1.67-2 \
        bsdmainutils=11.1.2ubuntu3 wget=1.20.3-1ubuntu2 cpio=2.13+dfsg-2ubuntu0.3 \
        unzip=6.0-25ubuntu1.1 rsync=3.1.3-8ubuntu0.5 patch=2.7.6-6 device-tree-compiler=1.5.1-1 && \
        ln -s /usr/bin/python3.8 /usr/bin/python3 && \
    apt clean

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值