前言

如果我们已经安装了一个python3的环境,如果另一台机器也需要安装同样的环境又要敲一遍,很麻烦,这里可以配置Dockerfile文件,让其自动安装,类似shell脚本

Dockerfile编写

在当前目录新建一个文件夹docker-run, cd进入到文件夹,touch新建一个Dockerfile,然后vi打开文件,开始编辑

[root@jkc ~]# mkdir docker-run
[root@jkc ~]# cd docker-run/
[root@jkc docker-run]# touch Dockerfile
[root@jkc docker-run]# vi Dockerfile

编辑内容如下:

# 1.基于python3.6.8镜像
FROM python:3.6.8 # 2.镜像维护者的姓名和邮箱地址
MAINTAINER jkc <1044500650@qq.com> # 3.更新pip
RUN pip install --upgrade pip --index-url https://pypi.douban.com/simple # 4.指定当前工作目i录
WORKDIR /code # 5.将当年目录文件夹下的所有文件拷贝到code目录
COPY . . # 6.安装第三方包
RUN pip install -r requirements.txt --index-url https://pypi.douban.com/simple # 7.传递参数
ENTRYPOINT ["pytest"] # 8.默认显示帮助信息
CMD ["--help"]

Dockerfile配置详细解释

  • FROM:先拉取python3.6.8作为基础镜像,然后在上面修改
  • MAINTAINER:填写镜像维护者的姓名和邮箱地址
  • RUN:更新pip到最新版本
  • WORKDIR:用来指定当前工作目录(或者称为当前目录),容器启动时执行的命令会在该目录下执行,比如接下来要执行pytest test_1.py就会在指定的目录下执行
  • COPY:COPY ,拷贝文件到目标路径,上述是拷贝上下文目录中的文件到当前目录(就是指WORKDIR指定的目录)
  • RUN:安装requirements.txt文件
  • ENTRYPOINT:默认命令行参数pytest
  • CMD:与ENTRYPOINT连用,作为ENTRYPOINT的参数,这里默认命令就是pytest --help,如果你想默认执行命令是pytest -s,那么就把CMD改成CMD["-s"]就可以了

    此时我们当前目录下还没有requirements.txt文件,接下来创建文件,并写入需要安装的第三方包
[root@jkc docker-run]# ls
Dockerfile requirements.txt
[root@jkc docker-run]# cat requirements.txt
pytest==3.6.3
requests==2.20.1

build构建镜像文件

docker build 命令用于使用 Dockerfile 创建镜像。OPTIONS说明:

-f :指定要使用的Dockerfile路径;

--pull :尝试去更新镜像的新版本;

--quiet, -q :安静模式,成功后只输出镜像 ID;

--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

-t参数设置镜像名称jkc_pytest和tag标签名称v1,注意最后面有个点. 这个点代表上下文目录的路径,就是当前路径,我这里是/root/docker_run

