【Docker】个人镜像文件Dockerfile制作详解

这篇具有很好参考价值的文章主要介绍了【Docker】个人镜像文件Dockerfile制作详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

洁洁的个人主页
我就问你有没有发挥!
知行合一,志存高远。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

1. Dockerfile简介

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。此文章为恒川学习笔记了解。

简单来说,Dockerfile就是把我们安装环境的每个步骤和指令,放到一个文件,最后一键执行,最后做成一个你想要的环境。

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

Docker构建三步曲:

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

【Docker】个人镜像文件Dockerfile制作详解,external,docker,容器,运维

2. 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被触发。

3. Dockerfile编写

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

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

编辑内容如下:

# 更新pip
RUN pip install --upgrade pip 

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

# pip安装依赖包
RUN pip install -r requirements.txt

# 传递参数
ENTRYPOINT ["pytest"]

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

【Docker】个人镜像文件Dockerfile制作详解,external,docker,容器,运维

4. requirements.txt

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

pip3 freeze >requirements.txt

[root@yoyo docker-run]# cat requirements.txt 
APScheduler==3.5.3
asn1crypto==0.24.0
atomicwrites==1.3.0
attrs==18.2.0
backports.csv==1.0.7
bcrypt==3.1.7
beautifulsoup4==4.7.1
cached-property==1.5.1
certifi==2018.11.29
cffi==1.12.3
chardet==3.0.4
cryptography==2.7
DBUtils==1.3
defusedxml==0.5.0
diff-match-patch==20181111
Django==2.1.4
django-bootstrap3==11.0.0
django-crispy-forms==1.7.2
django-formtools==2.1
django-import-export==1.2.0
django-ranged-response==0.2.0
django-reversion==3.0.3
django-simple-captcha==0.5.10
django-stdimage==4.0.1
docker==3.7.3
docker-compose==1.24.1
docker-pycreds==0.4.0
dockerpty==0.4.1
docopt==0.6.2
et-xmlfile==1.0.1
future==0.17.1
httplib2==0.12.1
idna==2.7
jdcal==1.4
jsonschema==2.6.0
more-itertools==6.0.0
mysqlclient==1.4.2.post1
odfpy==1.4.0
openpyxl==2.6.1
paramiko==2.6.0
Pillow==5.4.1
pluggy==0.6.0
progressbar2==3.39.3
py==1.7.0
pycparser==2.19
pymssql==2.1.4
PyMySQL==0.9.3
PyNaCl==1.3.0
pytest==3.6.3
python-utils==2.3.0
pytz==2018.7
PyYAML==3.13
requests==2.20.1
six==1.12.0
soupsieve==1.7.3
tablib==0.13.0
texttable==0.9.1
tzlocal==1.5.1
urllib3==1.24.1
websocket-client==0.56.0
xlrd==1.2.0
xlwt==1.3.0

【Docker】个人镜像文件Dockerfile制作详解,external,docker,容器,运维

5. build构建镜像文件

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

  1. -f :指定要使用的Dockerfile路径;
  2. -pull :尝试去更新镜像的新版本;
  3. -quiet, -q :安静模式,成功后只输出镜像 ID;
  4. -tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

-t参数设置镜像名称yoyo_pytes和tag标签名称v1,注意最后面有个点.

docker build -t yoyo_pytest:v1 .

[root@yoyo docker-run]# docker build -t yoyo_pytest:v1 .
Sending build context to Docker daemon  11.78kB
Step 1/8 : FROM python:3.6
 ---> cfcdf565ff94
Step 2/8 : MAINTAINER yoyo  <283340479@qq.com>
 ---> Using cache
 ---> f523b919fcf9
Step 3/8 : RUN pip install --upgrade pip
 ---> Using cache
 ---> 3399b50dab4e
Step 4/8 : WORKDIR /code
 ---> Using cache
 ---> 7223a20e17fd
Step 5/8 : ADD . /code
 ---> 650b554ccd6c
Step 6/8 : RUN pip install -r requirements.txt
 ---> Running in 0e49d444f7d8

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

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

[root@yoyo docker-run]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
yoyo_pytest                v1                  6b4267ce7ac4        21 seconds ago      1.02GB
[root@yoyo docker-run]#

【Docker】个人镜像文件Dockerfile制作详解,external,docker,容器,运维

6. run运行容器

在当前目录新建一个test_h.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运行容器

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

test_h.py 正在执行----test_one
.正在执行----test_two
.正在执行----test_three
.

=============================================================== 
3 passed in 0.01 seconds 

7.书籍推荐:

《Linux私教课:技术内核与企业运维篇》自CentOS 6.x和CentOS 8.x停更以后,国内开源的Linux系统究竟采用什么系统引起了不小的争议。从国外的数据来看,目前Rocky Linux系统已经呈现替代CentOS的趋势。Rocky Linux是一个开源、免费的企业级操作系统,旨在与Red Hat(红帽)公司发布的面向企业用户的Linux系统(Red Hat Enterprise Linux,RHEL)100% Bug级兼容,目前正在社区密集开发中。Rocky Linux是一个社区拥有和管理的企业Linux发行版,提供强大的生产级平台,可作为CentOS停止维护(改为滚动更新的Stream版)后,RHEL的下游Linux系统的替代方案,继承了原CentOS的开源、免费的特点。《Linux私教课:技术内核与企业运维篇》围绕Rocky Linux系统,详细地讲解了使用Rocky Linux系统的各项技术要点和企业实战案例。全书共13章,首先对Rocky Linux系统进行介绍。接下来讲解了目录管理与文件管理、用户管理、权限管理、磁盘管理、进程管理、系统管理、网络管理;然后拓展了知识面,讲解了容器管理的内容。最后讲解了Linux系统内核优化、中小型企业上云解决方案、Prometheus监控系统、Podman企业实战。本书充分考虑到零基础读者的阅读需求,精心提供了笔记、示例代码、学习视频、思维导图等资源。
购书链接
【Docker】个人镜像文件Dockerfile制作详解,external,docker,容器,运维文章来源地址https://www.toymoban.com/news/detail-648280.html

