06、docker学习之Dockerfile

Dockerfile

简介

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
简单来说,Dockerfile就是把我们安装环境的每个步骤和指令,放到一个文件,最后一键执行,最后做成一个你想要的环境。

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

Docker构建三步曲:

  • 编写dockerfile文件
  • docker build 构建image镜像文件
  • docker run 运行容器

和cmake有点类似

 

Dockerfile相关命令

Dockerfile 是一个包含创建镜像所有命令的文本文件,通过docker build命令可以根据 Dockerfile 的内容构建镜像,
在介绍如何构建之前先介绍下 Dockerfile 的基本语法结构,Dockerfile 有以下命令选:

  • FROM 基础镜像,当前新镜像是基于哪个镜像的
  • MAINTAINER 镜像维护者的姓名和邮箱地址
  • RUN 容器构建时需要运行的命令
  • CMD 指定一个容器启动时要运行的命令。dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换。
  • EXPOSE 当前容器对外暴露的端口号
  • ENV 用来在构建镜像过程中设置环境变量
  • ADD 将宿主机目录下的文件拷贝到镜像里面并且ADD命令会自动处理URL和解压tar压缩包
  • COPY COPY:类似ADD,拷贝文件和目录到镜像中,但是它只是拷贝,不会自动处理URL和解压tar压缩包。
  • ENTRYPOINT 指定一个容器启动时要运行的命令。ENTRYPOIT的目的和CMD一样,都是在指定容器启动程序及参数。
  • VOLUME 容器数据卷,用于数据保存和持久化工作
  • USER 指定运行容器时的用户名或UID,后续的 RUN 也会使用指定用户
  • WORKDIR 指定在容器创建后,终端默认登录进来工作目录,一个落脚点
  • ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后,父镜像的onbuild被触发。

 

Dockerfile编写

在当前目录新建一个文件夹docker-run, cd进入到文件夹,touch新建一个Dockerfile,内容如下

# 基于python3.6.8镜像
FROM python:3.6.8
# 更新pip
RUN pip install --upgrade pip --index-url https://pypi.douban.com/simple

# 工作目录
WORKDIR /code
ADD . /code

# pip安装依赖包
RUN pip install -r requirements.txt --index-url https://pypi.douban.com/simple

# 传递参数
ENTRYPOINT ["pytest"]

# 默认显示help帮助信息
CMD ["--help"]

requirements.txt是python的相关依赖包, 可以通过freeze命令生成或者手动加

 

build构建镜像文件

docker build 命令用于使用 Dockerfile 创建镜像。OPTIONS说明:-f :指定要使用的Dockerfile路径;

  • --pull :尝试去更新镜像的新版本;
  • --quiet, -q :安静模式,成功后只输出镜像 ID;
  • --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
  • -t参数设置镜像名称yoyo_pytes和tag标签名称v1,注意最后面有个点.

1.docker build -t tp_pytest:v1 .

2.查看镜像

docker images

 

run运行容器

1.当前目录下新建test.py

import pytest

def test_one():
    print("正在执行----test_one")
    x = "this"
    assert 'h' in x

def test_two():
    print("正在执行----test_two")
    x = "hello"
    assert x

def test_three():
    print("正在执行----test_three")
    a = "hello"
    b = "hello world"
    assert a in b

if __name__ == "__main__":
    pytest.main(["-s", "test_h.py"])

2.使用docker run运行容器

  • -it -t让docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开.
  • --rm 容器退出时,自动清除容器。 --rm选项不能与-d同时使用
  • -v 将容器的工作目录/code挂载到宿主机的$PWD,也就是当前目录
  • yoyo_pytest:v1 容器名称和tag名称
  • test_h.py 后面跟着需要执行的脚本名称

docker run -it --rm -v "$PWD":/code tp_pytest:v1 test_h.py  -s

posted @ 2020-06-05 11:41  tp2  阅读(155)  评论(0)    收藏  举报