docker(9)Dockerfile制作镜像
前言
如果我们已经安装了一个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制作镜像的更多相关文章
- Docker 0x05: Dockerfile制作镜像
目录 Dockerfile制作镜像 一句话什么是dockerfile dockerfile脚本指令 小结 Dockerfile制作镜像 dockerfile 可以是制作自己镜像的脚本文件,按照这个脚本 ...
- Docker build Dockerfile 构建镜像 - 二
Dockerfile 制作镜像 https://hub.docker.com/ 搜索需要镜像: https://hub.docker.com/_/centos/ 官方示例: centos:6 1.这里 ...
- 通过dockerfile制作镜像
Dockerfile是一个用于构建Docker镜像的文本文件,其中包含了创建Docker镜像的全部指令.就是将我们安装环境的每个步骤使用指令的形式存放在一个文件中,最后生成一个需要的环境. Docke ...
- Docker之dockerfile制作jdk镜像
目的: Dockerfile简介 Dockerfile制作jdk镜像 Dockerfile简介 了解dockerfile之前要先了解Docker基本概念和使用可参考:https://www.cnblo ...
- Docker —— 使用 Dockerfile 制作 Jdk + Tomcat 镜像
一.准备好Jdk和Tomcat apache-tomcat-8.5.50.tar.gz jdk-8u212-linux-x64.tar.gz 注意: Jdk 和 Tomcat 记得从官网下载,否则制作 ...
- Docker部署运行springboot项目,并使用Dockerfile制作镜像
前言: 本来是要搭建一个自动化部署分布式项目的服务器平台的,使用jenkins+k8s+ELK+springboot把一个简单的springboot项目给搞起来,由于工程太大,先分开把每个技术组件单独 ...
- docker-使用Dockerfile制作镜像
最近项目中有使用docker,组内做了关于docker的培训,然后自己跟着研究了一下,大概了解如何使用.我是基于tomcat镜像制作(不需要安装jdk,配置环境变量),基于centos镜像制作需要安装 ...
- WIN7安装Docker Toolbox、制作镜像并发到阿里云
一.安装Docker Toolbox,并配置国内源加速 WIndows7不支持Hyper-v,所以只能采用Docker Toolbox的方式使用Docker.传送门:http://mirrors.al ...
- Docker之Alpine制作镜像且上传至阿里云
目的: Alpine制作jdk镜像 Alpine制作jre镜像(瘦身) Docker镜像上传至阿里云 Alpine制作jdk镜像 alpine Linux简介 Alpine Linux是一个轻型Lin ...
随机推荐
- 在vscode中配置sass savepath
1.先在VSCode上面安装插件:Live Sass Compiler 2.创建好scss文件夹文件和css文件夹 3.然后在VSCode的控制台上打开Live sass watching模式(控制台 ...
- UnRAID_6.8.2_配置_设置
UnRAID_6.8.2_配置_设置 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-10-05. 参考: UnRAID download Getting_Started Offic ...
- 风炫安全WEB安全学习第三十八节课 越权漏洞演示与讲解
风炫安全WEB安全学习第三十八节课 越权漏洞演示与讲解 越权漏洞 0x01 漏洞介绍 越权漏洞的危害与影响主要是与对应业务的重要性相关,比如说某一页面服务器端响应(不局限于页面返回的信息,有时信息在响 ...
- filleSystemBasises
基本查询命令 pwd 查看当前目录 dir 显示当前目录下的文件信息 more 查看文本文件的具体内容 cd 修改用户当前目录 mkdir 创建新的目录 rmdir 删除目录 copy filenam ...
- tomcat版本号修改已dwr配置错误安全漏洞整改
1.tomcat版本信息泄露修改方法:tomcat6是在tomcat/lib 下使用jar xf catalina.jar 解压这个jar包会得到两个目录:META-INF和org其中org\apac ...
- Java 基于mail.jar 和 activation.jar 封装的邮件发送工具类
准备工作 发送邮件需要获得协议和支持! 开启服务 POP3/SMTP 服务 如何开启 POP3/SMTP 服务:https://www.cnblogs.com/pojo/p/14276637.html ...
- ./utils/build.sh: line 131: patch: command not found
安装 percona-xtrabackup-2.1.5过程中遇到如下问题: [root@test percona-xtrabackup-2.1.5]# ./utils/build.sh innodb5 ...
- [分享] 最流行的 10 个 JavaScript 库
1. Lodash https://github.com/lodash/lodash 一个工具库,用得还蛮多. 2. Chalk https://github.com/chalk/chalk 给终端加 ...
- 开心!再也不用担心 IntelliJ IDEA 试用过期了
背景 前段时间 Review 团队小伙伴代码,发现当他把鼠标挪到一个方法上时,就自动显示了该方法的所有注释信息,像下图这样,他和我用的 IDE 都是 IntelliJ IDEA. 而我还按古老的方式, ...
- 聊一聊:Service层你觉得有用吗?
前段日子在社群(点击加入)里看到有人讨论关于Service层接口的问题,DD也经常碰到周围的新人有问过一些类似的问题:一定要写个Service层的接口吗?Service层的接口到底用做什么用的呢?好像 ...