Dockerfile使用
什么是 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 会扫描上下文,有大文件会很慢