Dockerfile使用

发布时间 2023-11-28 18:39:06作者: 貌似大家

什么是 Dockerfile?

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

命令

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。

可以放在一起的命令尽量放在一起。

FROM

FROM nginx # FROM 基础镜像 本地没有从默认仓库拉取 定制的镜像都是基于 FROM 的镜像

RUN

#shell 格式
RUN python app.py # RUN 执行一条命令

# exec 格式:
# RUN ["可执行文件", "参数1", "参数2"]
RUN ["python", "app.py"]

命令简化

# 简化前
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

# 简化后
RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

LABEL

添加镜像的元数据,使用键值对的形式。

ADD/COPY

COPY node_modules ./node_modules # 直接. 是将目录下所有文件复制 ADD 也是这样 

ADD node_modules.tar.gz . # 将文件、目录或远程URL复制到镜像中。 ADD 复制的时候会自动解压文件

复制目录时注意

后面直接 . 是将目录下所有文件复制 COPY ADD 都是是这样

CMD/ENTRYPOINT/SHELL

SHELL ["/bin/bash", "-c"]  # 覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。

 
ENTRYPOINT   ["nginx", "-c"] # 定参 # 设置容器创建时的主要命令。(不可被覆盖)

CMD  ["/etc/nginx/nginx.conf"] # 变参 # 指定容器创建时的默认命令。(可以被覆盖)



WORKDIR/VOLUME/EXPOSE

WORKDIR # 设置后续指令的工作目录。
EXPOSE # 声明容器运行时监听的特定网络端口。
VOLUME # 为容器创建挂载点或声明卷。

WORKDIR 不存在的目录会被创建 会比 RUN cd 更好

docker build -t runoob/ubuntu:v1 . # 默认使用当前目录下的dockerfile 文件 
# -f 指定 dockerfile

python 项目构建

# cpu 版本不需要cuda 套件
FROM ubuntu 
LABEL version = "18.04"
LABEL description = "基础环境"

# 更新源
# ADD installation/sources.list /etc/apt/



# 工作主目录
WORKDIR /home/forecaest_new

# 0、初始化基础环境、更新apt基础工具
RUN apt-get update --fix-missing -o Acquire::http::No-Cache=True \
    && apt-get install -y vim apt-transport-https \
	&& apt-get -y -q --no-install-recommends  install apt-utils gcc curl bzip2 libgl1-mesa-glx libglib2.0-dev wget lsof libpython3-dev

# 设置显示中文字体
ENV LANG C.UTF-8

# 安装工具
COPY installation_tool .

# 1 安装 安装conda 基础环境
RUN bash Miniconda3-py37_4.8.3-Linux-x86_64.sh -b -p /root/anaconda3 \
    && bash -c "source /root/anaconda3/etc/profile.d/conda.sh" \
    && bash init_conda.sh \
    && apt-get install libx11-6\
    && ln /root/anaconda3/bin/pip /usr/local/bin/pip \
    && pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn \
    && rm init_conda.sh \
    && rm Miniconda3-py37_4.8.3-Linux-x86_64.sh \
    && rm requirements.txt 
    
ENV export LD_LIBRARY_PATH=~/anaconda3/lib

# 复制代码
COPY app_predict ./app_predict
COPY packages ./packages
COPY uni_utils ./uni_utils

# 更改目录
WORKDIR /home/forecaest_new/app_predict

# 编译 
RUN python compile

# 启动
CMD ["/root/anaconda3/bin/python","app_predict_server.py"] 

构建镜像

docker build -t nginx:v3 . # 最后的 . 代表本次执行的上下文路径 docker 会扫描上下文,有大文件会很慢