docker build -t jkc_pytest:v1 .
[root@jkc docker-run]# docker build -t jkc_pytest:v1 .
Sending build context to Docker daemon 7.168kB
Step 1/8 : FROM python:3.6.8
---> 48c06762acf0
Step 2/8 : MAINTAINER jkc <1044500650@qq.com>
---> Running in 986c40cdf6d9
Removing intermediate container 986c40cdf6d9
---> 157699a7ac69
Step 3/8 : RUN pip install --upgrade pip --index-url https://pypi.douban.com/simple
---> Running in 1420e29b1810
Looking in indexes: https://pypi.douban.com/simple
Collecting pip
Downloading https://pypi.doubanio.com/packages/de/47/58b9f3e6f611dfd17fb8bd9ed3e6f93b7ee662fb85bdfee3565e8979ddf7/pip-21.0-py3-none-any.whl (1.5MB)
Installing collected packages: pip
Found existing installation: pip 19.1.1
Uninstalling pip-19.1.1:
Successfully uninstalled pip-19.1.1
Successfully installed pip-21.0
Removing intermediate container 1420e29b1810
---> f77fce861c3d
Step 4/8 : WORKDIR /code
---> Running in 0a1229af5f02
Removing intermediate container 0a1229af5f02
---> 2201ff40156b
Step 5/8 : COPY . .
---> 89fd63a6e517
Step 6/8 : RUN pip install -r requirements.txt --index-url https://pypi.douban.com/simple
---> Running in 778b4c1a69e9
Looking in indexes: https://pypi.douban.com/simple
Collecting pytest==3.6.3
Downloading https://pypi.doubanio.com/packages/77/64/3a76f6fbb0f392d60c5960f2b2fbad8c2b802dada87ca6d1b99c0083a929/pytest-3.6.3-py2.py3-none-any.whl (195 kB)
Collecting requests==2.20.1
Downloading https://pypi.doubanio.com/packages/ff/17/5cbb026005115301a8fb2f9b0e3e8d32313142fe8b617070e7baad20554f/requests-2.20.1-py2.py3-none-any.whl (57 kB)
Collecting atomicwrites>=1.0
Downloading https://pypi.doubanio.com/packages/2c/a0/da5f49008ec6e9a658dbf5d7310a4debd397bce0b4db03cf8a410066bb87/atomicwrites-1.4.0-py2.py3-none-any.whl (6.8 kB)
Requirement already satisfied: setuptools in /usr/local/lib/python3.6/site-packages (from pytest==3.6.3->-r requirements.txt (line 1)) (41.0.1)
Collecting pluggy<0.7,>=0.5
Downloading https://pypi.doubanio.com/packages/ba/65/ded3bc40bbf8d887f262f150fbe1ae6637765b5c9534bd55690ed2c0b0f7/pluggy-0.6.0-py3-none-any.whl (13 kB)
Collecting six>=1.10.0
Downloading https://pypi.doubanio.com/packages/ee/ff/48bde5c0f013094d729fe4b0316ba2a24774b3ff1c52d924a8a4cb04078a/six-1.15.0-py2.py3-none-any.whl (10 kB)
Collecting attrs>=17.4.0
Downloading https://pypi.doubanio.com/packages/c3/aa/cb45262569fcc047bf070b5de61813724d6726db83259222cd7b4c79821a/attrs-20.3.0-py2.py3-none-any.whl (49 kB)
Collecting py>=1.5.0
Downloading https://pypi.doubanio.com/packages/67/32/6fe01cfc3d1a27c92fdbcdfc3f67856da8cbadf0dd9f2e18055202b2dc62/py-1.10.0-py2.py3-none-any.whl (97 kB)
Collecting more-itertools>=4.0.0
Downloading https://pypi.doubanio.com/packages/66/58/63146600d8c35188f2c4de3f1e2fe77a54e9c9ac99ac3b652f09e042f637/more_itertools-8.6.0-py3-none-any.whl (45 kB)
Collecting idna<2.8,>=2.5
Downloading https://pypi.doubanio.com/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl (58 kB)
Collecting certifi>=2017.4.17
Downloading https://pypi.doubanio.com/packages/5e/a0/5f06e1e1d463903cf0c0eebeb751791119ed7a4b3737fdc9a77f1cdfb51f/certifi-2020.12.5-py2.py3-none-any.whl (147 kB)
Collecting chardet<3.1.0,>=3.0.2
Downloading https://pypi.doubanio.com/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133 kB)
Collecting urllib3<1.25,>=1.21.1
Downloading https://pypi.doubanio.com/packages/01/11/525b02e4acc0c747de8b6ccdab376331597c569c42ea66ab0a1dbd36eca2/urllib3-1.24.3-py2.py3-none-any.whl (118 kB)
Installing collected packages: urllib3, six, py, pluggy, more-itertools, idna, chardet, certifi, attrs, atomicwrites, requests, pytest
Successfully installed atomicwrites-1.4.0 attrs-20.3.0 certifi-2020.12.5 chardet-3.0.4 idna-2.7 more-itertools-8.6.0 pluggy-0.6.0 py-1.10.0 pytest-3.6.3 requests-2.20.1 six-1.15.0 urllib3-1.24.3
Removing intermediate container 778b4c1a69e9
---> 8dbb604ee32b
Step 7/8 : ENTRYPOINT ["pytest"]
---> Running in 9f8af21deb12
Removing intermediate container 9f8af21deb12
---> bc1569590d44
Step 8/8 : CMD ["--help"]
---> Running in f4a600409184
Removing intermediate container f4a600409184
---> f7033ca36724
Successfully built f7033ca36724
Successfully tagged jkc_pytest:v1
[root@jkc docker-run]#

运行过程中可以看到按步骤运行,如:Step 1/8

运行完成后,可以通过docker images查看生成的镜像

[root@jkc docker-run]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jkc_pytest v1 f7033ca36724 8 minutes ago 944MB

run运行容器

在当前目录新建一个test_1.py文件,写入pytest测试脚本

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"])

使用docker run运行容器

  • -it -t让docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开.
  • --rm 容器退出时,自动清除容器。 --rm选项不能与-d同时使用
  • -v 将容器的工作目录/code挂载到宿主机的$PWD,也就是当前目录
  • jkc_pytest:v1 容器名称和tag名称
  • test_1.py 后面跟着需要执行的脚本名称
[root@jkc docker-run]# docker run -it --rm -v "$PWD":/code jkc_pytest:v1 test_1.py  -s
====================================================== test session starts ======================================================
platform linux -- Python 3.6.8, pytest-3.6.3, py-1.10.0, pluggy-0.6.0
rootdir: /code, inifile:
collected 3 items test_1.py 正在执行----test_one
.正在执行----test_two
.正在执行----test_three
. =================================================== 3 passed in 0.04 seconds ====================================================
[root@jkc docker-run]#

