Docker学习5-Dockerfile编写自己的镜像

前言

Dockerfile 可以自定义编写镜像,简单来说就类似写脚本,shell脚本应该接触不少了,就是一个执行后就完成了。

当然做好的镜像也可以传到镜像仓库,就好像github上面一样存储,一个命令就能照搬下来安装。

一、简介

相信不少朋友会问,为何docker run 一下python就停止了呢?(那执行完了不停止干什么?)

还有为什么我的pip安装,每次安装完成了run下一个python容器就没有已安装的库了?显然run是每次都启动一个新的容器。所以不少网友提倡用Dockerfile制作。

1、学习只需三步:

  • 编写 dockerfile
  • docker build image镜像
  • docker run 运行容器

2、Dockerfile命令科普:

FROM:基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER:镜像维护者的姓名和邮箱地址

RUN:容器构建时需要运行的命令

EXPOSE:当前容器对外暴露出的端口

WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

ENV:用来在构建镜像过程中设置环境变量

ADD:将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar 压缩包

COPY:类似 ADD,拷贝文件和目录到镜像中。(COPY src dest 或 COPY ["src","dest"])

VOLUME:容器数据卷,用于数据保存和持久化工作

CMD:指定一个容器启动时要运行的命令,Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换

ENTRYPOINT:指定一个容器启动时要运行的命令,ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数

ONBUILD:当构建一个被继承的 Dockerfile 时运行命令,父镜像在被子继承后父镜像的 onbuild 被触发

3、网上的图片介绍的还不错,仅供参考:

二、开始自定义制作 python3.6.5

安装python3,并且安装 requirements.txt 文件内的库。

1、导出 requirements.txt:pip3 freeze >requirements.txt

[[email protected] data]# pip3 freeze >requirements.txt
[[email protected] data]# ll
total 8
-rw-r--r-- 1 root root  469 Jan  3 20:09 Dockerfile
-rw-r--r-- 1 root root 1107 Jan  3 20:10 requirements.txt
[[email protected] data]# cat requirements.txt
allure-pytest==2.8.6
allure-python-commons==2.8.6
amqp==1.4.9
anyjson==0.3.3
appdirs==1.4.3
attrs==19.3.0
Babel==2.7.0
bcrypt==3.1.7...等等

2、创建文件:vi dockerfile

[[email protected] data]# vi Dockerfile

3、编写 dockerfile,保存

# 基础镜像:python3.6.5镜像
FROM python:3.6.5

# 镜像维护者的姓名和邮箱地址
MAINTAINER gsxl  <772262624@qq.com>

# 构建时需要运行的命令,更新pip,为了后面pip安装 requirements.txt
RUN pip install --upgrade pip

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

# pip 安装 requirements.txt
RUN pip install -r requirements.txt

# 指定容器启动程序及参数
ENTRYPOINT ["pytest"]

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

4、build 运行(注意后面有个 ):dcoker build -t 镜像:标签 .

镜像名及标签 == test_py:v1

[[email protected] data]# docker build -t test_py:v1 .

8个步骤,结果如下:

[email protected] data]# docker build -t test_py:v1 .
Sending build context to Docker daemon  4.096kB
Step 1/8 : FROM python:3.6.5
 ---> 9a58cce9b09f
Step 2/8 : MAINTAINER gsxl  <772262624@qq.com>
 ---> Using cache
 ---> ef78f308960d
Step 3/8 : RUN pip install --upgrade pip
 ---> Using cache
 ---> fcd21328b7d4
Step 4/8 : WORKDIR /python
 ---> Running in 70727434375c
Removing intermediate container 70727434375c
 ---> 89e7bb9cd6b5
Step 5/8 : ADD . /python
 ---> 32b2714720b4
Step 6/8 : RUN pip install -r requirements.txt
 ---> Running in 7a1727fa9b6f
Collecting allure-pytest==2.8.6
  Downloading https://files.pythonhosted.org/packages/8d/be/cc4877a9e2f998bbfd0289b6a2ffac153126b9c8f843ea733cd14371b7e3/allure_pytest-2.8.6-py2.py3-none-any.whl
Collecting allure-python-commons==2.8.6
  Downloading https://files.pythonhosted.org/packages/1a/7d/cd568f55d54012891ecea14f70ec3d8f2471f038f53df7a828f4b3e5080d/allure_python_commons-2.8.6-py2.py3-none-any.whl
Collecting amqp==1.4.9...此处省略
Successfully built 18ccc91cdaf2
Successfully tagged test_py:v1

5、查看镜像:docker images

[[email protected] data]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test_py             v1                  18ccc91cdaf2        18 minutes ago      1.07GB

三、启动容器

1、docker run -it --rm -v ~/data:/python test_py:v1 api_excel_demo/cases/test_register_api.py -s

  • -it :以交互模式运行容器
  • -v:挂载目录~/data 到 容器内python文件夹
  • --rm:容器退出时,自动清除容器
  • test_py:v1:镜像:标签
  • -s:pytest 详细信息
[[email protected] data]# docker run -it --rm -v ~/data:/python test_py:v1 api_excel_demo/cases/test_register_api.py -s
============================================================================================================================ test session starts =============================================================================================================================
platform linux -- Python 3.6.5, pytest-5.3.2, py-1.8.1, pluggy-0.13.1
rootdir: /python
plugins: allure-pytest-2.8.6
collected 3 items                                                                                                                                                                                                                                                            

