Docker五 | DockerFile

目录

DockerFile 

常用保留字

FROM

MAINTAINER

RUN

EXPOSE

WORKDIR

USER

ENV

VOLUME

ADD

COPY

CMD

ENTRYPOINT

DockerFile案例

前期准备

编写DockerFile文件 

运行DockerFile 

运行镜像


DockerFile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。通过DockerFile构建镜像,只需如下三个步骤即可:

  1. 编写DokcerFile文件
  2. docker build命令构建镜像
  3. docker run镜像运行容器实例

DockerFile 

常用保留字

FROM

指定一个已存在的镜像作为模版,第一条必须是FROM

MAINTAINER

描述镜像维护者的姓名和邮箱地址

RUN

镜像构建的时候需要运行的命令

EXPOSE

当前容器对外暴露的端口

WORKDIR

创建容器后,终端默认进来的工作目录

USER

指定该镜像以什么样的用户去执行,不指定默认为root

ENV

用于在后续构建过程中设置环境变量,可以在后续指令中使用

VOLUME

用于数据保存和持久化工作

ADD

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

COPY

拷贝文件和目录到镜像中

COPY src dest

CMD

指定容器启动后要干的事情(在容器启动之后要干的事情,而run时在镜像构建时要运行的命令)

docker run 携带参数的话会覆盖CMD指令

CMD可以指定多个,但只有最后一个生效

ENTRYPOINT

类似于CMD指令,但ENTRYPOINT不会被docker run 后的命令覆盖,而这些命令会被当做参数送给ENTRYPOINT指令指定的程序

可以与CMD一起使用,这里的CMD等于在给ENTRYPOINT传参

DockerFile案例

自定义镜像Centos,Centos7镜像具备vim+ifconfig+jdk8

前期准备

 将jdk-8u161-linux-x64.tar.gz文件放到myfile目录下

[root@localhost myfile]# pwd
/root/myfile
[root@localhost myfile]# ll
总用量 4
-rw-r--r-- 1 root root 670 12月 29 15:17 Dockerfile
-rw-r--r-- 1 root root   0 12月 29 15:08 jdk-8u161-linux-x64.tar.gz

编写DockerFile文件 

 在/root/myfile目录下vim Dockerfile文件

FROM centos:7
ENV MYPATH /usr/local                                                                          
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim 
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u161-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一>
ADD jdk-8u161-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_161
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80

运行DockerFile 

docker build -t 镜像名称:标签名称 .

 经过等待后运行成功

[root@localhost myfile]# docker build -t mycentos7:1.0 .
[+] Building 15.5s (12/12) FINISHED                                             docker:default=> [internal] load build definition from Dockerfile                                      0.0s=> => transferring dockerfile: 671B                                                      0.0s=> [internal] load .dockerignore                                                         0.0s=> => transferring context: 2B                                                           0.0s=> [internal] load metadata for docker.io/library/centos:7                              15.4s=> [1/7] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac31  0.0s=> [internal] load build context                                                         0.0s=> => transferring context: 45B                                                          0.0s=> CACHED [2/7] WORKDIR /usr/local                                                       0.0s=> CACHED [3/7] RUN yum -y install vim                                                   0.0s=> CACHED [4/7] RUN yum -y install net-tools                                             0.0s=> CACHED [5/7] RUN yum -y install glibc.i686                                            0.0s=> CACHED [6/7] RUN mkdir /usr/local/java                                                0.0s=> CACHED [7/7] ADD jdk-8u161-linux-x64.tar.gz /usr/local/java/                          0.0s=> exporting to image                                                                    0.0s=> => exporting layers                                                                   0.0s=> => writing image sha256:f1976b20af22d403a40902220dfa741412a3bb1dab65771bf43d79650f9d  0.0s=> => naming to docker.io/library/mycentos7:1.0                                          0.0s

运行镜像

检查vim工具,ifconfig工具和jdk环境 

