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

news2024/11/27 14:29:18

前言

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

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

利用Dockerfile制作个人的镜像文件

  • 1. Dockerfile简介
  • 2. Dockerfile相关指令
  • 3. Dockerfile编写
  • 4. requirements.txt
  • 5. build构建镜像文件
  • 6. run运行容器
  • 7.书籍推荐:

1. Dockerfile简介

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

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

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

Docker构建三步曲:

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

请添加图片描述

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

请添加图片描述

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

请添加图片描述

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]#

请添加图片描述

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企业实战。本书充分考虑到零基础读者的阅读需求,精心提供了笔记、示例代码、学习视频、思维导图等资源。
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/875559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jupyter打开ipynb后,还没有运行cell,反复报错

今天遇到了一个比较奇怪的问题&#xff1a; 这个原因是当前目录下有一个code.py的文件&#xff0c;一旦打开ipynb&#xff0c;就是先执行code.py&#xff0c;而且遇到报错&#xff0c;还会反复执行&#xff0c;导致内核崩溃。

Windows 11 家庭中文版找不到组策略文件gpedit.msc

最近因为调整日期问题需要用到组策略文件gpedit.msc,但是发现找不到文件 在按键盘 winR 打开运行界面输入 gpedit.msc 回车 Windows找不到文件’gpedit.msc’。请确定文件名是否正确后&#xff0c;再试-次。 检查电脑Windows系统版本 是 Windows 11 家庭中文版 果断早网上搜…

生信豆芽菜-单基因预后

网址&#xff1a;http://www.sxdyc.com/panCancerPrognosis 该工具主要用于查看单基因在泛癌的预后情况&#xff0c;这里默认用火山图展示 提交后等待运行成功即可&#xff0c;还可以关注公众号&#xff1a;豆芽数据分析

617-合并二叉树

题目&#xff1a; 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新二叉树。合并的规则是&#xff1a;如果…

How to install GrayLog5.1.2 with one-click script

先决条件&#xff1a; CentOS7.9 OpenSearch2.7 环境下安装 GrayLog5.1 基础环境及组件版本说明 1、CentOS7.9 2、GrayLog5.1.2 3、MongoDB6.0 4、OpenSearch2.8 1. 准备一台 Centos 7.9 主机 最低配置要求 CPU*8 内存16GB HDD500 正式环境根据需要来 2. 一键安装属于…

clickHouse部署

docker仓库地址 https://hub.docker.com/ 1、docker环境搭建 # 1.先安装yml yum install -y yum-utils device-mapper-persistent-data lvm2 # 2.设置阿里云镜像 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 3.查…

【C语言】回调函数,qsort排序函数的使用和自己实现,超详解

文章目录 前言一、回调函数是什么二、回调函数的使用1.使用标准库中的qsort函数2.利用qsort函数对结构体数组进行排序 三、实现qsort函数总结 先记录一下访问量突破2000啦&#xff0c;谢谢大家支持&#xff01;&#xff01;&#xff01; 这里是上期指针进阶链接&#xff0c;方便…

季度到季度的组件选择

组件&#xff1a;<template><div class"quarter"><div class"input-wrap" id"closeId" mouseover"handler" click.stop"btn" :style"{color:colorItem}"><i class"el-icon-date"&…

React Native文本添加下划线

import { StyleSheet } from react-nativeconst styles StyleSheet.create({mExchangeCopyText: {fontWeight: bold, color: #1677ff, textDecorationLine: underline} })export default styles

无涯教程-Perl - return函数

描述 此函数在子例程,块或do函数的末尾返回EXPR。 EXPR可以是标量,数组或哈希值&#xff1b;context将在执行时选择。如果没有给出EXPR,则在列表context中返回一个空列表,在标量context中返回undef,在空context中不返回任何内容。 语法 以下是此函数的简单语法- return EXP…

程序设计语言基础知识

1.1程序设计语言的基本概念 1、低级语言与高级语言&#xff1a; 低级语言&#xff1a;汇编语言 高级语言&#xff1a;常见的有Java、C、C、PHP、Python、Delphi等 2、翻译形式&#xff1a;汇编、解释、编译 3、程序设计语言的定义&#xff1a;语法、语义、语用 4、程序设计语言…

汽配企业WMS系统:提升作业效率与过程管控

随着汽配企业竞争的加剧和业务模式的复杂化&#xff0c;许多企业意识到提高仓库作业效率和成本控制能力是企业成功的关键。因此&#xff0c;越来越多的企业选择引入WMS仓储管理系统。然而&#xff0c;汽配企业产品复杂&#xff0c;且从业的人员大部分是老一辈人员&#xff0c;内…

ROS2学习(二)工作空间,节点

工作空间介绍 workspace 是存放整个项目的大目录。 其中包含&#xff1a; src&#xff1a;源码。 build&#xff1a;编译文件。 install&#xff1a;安装空间&#xff0c;存放编译成功后的目标文件。 log&#xff1a;日志。 我们新建一个工作空间目录&#xff0c;其中包…

15W网络有源音箱 校园广播音箱 poe广播音箱

SV-7042T 15W网络有源音箱 校园广播音箱 poe广播音箱 一、描述 SV-7042T是深圳锐科达电子有限公司的一款壁挂式网络有源音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率15W。同时它可以外接一个15W的无源…

Cenos7 搭建Minio最新版集群部署服务器(一)

------> 道 | 法 | 术 | 器 | 势 <------ 多台服务器间免密登录|免密拷贝 Cenos7 搭建Minio集群部署服务器(一) Cenos7 搭建Minio集群Nginx统一访问入口|反向动态代理(二) Spring Boot 与Minio整合实现文件上传与下载(三) 附录查看安装的Minio版本: [rootwww…

计算机竞赛 python opencv 深度学习 指纹识别算法实现

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python opencv 深度学习 指纹识别算法实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;4分创新点&#xff1a;4分 该项目较为新颖…

清华团队领衔打造,首个AI agent系统性基准测试网站问世AgentBench.com.cn

AI 智能体,或自主智能代理,不仅是诸如贾维斯等科幻电影中的人类超级助手,也一直是现实世界中 AI 领域的研究热点。尤其是以 GPT-4 为代表的 AI 大模型的出现,将 AI 智能体的概念推向了科技的最前沿。 在此前爆火的斯坦福“虚拟小镇”中,25 个 AI 智能体在虚拟小镇自由生长…

轧钢传动控制系统液压比例阀控制器

轧钢传动控制系统是用于控制轧钢机械的电气系统&#xff0c;包括调速和控制系统两部分。 调速系统主要用来平滑调节转速&#xff0c;其核心部件是直流电动机调速单元。控制系统主要用于调节和稳定轧机的工作状态&#xff0c;使轧制过程始终处于最佳工作状态&#xff0c;其核心…

高忆管理:爆仓是什么意思?

爆仓是指在金融商场中&#xff0c;持有的某种资产价格大幅下跌&#xff0c;导致出资者的保证金不足以支持持仓&#xff0c;被逼平仓的现象。在股票、期货、外汇等商场中均或许呈现爆仓现象。在本文中&#xff0c;咱们将从多个视点分析爆仓的含义、原因和影响。 一、爆仓的含义 …

用于网页抓取的最佳 Python 库

探索一系列用于网页抓取的强大 Python 库&#xff0c;包括用于 HTTP 请求、解析 HTML/XML 和自动浏览的库。 网络抓取已成为当今数据驱动世界中不可或缺的工具。Python 是最流行的抓取语言之一&#xff0c;拥有一个由强大的库和框架组成的庞大生态系统。在本文中&#xff0c;我…