当前位置: 首页 > news >正文

【Docker】用Dockerfile制作个人的镜像文件

作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等
作者主页: 七七的个人主页
文章收录专栏: 七七的闲谈
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

在这里插入图片描述


前言

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


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

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

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 xdef test_two():print("正在执行----test_two")x = "hello"assert xdef test_three():print("正在执行----test_three")a = "hello"b = "hello world"assert a in bif __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 

关于【Docker】用Dockerfile制作个人的镜像文件的详解,七七就先分享到这里了,如果你认为这篇文章对你有帮助,请给七七点个赞吧,如果发现什么问题,欢迎评论区留言!!💕💕

相关文章:

【Docker】用Dockerfile制作个人的镜像文件

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…...

前端面试基础面试题——4

1.谈谈你对 ES6 的理解 2.说说你对 promise 的了解 3.解构赋值及其原理 4.Vue常用的修饰符及使用的场景 5.vue 中 key 值的作用 6.什么是 vue 的计算属性&#xff1f; 7.watch的作用是什么 8.计算属性的缓存和方法调用的区别 9.响应式系统的基本原理 10.vue-loader …...

【08期】ArrayList常见面试题

简介 ArrayList是我们开发中非常常用的数据存储容器之一&#xff0c;其底层是数组实现的&#xff0c;我们可以在集合中存储任意类型的数据&#xff0c;ArrayList是线程不安全的&#xff0c;非常适合用于对元素进行查找&#xff0c;效率非常高。 线程安全性 对ArrayList的操作…...

Android studio之GridView使用

目录 效果图&#xff1a;![在这里插入图片描述](https://img-blog.csdnimg.cn/86e4a48a71164dec82613d58b1fbaa1c.jpeg)代码&#xff1a; 效果图&#xff1a; 代码&#xff1a; UserGridviewAdapter package com.example.gridviewpro.Adapter;import android.content.Contex…...

Ubuntu系统环境搭建(七)——Ubuntu安装MySQL8.0

ubuntu环境搭建专栏&#x1f517;点击跳转 Ubuntu系统环境搭建&#xff08;七&#xff09;——Ubuntu安装MySQL8.0 文章目录 Ubuntu系统环境搭建&#xff08;七&#xff09;——Ubuntu安装MySQL8.01、安装1.1、下载1.2、解压安装 2、配置工作2.1、基本设置2.1.1、文件夹重命名…...

Nginx详解 三:高级配置

文章目录 1. 网页的状态页2. Nginx第三方模块2.1 echo模块 3. 变量3.1 内置变量3.1.1 示例 3.2 自定义变量3.2.1 自定义访问日志3.2.2 自定义json 格式日志 3.4 Nginx压缩功能 4. HTTPS4.1 Nginx的HTTPS工作原理4.2 启用功能模块的配置过程 5、自定义图标 1. 网页的状态页 基于…...

mysql 表备份 遇到的问题 【全网最全】

目录 省流&#xff1a; 正文&#xff1a; 1、报错 2、原因 3、解决方法 方法一&#xff1a;关闭 ENFORCE_GTID_CONSISTENCY &#xff08;不推荐&#xff09;&#xff1a; 方法二&#xff08;推荐&#xff09;&#xff1a; 4、开启关闭GTID 省流&#xff1a; 不推荐如…...

11.添加侧边栏,并导入数据

修改CommonAside的代码&#xff1a; <template><div><el-menu default-active"1-4-1" class"el-menu-vertical-demo" open"handleOpen" close"handleClose":collapse"isCollapse"><!--<el-menu-it…...

ThinkPHP 通用的API格式封装

ThinkPHP 通用的API格式封装 1.创建status.php 用于设置通用的状态码返回枚举类2.将API返回格式统一封装3.重写BaseController中的__call方法4.在控制器下面新建Error控制器&#xff0c;然后添加__call方法 1.创建status.php 用于设置通用的状态码返回枚举类 <?phpreturn[…...

自己动手写数据库:实现一个小型 SQL 解释器(下)

本节我们完成 SQL 解释器的最后一部分&#xff0c;它涉及到数据的删除和更改&#xff0c;首先我们看删除语句的解析。我们先看 delete 对应的语法&#xff1a; Delete -> DELETE FROM ID (where Predicate)?从语法规则可以看出&#xff0c;delete 语句必须以关键字 DELETE…...

2023年信息安全管理与评估任务书模块一网络平台搭建与设备安全防护

全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 任务书 模块一 网络平台搭建与设备安全防护 比赛时间 本阶段比赛时长为180分钟。 赛项信息 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 网络平台搭建与设备安全防护 任务1 网络平台搭建 9:00- 12:00 …...

JS -RSA 明文加密--用户密码加密

1 配置文件引入 加密包 package.json "jsencrypt": "^3.0.0-rc.1",2 加密公钥配置 import { JSEncrypt } from jsencrypt import request from "/utils/request";const RSA_PUBLIC_KEY "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJVol0cJ…...

clickhouse中replacingMergeTree

ReplacingMergeTree是在MergeTree上添加了去重的功能&#xff0c;但是这个功能不可控&#xff0c;合并是一个后台的操作&#xff0c;除非手动触发&#xff0c;不然无法控制&#xff0c;并且它会删除具有相同(区内)主键的重复项。 特点&#xff1a; 1&#xff0c;去重时机不定&a…...

pdf怎么转换成word?

随着数字化时代的到来&#xff0c;PDF(Portable Document Format)已成为最受欢迎的文档格式之一&#xff0c;因其在各种设备上的可视性和稳定性而备受推崇。然而在某些情况下&#xff0c;将PDF转换为Word文档可能是必要的&#xff0c;这使得编辑、修改和重新格式化文本变得更加…...

汇编攻城记-Cortex-M3指令集