到了这里,关于【Docker】个人镜像文件Dockerfile制作详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Docker容器化技术(使用Dockerfile制作镜像)

    Docker容器化技术(使用Dockerfile制作镜像)

    Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。 1、Docker 镜像为什么分层 镜像分层最大的一个好处就是共享资源。 比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在

    2024年03月19日
    浏览(424)
  • 【云原生-Docker】docker镜像制作、上传、dockerfile命令解析

    【云原生-Docker】docker镜像制作、上传、dockerfile命令解析

    在实际业务场景中,需要制作多个不同版本进行镜像使用,如maven版本、JDK、openJDK不同使用等,所以需要做多个针对不同版本做不同的镜像。 这里记录一下之前devops用的openJDK版本、某些部门需要用orcle JDK、特此需要做不同的镜像,镜像内包含centos、maven、jdk。 基础镜像 基础

    2024年02月03日
    浏览(93)
  • Docker(七)—— 如何用Dockerfile制作自己的镜像

    Docker(七)—— 如何用Dockerfile制作自己的镜像

    目录 需求: 一、步骤  二、Dockerfile 三、 实战 —— 构建自己的centos 1. dockerfile编写 2. build构建 3. run 运行 四、用docker commit实现 四、实战 —— 构建jar包的镜像(helloworld版本) 五、实战 —— 构建jar包的镜像(两个容器通信版本)  自己写了一个小程序,如何带着环境打包

    2024年02月05日
    浏览(46)
  • docker基于已有容器和通过Dockerfile进行制作镜像配置介绍

    目录 一.制作镜像的两种方式 1.在已有容器中更新并提交这个镜像 2.使用Dockerfile来制作 二.基于容器制作镜像 1.格式 (1)主要格式 (2)可选参数 2.案例 基于容器创建镜像设置标签并进行验证是否可用 (1)运行容器并写入验证内容(改变容器存储层内容) (2)另起终端制

    2024年02月11日
    浏览(53)
  • Docker容器学习:Dockerfile制作Web应用系统nginx镜像

    Docker容器学习:Dockerfile制作Web应用系统nginx镜像

    目录 编写Dockerfile 1.文件内容需求: 2.编写Dockerfile: 3.开始构建镜像  4.现在我们运行一个容器,查看我们的网页是否可访问 推送镜像到私有仓库 1.把要上传的镜像打上合适的标签 2.登录harbor仓库 3.上传镜像 1.文件内容需求: 基于centos基础镜像。 指定作者信息。 安装nginx服

    2024年02月11日
    浏览(63)
  • docker (九)-进阶篇-dockerfile制作zabbix镜像(带python3环境)

    环境说明:根据前文docker (七)部署zabbix进行zabbix告警配置时,发现zabbix没有脚本所需要的python3环境,也没有yum环境 参考 https://www.cnblogs.com/daniel-ming/p/15341636.html          Zabbix docker镜像 build Python3_docker zabbixserver python-CSDN博客 容器起不来...查看日志      7:20240220:105203.7

    2024年02月22日
    浏览(13)
  • Docker技术入门| Part03:Dockerfile详解(Dockerfile概念、Dockerfile 指令、使用Dockerfile构建镜像)

    Docker镜像原理 Docker镜像是由特殊的文件系统叠加而成 最底端是bootfs,并使用宿主机的bootfs 第二层是root文件系统rootfs,称为base image 然后再往上可以叠加其他的镜像文件 统文件系统(UnionFile System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统的视角,这样就隐

    2024年02月09日
    浏览(43)
  • 【云原生】Docker—Dockerfile写法与用法以及dockerfile简介与构建镜像详解【附加实战】

    【云原生】Docker—Dockerfile写法与用法以及dockerfile简介与构建镜像详解【附加实战】

      Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令(Instruction)和操作命令;每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建(也就是你要执行的操作命令)。  dockerfile是纯文本文件;  dockerfile是用来

    2024年01月18日
    浏览(14)
  • 【docker知识】如何从镜像返回它的Dockerfile文件

            Docker 镜像是通过构建 Dockerfiles 创建的。构建过程执行 Dockerfile 中的指令来创建构成最终镜像的文件系统层。 如果给出已有图像,您可以检索构建它的 Dockerfile 吗?在本文中,我们将研究两种可以实现此目的的方法。         当您构建自己的 Docker 映像时,您

    2024年02月04日
    浏览(8)
  • 详解 docker 镜像制作的两种方式

    制作Docker镜像一般有2种方法: 通过Dockerfile,完成镜像的创建 使用仓库中已有的镜像,安装自己使用的软件环境后完成新镜像创建 docker build: 用于构建 Docker 镜像。该命令可以从 Dockerfile 构建镜像,也可以从 tar 包构建镜像。 docker tag: 用于给镜像打上标签。该命令可以将镜像

    2024年02月01日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包