docker(9)Dockerfile制作镜像的更多相关文章

  1. Docker 0x05: Dockerfile制作镜像

    目录 Dockerfile制作镜像 一句话什么是dockerfile dockerfile脚本指令 小结 Dockerfile制作镜像 dockerfile 可以是制作自己镜像的脚本文件,按照这个脚本 ...

  2. Docker build Dockerfile 构建镜像 - 二

    Dockerfile 制作镜像 https://hub.docker.com/ 搜索需要镜像: https://hub.docker.com/_/centos/ 官方示例: centos:6 1.这里 ...

  3. 通过dockerfile制作镜像

    Dockerfile是一个用于构建Docker镜像的文本文件,其中包含了创建Docker镜像的全部指令.就是将我们安装环境的每个步骤使用指令的形式存放在一个文件中,最后生成一个需要的环境. Docke ...

  4. Docker之dockerfile制作jdk镜像

    目的: Dockerfile简介 Dockerfile制作jdk镜像 Dockerfile简介 了解dockerfile之前要先了解Docker基本概念和使用可参考:https://www.cnblo ...

  5. Docker —— 使用 Dockerfile 制作 Jdk + Tomcat 镜像

    一.准备好Jdk和Tomcat apache-tomcat-8.5.50.tar.gz jdk-8u212-linux-x64.tar.gz 注意: Jdk 和 Tomcat 记得从官网下载,否则制作 ...

  6. Docker部署运行springboot项目,并使用Dockerfile制作镜像

    前言: 本来是要搭建一个自动化部署分布式项目的服务器平台的,使用jenkins+k8s+ELK+springboot把一个简单的springboot项目给搞起来,由于工程太大,先分开把每个技术组件单独 ...

  7. docker-使用Dockerfile制作镜像

    最近项目中有使用docker,组内做了关于docker的培训,然后自己跟着研究了一下,大概了解如何使用.我是基于tomcat镜像制作(不需要安装jdk,配置环境变量),基于centos镜像制作需要安装 ...

  8. WIN7安装Docker Toolbox、制作镜像并发到阿里云

    一.安装Docker Toolbox,并配置国内源加速 WIndows7不支持Hyper-v,所以只能采用Docker Toolbox的方式使用Docker.传送门:http://mirrors.al ...

  9. Docker之Alpine制作镜像且上传至阿里云

    目的: Alpine制作jdk镜像 Alpine制作jre镜像(瘦身) Docker镜像上传至阿里云 Alpine制作jdk镜像 alpine Linux简介 Alpine Linux是一个轻型Lin ...

随机推荐

  1. php 二位数组 转一维数组

    $result = []; array_map(function ($value) use (&$result) { $result = array_merge($result, array_ ...

  2. 【JavaWeb】AJAX 请求

    AJAX 请求 什么是 AJAX AJAX(Asynchronous JavaScript And XMl),即异步 JS 和 XML.是指一种创建交互式网页应用的网页开发技术. AJAX 是一种浏览 ...

  3. Assuming that agent dropped connection because of access permission

    Assuming that agent dropped connection because of access permission

  4. Head First 设计模式 —— 15. 与设计模式相处

    模式 是在某情境(context)下,针对某问题的某种解决方案. P579 情景:应用某个模式的情况 问题:你想在某情境下达到的目标,但也可以是某情境下的约束 解决方案:一个通用的设计,用来解决约束. ...

  5. leetcode 886. 可能的二分法(DFS,染色,种类并查集)

    题目链接 886. 可能的二分法 题意: 给定一组 N 人(编号为 1, 2, ..., N), 我们想把每个人分进任意大小的两组. 每个人都可能不喜欢其他人,那么他们不应该属于同一组. 形式上,如果 ...

  6. 安装newman error:package exports for 'c:\nmp\node_modules\newman\node_module 解决办法

    一.场景描述: 通过npm安装newman时,一直失败. 尝试了很多安装命令: npm install -g newman npm install -g newman --registry=http: ...

  7. CTFshow萌新赛-萌新福利

    下载链接文件 拿到show.bin文件 使用010Editor工具打开文件 做取反操作 取反后可以看到 把show.bin改为show.m4a 使用音频播放软件播放,即可得到flag

  8. 超精讲-逐例分析CS:LAB2-Bomb!(上)

    0. 环境要求 关于环境已经在lab1里配置过了这里要记得安装gdb 安装命令 sudo yum install gdb 实验的下载地址 http://csapp.cs.cmu.edu/3e/labs ...

  9. undefined和null区别

    undefined类型只有一个值就是undefined,没有必要显式地声明一个变量为undefined. null类型其实就是一个对象的空指针,所以用typeof null 才会显示为object. ...

  10. eCATT使用前的配置

    如果想在SAP中使用eCATT,必须做一下相关的配置才行,下面简单介绍这几步:1.SM30,输入表T000,然后点击维护,或者是进入事物SCC4,进入对应的clint属性编辑视图下,将CATT and ...