Docker-Dockerfile案例(一)

Docker之Dockerfile案例演示 scratch相对于java中的Object2.自定义镜像mycentos我们从官方pull下来的centos镜像是mini版的,所以不带有vim这些基础命令,那我们就来自定义一个镜像,功能比官方下载的强大点,同时运用下各个指令。2.1 编写首先我们来编写对应的Dockerfile文件。内容如下EXPOSE 802.2 构建然后将脚本构建成对应的镜像文件。docker build -f dockerfile名称 -t 新建的镜像名:TAG .查看镜像2.3 运行运行镜像文件。 阅读详情

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况

Docker基本命令

Dockerfile(本小节属于)

Docker镜像

Docker仓库

Docker原理

Docker网络&存储&日志

Docker-Compose

Docker番外篇

前面我们经过几个小节的讲解,把常用的Dockerfile的参数都大概讲解了一次,今天这小节我们将结合实际需求来讲解。

需求

1.要求使用基础镜像centos:7

2.添加作者的邮件

3.安装nginx

4.暴露80 和443 端口

5.工作目录/root

6.使用nginx用户启动nginx

7.添加要有环境变量,key,value可以自己定义

8.添加本地的文件首页文件,替换nginx默认的首页文件

9.配置nginx启动

拆解需求

基础镜像,这个比较简单,只需要使用标准使用语句编写即可,唯一需要注意就是名字和实际匹配上。因为默认的镜像都是官方镜像,他可以简写,而我们自己是修改了tag的镜像是不能简写的。

docker.io/library/centos:7
centos:7
# 这实际上是一个镜像
FROM centos:7
#或者
FROM docker.io/library/centos:7

​​​​​​​

作者,这个也比较简单,只需要使用标准使用语句编写即可。

MAINTAINER xxx@xxx.com

安装nginx,这个说简单也简单,说复杂也算复杂。因为我们用的是centos7的镜像,而centos7目前已经过期,所以第一件事就是要更换源,更换源以后,还要考虑版本的问题,当然这里未考虑版本的问题,只考虑功能。