api_excel_demo/cases/test_register_api.py {‘Content-Type‘: ‘application/json‘, ‘X-Requested-With‘: ‘XMLHttpRequest‘}
*******正在执行用例:-----  ID: 1
请求方式:post, 请求url:http://47.97.194.84:8000/api/register/
请求类型为:json ,body参数为:{"account": "gsxl11", "email": "[email protected]", "password": "gsxl11", "repassword": "gsxl11"}
响应信息为:恭喜您,账号已成功注册
用例测试结果:  ID: 1---->pass
检查点---->:恭喜您,账号已成功注册
.{‘Content-Type‘: ‘application/json‘, ‘X-Requested-With‘: ‘XMLHttpRequest‘}
*******正在执行用例:-----  ID: 2
请求方式:post, 请求url:http://47.97.194.84:8000/api/register/
请求类型为:json ,body参数为:{"account": "gsxl11", "email": "[email protected]", "password": "gsxl11", "repassword": "gsxl11"}
响应信息为:该用户名已被注册,请更换用户名
用例测试结果:  ID: 2---->pass
检查点---->:该用户名已被注册,请更换用户名
.{‘Content-Type‘: ‘application/json‘, ‘X-Requested-With‘: ‘XMLHttpRequest‘}
*******正在执行用例:-----  ID: 3
请求方式:post, 请求url:http://47.97.194.84:8000/api/register/
请求类型为:json ,body参数为:{"account": "", "email": "", "password": "", "repassword": ""}
响应信息为:该用户名已被注册,请更换用户名
用例测试结果:  ID: 3---->pass
检查点---->:该用户名已被注册,请更换用户名
.

============================================================================================================================= 3 passed in 0.42s =============================================================================================================================

欢迎来QQ交流群:482713805

原文地址:https://www.cnblogs.com/gsxl/p/12129322.html

时间: 2024-08-30 15:32:36

Docker学习5-Dockerfile编写自己的镜像的相关文章

DOCKER学习_012:Dockerfile配置指令详解

1 Dockerfile结构 基础镜像信息 镜像操作指令 容器启动时执行指令 2 FROM 指定基础镜像,用于继承其他镜像使用的 FROM ubuntu:14.06 FROM centos FROM nginx:latest 3 LABEL 镜像创建者的基本信息 4 ENV 定义Docker容器内的环境变量 ENV # 只能设置一个变量 ENV = … # 允许一次设置多个变量 ENV <key> <value> 指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持 示例:

Docker学习笔记 — Dockerfile

基本结构 可以使用Dockerfile自定义镜像. Dockerfile分为四个部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行指令. # This dockerfile uses the ubuntu image # VERSION 2 - EDITION 1 # Author: docker_user # Command format: Instruction [arguments / command] .. # Base image to use, this must be s

【docker】基于Dockerfile构建mysqld服务镜像

一 创建构建目录结构     # mkdir  -pv docker/mysql# cd docker/mysql/ 二 写Dockerfile 文件 # vim  Dockerfile  #此处 sshd:latest 为上篇文章中创建的镜像#此Dockerfile 「dookerpool」的 Dockerfile文件,仅仅在在测试时候做了些优化和更改FROM sshd:latestMAINTAINER mykernel(www.mykernel.cn)#安装软件 RUN ENV DEBIAN

docker学习之——获取和推送镜像

1.查找镜像 第一种: 通过Docker的官网:https://registry.hub.docker.com 第二种: 通过docker search命令: --automated:只显示出自动化构建出的镜像 --no-trunc:不以截段的方式显示输出 -s,--stars:用来限定显示结果的最低星级 查看所有的Ubuntu镜像: 查看星级为3的Ubuntu镜像: 2.拉取镜像 使用指定的国内的镜像仓库地址中下载镜像: --registry-mirror:选项 1.修改:/etc/defau

Docker学习(12) Dockerfile构建过程

Dockerfile的构建过程 以上为构建缓存 原文地址:https://www.cnblogs.com/xiao-xue-di/p/11485044.html

手把手教你写Dockerfile, 附赠MongoDB和Nginx Dockerfile编写实例

手把手教你写Dockerfile, 附赠MongoDB和Nginx Dockerfile编写实例 基础镜像可以用于创建Docker容器.镜像可以非常基础,仅仅包含操作系统:也可以非常丰富,包含灵巧的应用栈,随时可以发布.当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层.这些基础镜像可以用于创建新的容器.本篇文章将手把手教您如何从基础镜 像,一步一步,一层一层的从Dockerfile构建容器的过程. Docker简介 Docker项目提供了构建在Linux内核

DOCKER学习_011:使用Dockerfile制作docker镜像

前面使用commit的方式,制作一个docker镜像,本次介绍使用Dockerfile制作一个dockers镜像 [[email protected] ~]# mkdir /openssh [[email protected] ~]# cd /openssh [[email protected] openssh]# cp /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key . [[

Docker容器学习梳理-Dockerfile构建镜像

在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让docker读取并分析.执行,那么重复构建.更新将变得很方便,所以Dockerfile就此诞生了.Docker提供了Dockerfile作为构建Docker镜像脚本,避免人们一行一行的输入,真是善莫大焉.Dockerfile脚本可以做到随时维护修改,即可以分享,更有利于在模板化,更不用说传

docker安装与常规使用 &amp;&amp; dockerfile编写springbootdemo镜像

dockerfile教程参考 https://blog.csdn.net/qq_33256688/article/details/80319673 docker 创建容器命令: docker run -d -p 10002:8080 --name springdemo springdemo -d : 后台运行 -p :设置端口映射 --name:为容器起名 说明:镜像只需run一次加载到容器,后续通过start.stop和restart指令来管理该容器 进入docker容器里面: 建议使用exe