类型 指令 全称 功能 内存访问 LDR Load register 加载字到寄存器 LDRB 加载字节到寄存器 LDRH 加载半字到寄存器 LDRSH 加载半字到寄存器&#xff0c;再带符号扩展到32位 LDRD 从连续的地址空间加载双字&#xff08;64位整数&#xff09;到…...

大语言模型之五 谷歌Gemini

近十年来谷歌引领着人工智能方向的发展&#xff0c;从TensorFlow到TPU再到Transformer&#xff0c;都是谷歌在引领着&#xff0c;然而&#xff0c;在大语言模型上&#xff0c;却被ChatGPT&#xff08;OpenAI&#xff09;抢了风头&#xff0c;并且知道GPT-4&#xff08;OpenAI&a…...

使用selenium实现对页面元素的抓取

一、背景介绍 工作中有个需求是需要对某个页面进行监控&#xff0c;但由于要监控页面数据是异步加载的&#xff0c;因此很难从状态码和返回结果层面进行校验。于是乎想到了通过判断页面元素是否存在且显示内容是否正确来达到此目标。调研了一下发现selenium可以实现对这种动态…...

大数据课程K12——Spark的MLlib概述

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的MLlib概念; ⚪ 掌握Spark的MLlib基本数据模型; ⚪ 掌握Spark的MLlib统计量基础; 一、Spark MLlib介绍 1. 概述 MLlib是Apache Spark的可迭代机器学习库。 2. 易于使用 …...

流程制造智能工厂总体架构及建设路线规划方案PPT

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除&#xff0c;更多浏览公众号&#xff1a;智慧方案文库 数字孪生智能制造(智改数转)数字化架构设计及应用..水泥智能工厂解决方案.pptx智慧制造规划设计解决方案.pptx智能工厂落…...

网络有源号角(50W-100W)社区小区广播 工地语音播报,隧道广播,钢铁广播广播系统

网络有源号角&#xff08;50W-100W&#xff09;社区小区广播 工地语音播报&#xff0c;隧道广播&#xff0c;钢铁广播广播系统 SV-7042T 50W网络有源号角 SV-7042T是深圳锐科达电子有限公司的一款壁挂式网络有源号角&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音…...

【Kali Linux高级渗透测试】深入剖析Kali Linux:高级渗透测试技术与实践

&#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于恒川的日常汇报系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏C语言初阶、C…...

DHCP中继实验

文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. 配置IP地址2.配置R1为DHCP服务器&#xff0c;能够跨网段为192.168.2.0/24网段自动分配IP地址3. 在PC3上Ping 192.168.1.1&#xff0c;确认可以Ping通 摘要&#xff1a; 本实验旨在通过配置DHCP中继实现跨网…...

C++进阶之多态

多态 多态的概念多态的定义及实现1.多态的构成条件2.虚函数3.虚函数的重写4.虚函数重写的两个例外5.C11 override 和 final6.重载、覆盖(重写)、隐藏(重定义)的对比 抽象类1.概念2.接口继承和实现继承 多态的原理1.虚函数表2.多态的原理3.动态绑定与静态绑定 单继承和多继承关系…...

QtCreator中三种不同编译版本 debug、release、profile 的区别

debug调试模式&#xff0c;编译后的可执行文件很大&#xff0c;带了很多调试符号信息等&#xff0c;方便开发阶段调试的时候进入具体的堆栈查看值。会打开所有的断言&#xff0c;运行阶段性能差速度慢&#xff0c;可能会有卡顿感觉。 release发布模式&#xff0c;编译后的可执…...

golang中map赋值

众所周知&#xff0c;golang中map是一个指针&#xff0c;既然是一个指针&#xff0c;那么参数传递、赋值应该都是指针传递&#xff0c;而下面的例子也印证了我的想法 package mainimport "fmt"func test_map2(m map[string]string) {fmt.Printf("inner: %v, %p…...

myspl使用指南

mysql数据库 使用命令行工具连接数据库 mysql -h -u 用户名 -p -u表示后面是用户名-p表示后面是密码-h表示后面是主机名&#xff0c;登录当前设备可省略。 如我们要登录本机用户名为root&#xff0c;密码为123456的账户&#xff1a; mysql -u root -p按回车&#xff0c;然后…...

【深度学习_TensorFlow】过拟合

写在前面 过拟合与欠拟合 欠拟合&#xff1a; 是指在模型学习能力较弱&#xff0c;而数据复杂度较高的情况下&#xff0c;模型无法学习到数据集中的“一般规律”&#xff0c;因而导致泛化能力弱。此时&#xff0c;算法在训练集上表现一般&#xff0c;但在测试集上表现较差&…...

uniapp授权小程序隐私弹窗效果demo(整理)

<template> <view class"dealBox"><view class"txtBox padding10"><!-- 查看协议 -->在您使用施工现场五星计划小程序之前&#xff0c;请仔细阅读<text class"goToPrivacy" click"handleOpenPrivacyContract&qu…...

c++学习之string实现

字符串 - C引用 (cplusplus.com)这里给出标准官方的string实现&#xff0c;可以看到设计还是较为复杂的&#xff0c;有成员函数&#xff0c;迭代器&#xff0c;修饰符&#xff0c;容量&#xff0c;元素访问&#xff0c;字符串操作等&#xff0c;将字符尽可能的需求都设计出来&a…...

kubevirt虚机创建svc通过NodePort的方式暴露端口

背景 存在kubevit存在的三个虚机&#xff1a; ubuntu-4tlg7 7d22h Running True ubuntu-7kgrk 7d22h Running True ubuntu-94kg2 7d22h Running True 网络没有做透传&#xff0c;pod也不是underlay网络想要通过NodePort方式暴露虚机22端口进行远程登录。 …...