Dockerfile介绍
Dockerfile由一行行命令语句组成,并且支持用“#”开头作为注释,一般的,Dockerfile分为四部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行的指令
Dockerfile是用来构建Docker镜像的构建文件,简单来说,Dockerfile就是把我们安装环境的每个步骤和指令,放到一个文件,最后一键执行,最后做成一个你想要的环境。
Docker构建三步曲:
编写dockerfile文件
docker build 构建image镜像文件
docker run 运行容器
Dockerfile相关指令
- FORM 基础镜像,当前镜像是基于哪个镜像的。第一条指定必须为FROM指令,如果同一个Dockerfile中创建多个镜像时,使用多个FROM指令
格式:
FROM <image> 或 FROM <image>:<tag>
- MAINTAINER 镜像维护者的姓名和邮箱地址
格式:
MAINTAINER <name>
- RUN 容器构建时需要执行的命令
格式:
RUN <command>
RUN ["executable","param1","param2"]
前者将在shell终端中运行命令,后者则使用exec执行。
- CMD 指定一个容器启动时要运行的命令,dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
格式:
CMD ["executable","param1","param2"] 使用exec执行
CMD command param1 prarm 在/bin/sh中执行,提供给需要交互的应用
CMD ["prarm1","param2"] 提供给ENTRYPOINT的默认参数
- EXPOSE 当前容器对外暴露的端口号
格式:
EXPOSE <port> [<port>...]
- ENV 用来在构建镜像过程中设置环境变量
格式:
ENV <key> <value>
- ADD 将宿主机目录下的文件拷贝到镜像里面并且ADD命令会自动处理URL和解压tar压缩包
格式:
ADD <src> <dest>
- COPY 类似ADD,拷贝文件和目录到镜像中,但是它只是拷贝,不会自动处理URL和解压tar压缩包
格式:
COPY <src> <dest>
- ENTRYPOINT 指定一个容器启动时要运行的命令,并且不可被docker run 提供的参数覆盖。 每个Dockerfile中只能有一个ENTRYPOINT,当指定多个ENTRYPOINT时,只有最后一个生效
格式:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOING command param1 param2 (shell中执行)
- VOLUME 容器数据卷,用于数据保存和持久化工作
格式:
VOLUME ["/data"]
- USER 指定运行容器时的用户名或UID,后续的RUN也会使用指定用户
格式:
USER daemon
- WORKDIR 指定在容器创建后,终端默认登录进来工作目录,一个落脚点
格式:
WORKDIR /path/to/workdir
- ONBUILD 当构建一个被继承的dockerfile时运行命令,父镜像在被子及子继承后,父镜像的onbuild被触发
格式:
ONBUILD [INSTRUCTION]
Dockerfile编写
在本地新建一个Dockerfile文件(没有后缀),用“#”表示注释。该镜像文件是构建一个虚拟的python3.6的环境,安装好所需要的依赖包,这样自动化代码就可以移到其他环境也能运行。
# 基于3.6.10镜像
FROM python:3.6.10
MAINTAINER huangluping <1784146178@qq.com>
# 更新pip
RUN pip install --upgrade pip --index-url https://pypi.douban.com/simple
# 工作目录
WORKDIR /workcode
# 添加文件
ADD . /workcode
# pip安装依赖包
RUN pip install -r requirements.txt --index-url https://pypi.douban.com/simple
# requirements.txt文件是python的相关依赖包,可以通过freeze命令生成:pip3 freeze >requirements.txt
# 默认传递参数
ENTRYPOINT ["pytest"]
# 默认显示help帮助信息
CMD ["--help"]
在服务器新建一个目录,用于存放Dockerfile和requirements.txt,再将这两个文件传到服务器
build构建镜像文件
docker build 命令用于使用Dockerfile创建镜像,参数说明:
- -f:指定要使用的Dockerfile路径
- –pull:尝试去更新镜像的新版本
- –quiet,-q:安静模式,成功后只输出镜像ID
- –tag, -t:镜像的名字及标签,通常name:tag或者name
docker build -t pytest:study .
’ . ’ 是 Dockerfile 所在的路径(当前目录)也可以替换为一个具体的 Dockerfile 的路径。
运行完成后,通过docker images
查看生成的镜像
run运行容器
将需要运行的测试代码传到服务器,并解压
输入指令:docker run -it --rm -v "$PWD":/workcode pytest:study test_api -s
参数说明:
- -it -t让docker分配一个伪终端并绑定在容器的标准输入上,-i则让容器的标准输入保持打开
- –rm 容器退出时,自动清除容器,–rm选项不能与-d同时使用。
- -v 将容器的工作目录/workcode挂载到宿主机的$PWD,也就当前目录
- pytest:study 容器名称和tag名称
- test_api 需要执行的测试脚本