#这里用的命令,必须是FROM镜像里面必须有的命令
#如果没有就必须选其他方法,比如我其实在写的是写的wget
#如果通过网络下载还必须考虑容器能否上网的问题
RUN rm -rf /etc/yum.repos.d/*.repo
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum -y install epel-release
RUN yum -y install nginx

暴露端口,这个比较简单,只需要使用标准使用语句编写即可。

EXPOSE 80 443

工作目录,如果为了减少干扰,这个操作最好放到后面,所以动态步骤都做完了再写这个。

WORKDIR /root

用户,这个和工作目录一样,也尽量放到后面,还有一个要考虑就是nginx这个用户是否会被自动创建,如果不会则需要你通过RUN命令创建用户。

USER nginx

环境变量,这个也比较简单,只需要使用标准使用语句编写即可,也尽量放到后面

ENV A=B

复制本地文件,需要考虑就是应该放置那个目录(需要你对nginx比较了解),我这里就直接给出来对应的目录。

ADD index.html /usr/share/nginx/html/

nginx启动,这里我们就不用nginx的标准方案,因为不是所有软件都有自己前台启动方式。所以有些镜像会使用一个tail -f命令打开某个文件方式来做启动命令,确保无论里面的应用软件是否正确,都不影响容器运。当出现应用无法去启动的时候可以通过exec进入容器进行检查和修复。当然这个也是一个具有争议的问题(因为如果使用业务启动命令来容器,如果出现异常,容器无法启动,也无法进入容器检查修复,需要经过重新构建镜像才能恢复)

RUN nginx
ENTRYPOINT ["tail", "-f", "/etc/hosts"]
#实际这个并不会成功,因为不同的命令层是不一样的

合并起来就是这样的:

mkdir docker
cd docker
touch index.html
echo "this is docker test" > index.html
touch Dockerfile
​​​​
vi Dockerfile

FROM centos:7
MAINTAINER xxx@xxx.com
RUN rm -rf /etc/yum.repos.d/*.repo
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum -y install epel-release
RUN yum -y install nginx
ADD index.html /usr/share/nginx/html/
EXPOSE 80 443
WORKDIR /root
ENV A=B
ENTRYPOINT ["sh", "-c", "nginx & tail -f /etc/hosts"]
​​​​​
# 构建镜像
docker build -t nginx:test .

# 创建容器,并暴露80端口
docker run -itd -p80:80 nginx:test

# 访问容器
curl localhost

图片

总结

我们前面的命令单独写出来其实都没有问题,但是组合到一起使用就会遇到问题,下面就是我是我在编写这个Dockerfile的遇到的问题

1.下载repo本来是使用的wget命令,但是默认的镜像里面没这个命令,所以我更换成了curl命令。

2.安装nginx的时候不记得需要先安装epel源,centos的默认源里面是没有nginx的。

3.本来打算是使用nginx用户启动的,但是nginx默认的80端口,nginx这个用户作为普通用户无法启动1024以下的端口,而且还出现root安装的软件,nginx用户去启动服务的时候部分文件权限不足的情况,所以后来这个功能被取消。

4.启动使用命令原来写的是nginx命令启动,但是由于使用的RUN命令,这个命令是单独的一层,在实际上不会生效,后来是把启动命令和 tail 这个前台命令放到一起才解决。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

Docker Dockerfile Dockerfile 是一个文本文件,包含了构建 Docker 镜像的所有指令。Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。通过定义一系列命令和参数,Dockerfile 指导 Docker 构建一个自定义的镜像。 阅读详情

相关推荐

服务器安装Ubuntu 18.04.2 LTS超详细步骤(小白图文详解)

服务器安装Ubuntu 18.04.2 LTS超详细步骤(小白图文详解) 本文不包括启动盘制作步骤,相关内容可自行百度 华为服务器 1 插入u盘,关机重启 2 初始化界面后进入到系统的BIOS设置界面 (华为服务器按Del键,不同品牌方法不同) 3 进入的时候,华为的服务器默认设置了BIOS密码,因此需要输入之前预设的密码。 注意密码大小写问题,若密码输错三次,则需重启 4 密码输入以后,进入...

crystalbang的博客 2万+

自己写过的两个Dockerfile文件

 记录一下自己写过的两个Dockerfile文件 第一个是利用docker发布nginx的文件命令:   Dockerfile内容: FROM centos ADD nginx-1.12.2.tar.gz /usr/local/src RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel...

sky_xin的专栏 1195

PLS-SEM(偏最小二乘路径建模)模型拟合优度指标

PLS-SEM(偏最小二乘路径建模)是一种基于方差的分析方法,侧重于预测导向,通过迭代优化路径系数和外部权重来最大化潜变量的解释方差(R²)。其评估指标分为外部测量模型和结构模型两部分:外部测量模型关注潜变量与显变量的关系,通过标准化载荷(>0.7)、信度指标(Cronbach’s α、复合信度CR>0.7)、聚合效度(AVE>0.5)和区分效度(Fornell-Larcker标准、HTMT<0.85)来评估模型的可靠性和有效性。结构模型则检验潜变量间的因果关系,通过路径系数(β值)

wewil_lwin的博客 3235

docker容器:docker镜像的三种创建方法及dockerfile案例

本文主要介绍docker镜像的三种创建方法:基于现有镜像创建、基于本地模板创建、基于dockerfile创建,并且详细讲解了dockerfile结构及分层、联合文件系统、docker镜像加载原理、dockerfile操作常用的指令:FROM指令、MAINTAINER 指令、RUN指令、ENTRYPOINT指令、CMD指令、EXPOSE指令、ENV指令、ADD指令、COPY指令、VOLUME指令等。并通过dockerfile创建了httpd实例、sshd实例、systemd实例、nginx实例等

云计算之路 7221

MT4-EA自动化交易研究笔记(2022-04-22)

自从接触到mt4的EA自动化交易,更让我这个10多年的老程序员看到了曙光,目前来看也确实出了一点成果,只是是否能稳定盈利有待时间的考验,所以开此专栏,一来做做记录与分析,更好的优化我的EA,二来也希望能与更多的高手交流,以完善我的交易系统

t35254056的博客 2291

PlutoSDR在matlab中的环境配置(包括驱动和硬件支持包)

双击下载到的驱动,除了点击接受协议和设置安装路径,其他只要点击下一步或者安装即可。登录或者注册你的账号,选择你的matlab版本(这里我的是2023b),点击下一步。设置安装路径,并选择我接受,点击下一步,即可安装完成,并在安装路径中得到。完成后,打开设备管理器,在端口和通用串行总线设备一栏,即可看见下图。点击进入,选择相应的系统安装包,这里我选择的Windows。可看到我们要安装的Pluto支持包,安装即可。右击桌面matlab,选择打开文件所在位置。右上角搜索pluto,选择并点击下一步。

weixin_53160338的博客 4867

如何从docker镜像里提取dockerfile

hello,大家好,今天在玩docker的时候发现了很好用的东西,他就是用来提取镜像中的dockerfile的。这个是前者留下来的镜像,但是dockerfile被删除了,现在想知道dockerfile里面是如何写的,然后去查了查就有了新的发现——通过镜像来提取dockerfile,接下来我就把方法分享给大家。 从镜像中提取dockerfile的两种方法 1、history参数 我们可以直接用docker自带的参数来查看镜像的dockerfile,但有一点就是看的不完全,只能看到前面的一小部分; 例如: #d

liu_chen_yang的博客 1万+

EMC中的RE测试与整改

测试主要测试电子、电气设备或系统在正常工作时自身对外界的辐射干扰强度,包括来自电路板、机箱、电缆及连接线等所有部件的辐射骚扰。分为:磁场辐射和。其中后者较为应用普遍。测试频段根据不同标准要求不一致。手机测试的频段主要为30-1000MHZ。需要注意的是设备在进行RE测试时要求尽可能满配置,满负荷的运行。同时RE也是EMC中的难点。

学海无涯的专栏 1671

Docker镜像的创建方法及Dockerfile案例

但是当编写一个新的Dockerfile文件来基于A镜像构建一个镜像(比如为B镜像)时,这时构造A镜像的Dockerfile文件中的ONBUILD指令就生效了,在构建B镜像的过程中,首先会执行ONBUILD指令指定的指令,然后才会执行其它指令。联合文件系统(unionFS):分层、轻量级并且高性能的文件系统,即一层一层叠加然后制作成的镜像,底层为内核加载,然后是rootfs系统,再上层是只可读的基础镜像,镜像启动后成为容器即为可读可写层此层保存数据等,然后可以再打包成一个新的镜像保存数据。

weixin_44112402的博客 3245

R语言使用mlr包创建回归任务、指定回归学习函数为KNN回归模型、网格搜索、交叉验证调节KNN模型的超参数K获取模型最佳的K值、可视化KNN模型的不同K值和MSE指标之间关系图

R语言使用mlr包创建回归任务、指定回归学习函数为KNN回归模型、网格搜索、交叉验证调节KNN模型的超参数K获取模型最佳的K值、可视化KNN模型的不同K值和MSE指标之间关系图

statistics+insight+vista+power 280

深度学习实战35-图卷积神经网络GCN模型的搭建与应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战35-图卷积神经网络GCN模型的搭建与应用,GCN是一种用于处理图结构数据的深度学习模型,它可以捕捉节点之间的拓扑关系和局部特征,并进行图级别的预测和分类任务。下面将介绍如何搭建并应用GCN模型。

微学AI的博客 2226

利用Dockerfile制作自己的Docker镜像

制作属于自己的Docker镜像,一般有两种方式,第一种为commit方式,利用已有的镜像,运行后安装定制自己需要的环境,然后生成镜像;另一种就是build方式,通过编写Dockerfile命令脚本进行生成镜像。 方法2:docker build # 编写Dockerfile命令脚本文件自动化制作 image 使用Dockerfile是更推荐的方式,这样可以让使用者更清晰地看到这个镜像的制作细节,逻辑清晰,便于管理。 创建存放Dockerfile的目录,后续操作将在这个目录下进行。 mkdir

u010797364的博客 1万+

MacBook Air老本重装系统

手里的这个本子型号是A1466,cpu i5,4G内存,硬盘ssd 120G。 重装系统可以在原系统上升级到更新版本,或者用U盘安装。 先确定,这个本子可以安装什么系统。 最权威的信息当然是apple的官网,地址:https://support.apple.com/zh-cn/HT211683 在“检查兼容性”中,可以依次检查每个系统兼容的硬件型号。Mojave是A1466能安装的最高版本。 确认兼容性后,下一步就是下载安装文件。还是这个页面稍下面一点可以找到。 这里告诉用户文件可以在什

bigwood99的博客 2万+

docker镜像的三种创建方法及dockerfile案例

如果在docker run时指定了命令或者 镜像中有ENTRYPOINT指令则CMD程序不会执行。docker RUN优先级>ENTRYPOINT指令>CMD指令。

mikechen1的博客 6038

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

docker之Dockerfile

Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,Dockerfile是软件的原材料Docker镜像是软件的交付品Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

weixin_44868572的博客 1255

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【docker】Dockerfile指令讲解,与企业案例应用

通过以上企业案例的应用,我们可以看到 Dockerfile 的常用指令如何在实际中帮助团队构建、部署和管理 Docker 镜像。不同的公司和项目可以根据需求选择合适。

m0_74282926的博客 1319

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【docker】dockerfile构建镜像

docker run创建并启动容器,再通过docker exec/cp 等容器操作指令修改容器内容,然后再去用docker commit提交成新的镜像。

manyulanlanlu的博客 1万+

Docker之DockerFile

DockerFile在Docker中是非常重要的一部分,在之前的文章使用过DockerFile build过镜像模板,Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。 构建三步骤:编写Dockerfile文件,上篇文章写过==》docker build==》docker run 文件是什么样子?以centos为例: https://hub.dock...

程序员 1667

Dockerfile和Docker-compose

Dockerfile和Docker Compose是用于构建和管理 Docker 容器的两个工具,但它们的作用和使用方式不同。

志当存高远 3991

Docker-什么是DockerFile文件?

1、Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段:Dockerfile是软件的原材料、Docker镜像是软件的交付品、Docker容器则可以认为是软件的运行态。2、Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时,会真正开始提供服务;

棉花糖老丫 2319
上一篇: Docker-Dockerfile讲解(三)
下一篇: Dokcer-Dockerfile案例(二)
dessler
博客等级 码龄20年 3057粉丝 434原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值