[root@localhost myfile]# docker images
REPOSITORY                                        TAG       IMAGE ID       CREATED          SIZE
mycentos7                                         1.0       f1976b20af22   13 minutes ago   585MB
[root@localhost myfile]# docker run -it f1976b20af22 /bin/bash
[root@dde119c40796 local]# dir
bin  etc  games  include  java	lib  lib64  libexec  sbin  share  src
[root@dde119c40796 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.5  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:ac:11:00:05  txqueuelen 0  (Ethernet)RX packets 8  bytes 656 (656.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@dde119c40796 local]# vim a.txt

 发现制作的镜像没有问题

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

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

相关文章

JavaScript----数组及操作方法

1. 数组的介绍 数组就是一组数据的集合&#xff0c;javascript 中&#xff0c;数组里面的数据可以是不同类型的数据&#xff0c;好比 python 里面的列表。 2. 数组的定义 // 实例化对象方式创建 var aList new Array(1,2,3);// 字面量方式创建&#xff0c;推荐使用 var aLi…

【LeetCode】修炼之路-0001-Two Sum(两数之和)【python】【简单】

前言 计算机科学作为一门实践性极强的学科,代码能力的培养尤为重要。当前网络上有非常多优秀的前辈分享了LeetCode的最佳算法题解,这对于我们这些初学者来说提供了莫大的帮助,但对于我这种缺乏编程直觉的学习者而言,这往往难以消化吸收。&#xff08;为什么别人就能想出这么优雅…

《异常检测——从经典算法到深度学习》25 基于深度隔离林的异常检测算法

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

Red Hat系列Docker安装与移除

目录 Docker 安装 Docker 移除 Docker 安装 添加 Docker 官方 YUM 源 sudo yum-config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo 安装 Docker Engine sudo yum install -y docker-ce docker-ce-cli containerd.io 启动 Docker 服务并…

一篇文章掌握 NestJS 所有的生命周期以及生命周期的执行时机

前言 NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架&#xff0c;它使用 TypeScript 作为开发语言&#xff0c;也支持原生的 JavaScript。在 NestJS 中&#xff0c;生命周期事件是一个重要的概念。在我们构建和管理应用程序时&#xff0c;有时需要在特定…

Prometheus快速入门实战

Prometheus快速入门实战 1. 介绍 prometheus受启发于Google的Brogmon监控系统&#xff08;相似kubernetes是从Brog系统演变而来&#xff09;。 2016年5月继kubernetes之后成为第二个加入CNCF基金会的项目&#xff0c;同年6月正式发布1.0版本。2017年底发布基于全新存储层的2.…

istio 应用灰度发布部署注意点(包括 deploy、svc、gw、vs 和 dr)

创建 deployment 分别部署两个版本的 deployment。在灰度发布的过程中&#xff0c;注意 pod 标签的设置&#xff0c;后续 svc 和 dr 就是根据标签来划分 pod apiVersion: apps/v1 kind: Deployment metadata:labels:app: bbjcxtversion: v1name: bbjcxtnamespace: mm-nbxt-hu…

【数据结构】C语言实现双链表的基本操作

双链表及其基本操作的实现 导言一、单链表与双链表二、双链表类型的创建三、双链表的初始化四、双链表的创建五、双链表的遍历六、双链表的查找七、双链表的插入八、双链表的删除结语 导言 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 经过…

NSNotificationCenter通知

使用观察者模式来实现的用于跨层传递消息的机制 参考文章 ios消息机制(NSNotification 和 NSNotificationCenter) 透彻理解 NSNotificationCenter 通知&#xff08;含实现代码&#xff09; - 掘金 NSNotificationCenter property (class, readonly, strong) NSNotification…

【.NET Core】匿名方法与扩展方法

【.NET Core】匿名方法与扩展方法 文章目录 【.NET Core】匿名方法与扩展方法一、匿名方法1.1 匿名方法定义1.2 通过Delegate关键字创建委托匿名方法1.3 通过Action关键字创建无返回值的匿名方法1.4 通过Func关键字创建有返回值的匿名方法1.5 使用Lambda表达式表示匿名方法 二、…

反射讲解(有图有真相)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、反射是什么&#xff1f;二、反射有啥好处&#xff1f;1. 没反射2. 有反射 三、反射的常用方法1. 获取 Class 对象&#xff1a;2. 获取类的构造方法&#xf…

python统计学-两个总体均值差的区间估计

简介 两个总体均值差的区间估计是指&#xff0c;在给定的置信水平下&#xff0c;估计两个总体均值差的置信区间。两个总体均值差的区间估计的公式为&#xff1a; X ‾ 1 − X ‾ 2 t α / 2 , n 1 n 2 − 2 s 1 2 n 1 s 2 2 n 2 \overline{X}_1 - \overline{X}_2 \pm t_{\a…

数组的声明

概要&#xff1a; 数组的声明分为三个部分 第一部分&#xff1a;数组中元素的数据类型 第二部分&#xff1a;数组名 第三部分&#xff1a;数组标识符(方括号)和数组大小 一、测试代码 #include<stdio.h> int main() {int arr_int[10];char* arr_str[10];arr_in…

软件测试/测试开发丨Selenium环境安装配置

一、selenium 环境配置 1、下载浏览器 目前比较常用的浏览器是 Google Chrome 浏览器&#xff0c;所以本教程以 chrome 为主&#xff0c;后面简介一下其他浏览器的环境配置。 chrome 下载: www.google.cn/chrome/ 2、chromedriver 环境配置 chromedriver 是chromedriver提…

R语言【base】——sprintf():接受格式化文本和变量值来搭建字符型向量。

Package base version 4.2.0 Parameters sprintf(fmt, ...)gettextf(fmt, ..., domain NULL, trim TRUE) 参数【fmt】&#xff1a;格式字符串的字符向量&#xff0c;每个字符串最多 8192 个字节。 参数【...】&#xff1a;要传递给参数【fmt】的值。仅支持逻辑向量、整数向…

【C++】引用详解

前言 在学习C语言时&#xff0c;我们通常会遇到两个数交换的问题&#xff0c;为了实现这一功能&#xff0c;我们会编写一个经典的Swap函数&#xff0c;如下所示&#xff1a; void Swap(int *a, int *b) {int tmp *a;*a *b;*b tmp; } 然而&#xff0c;这个Swap函数看起来可…

CEC2017(Python):五种算法(SSA、RFO、OOA、PSO、GWO)求解CEC2017

一、5种算法简介 1、麻雀搜索算法SSA 2、红狐优化算法RFO 3、鱼鹰优化算法OOA 4、粒子群优化算法PSO 5、灰狼优化算法GWO 二、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem defin…

Kubernetes 学习总结(43)—— Kubernetes 从提交 deployment 到 pod 运行的全过程

当用户向 Kubernetes 提交了一个创建 deployment 的请求后&#xff0c;Kubernetes 从接收请求直至创建对应的 pod 运行这整个过程中都发生了什么呢&#xff1f; kubernetes 架构简述 在搞清楚从 deployment 提交到 pod 运行整个过程之前&#xff0c;我们有先来看看 Kubernete…

Ubuntu 20.04使用Livox Mid-360

参考文章&#xff1a; Ubuntu 20.04使用Livox mid 360 测试 FAST_LIO-CSDN博客 一&#xff1a;Livox mid 360驱动安装与测试 前言&#xff1a; Livox mid360需要使用Livox-SDK2&#xff0c;而非Livox-SDK&#xff0c;以及对应的livox_ros_driver2 。 1. 安装Livox-SDK2 参…

golang 中判断结构体中某一个属性是否存在(以区分零值)

原问题地址&#xff1a;validate-struct field if it exists 有定义结构 package mainimport ("fmt""encoding/json" )type User struct {Name string json:"name,omitempty"Username *string json:"username,omitempty"Email …