0基础使用dockerfile构建容器镜像

目录

一、使用dockerfile构建镜像

1.1、dockerfile指令

1.FROM

2.RUN

3.CMD

4.ENTRYPOINT

5.EXPOSR

​编辑

6.ADD和COPY

​编辑7.volume

8.USER

二、案例1:dockerfile构建httpd镜像

构建一个指定挂载点的httpd镜像

三、案例2:构建tomcat镜像

三、案例3:构建mariadb镜像

第一步:准备一个脚本初始化并启动mysql

第二步:创建dockerfile文件


一、使用dockerfile构建镜像

除了使用docker commit把自定义容器提交成镜像外,还可以使用Dockerfile来构建自定义镜像。
什么是Dockerfile?
答: Dockerfile把构建镜像的步骤都写出来,然后按顺序执行实现自动构建镜像。就类似于脚本文件,ansible的playbook,saltstack的sls文件等。


1.1、dockerfile指令

1.FROM


FROM指令用于指定其后构建新镜像所使用的基础镜像。FROM指令必是Dockerfile文件中的首条命令。
FROM指令指定的基础image可以是官方远程仓库中的,也可以位于本地仓库,优先本地仓库

2.RUN


RUN指令用于在构建镜像中执行命令,有以下两种格式:


注意:按优化的角度来讲:当有多条要执行的命令,不要使用多条RUN,尽量使用&&符号与\符号连接成一行。因为多条RUN命令会让镜像建立多层(总之就是会变得臃肿了).

3.CMD

CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。

每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉CMD指定的命令。

4.ENTRYPOINT

ENTRYPOINT与CMD非常类似
相同点:
一个Dockerfile只写一条,如果写了多条,那么只有最后—条生效都是容器启动时才运行
不同点:
如果用户启动容器时候指定了运行的命令,ENTRYPOINT不会被运行的命令覆盖,而CMD则会被覆盖
 

5.EXPOSR

用于指定容器在运行时监听的端口

上述运行的端口还需要使用docker run运行容器时通过-p参数映射到宿主机的端口.

6.ENV

用于指定环境变量

6.ADD和COPY

用于把宿主机上的文件拷贝到镜像中

COPY的源文件只能是本地文件

7.volume

VOLUME指令用于把宿主机里的目录与容器里的目录映射.
只指定挂载点,docker宿主机映射的目录为自动生成的。

8.USER

USER指令设置启动容器的用户(像hadoop需要hadoop用户操作,oracle需要oracle用户操作),可以是用户名或UID
注意:如果设置了容器以daemon用户去运行,那么RUN,CMD和ENTRYPOINT都会以这个用户去运行镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户

9.WORKDIR

WORKDIR指令设置工作目录,类似于cd命令。不建议使用RUN cd /root ,建议使用WORKDIR

二、案例1:dockerfile构建httpd镜像

1、创建一个目录(自定义)

例如mkdir /dockerfile

2、编写dockerfile

#cd /dockerfile

#vim dockerfile_httpd

CMD指定容器运行时执行的参数或者命令

3、构建dockerfile镜像

通过dockerfile_httpd文件构建镜像(my_httpd:v1)在当前目录

拓展:如果公网源速度特别慢,可以尝试自建httpd的yum源

配置本地yum源

使用Alias别名配置 参数Indexes是以列表显示(要访问的资源)

构建一个指定挂载点的httpd镜像

使用本地yum源的构建速度明显加快

构建完成之后可以先查看镜像是否存在之后docker run 启动阿帕奇镜像 curl访问一下

可以使用docker inspect 容器id 查看是否挂载

正常的容器信息中Mounts中是没有信息的

三、案例2:构建tomcat镜像

准备好tomcat需要的jdk,tomcat等软件包,还有配置好环境变量的startup.sh和shutdown.sh文件

最好是先解压tomcat安装包之后把里面的shutdown.sh和startup.sh文件拷贝出来

编写dockerfile文件即可

注意:使用这种方式启动容器是错误的,必须使用凯特琳那启动Tomcat

优化之后的dockerfile 上面这个是拷贝格式错了 

拷贝目录必须加上后面的名称  例如tomcat 必须最后加上  /usr/local/tomcat

使用docker build 命令构建镜像

先使用lsof -i 命令查看端口占用情况 之后启动容器使用端口映射,映射容器的8080 端口到物理机

三、案例3:构建mariadb镜像

第一步:准备一个脚本初始化并启动mysql

        使用脚本而不直接使用dockerfile里的RUN指令的原因是:启动mysql服务需要使用&放到后台,但把后台符号放在RUN里会造成RUN命令有问题(&命令把任务放到后台会限制,导致任务跳过),所以单独使用脚本来做
sleep 3秒是因为初始化和启动服务需要一定的时间,等待3秒缓冲一下

第二步:创建dockerfile文件

第三步:docker build

启动容器之前先用lsof -i 命令查看端口是否被占用

最后用build的镜像启动容器 docker run -d -p 3306:3306 --name mariadb mymariadb:v1

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

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

相关文章

使用公式在Excel中指定列值的变化实现自动间隔着色(不是按照固定的行数)

如果你的文件很小,可以手工着色;但如果很大,就要借助公式来着色; 目的是什么,其中之一是:提升可读性。 一起往下看吧!! 如果你想要根据Excel某列中值的变化来间隔着色,…

Prompt Learning:人工智能的新篇章

开篇:AI的进化之旅 想象一下,你正在和一位智能助手对话,它不仅理解你的问题,还能提出引导性的问题帮助你更深入地思考。这正是prompt learning的魔力所在——它让机器学习模型变得更加智能和互动。在这篇博客中,我们将…

腾讯云轻量服务器配置nginx资源服务器

文章目录 序言:2、安装WindowsServer系统3、修改密码,启动系统4、进入系统,这里踩了一些坑5、安装Nginx6、配置nginx7、启动nginx,8、外网配置9、修改安全策略 序言: 今天项配置一个游戏资源服务器,做更新资源用&#…

uniapp 对video视频组件嵌套倍速按钮

这次接了需求是要求有倍速功能,去看了文档发现并没有倍速按钮的属性,想着手写一个吧 可最后发现原生层级太高,无论怎么样都迭不上去,就只能去找插件看看咯 找了好多插件发现都不可用,因为我这是app端,有些视…

学生时期学习资源同步-1 第一学期结业考试题2

原创作者:田超凡(程序员田宝宝) 版权所有,引用请注明原作者,严禁复制转载

【小沐学C#】C#文件读写方式汇总

文章目录 1、简介2、相关类介绍3、代码示例3.1 FileStream(流文件)3.2 StreamReader / StreamWriter (文本文件)3.2.1 StreamReader3.2.2 StreamWriter 3.3 BinaryReader / BinaryWriter (二进制文件)3.3.1…

FastWiki v0.1.0发布!新增超多功能

FastWiki 发布 v0.1.0 https://github.com/239573049/fast-wiki/releases/tag/v0.1.0 更新日志 兼容OpenAI接口格式删除Blazor版本UI删除useEffect,解决可能存在问题的bug修复对话可以看到所有对话Merge branch ‘master’ of https://gitee.com/hejiale010426/fast-wiki更新…

Spring Cloud项目整合Sentinel及简单使用

说明:Sentinel是阿里巴巴开发的微服务治理中间件,可用于微服之间请求的流量管控、权限控制、熔断降级等场景。本文介绍如何在Spring Cloud项目中整合Sentinel,以及Sentinel的简单使用。 环境 首先搭建一个简单的微服务环境,有以…

Redis到底是单线程还是多线程!,【工作感悟】

无论你是做 Python,PHP,JAVA,Go 还是 C#,Ruby 开发的,都离不开使用 Redis。 大部分程序员同学工作中都有用到 Redis,但是只限于会简单的使用,对Redis缺乏整体的认知。 无论是在大厂还是在中小…

2024年云仓酒庄:店中店增项新模式,开启葡萄酒文化新篇章

2024云仓酒庄:店中店增项新模式,开启葡萄酒文化新篇章 在葡萄酒行业蓬勃发展的今天,云仓酒庄以其独特的经营模式和创新思维,在市场中脱颖而出。2024年,云仓酒庄继续深化其战略布局,不仅在多地开设酒庄实体…

智慧路灯杆如何提升智慧城市文旅形象

今年以来,全国多地城市凭借本地独特物产、独特旅游环境等亮点火爆出圈,为城市带来显著经济增长和形象提升。文旅经济作为高附加值产业,具有高收益、高潜力等特点,还有助于推动城市经济转型和可持续发展。 推动城市文旅经济发展&am…

Linux环境(Ubuntu)上搭建MQTT服务器(EMQX )

目录 概述 1 认识EMQX 1.1 EMQX 简介 1.2 EMQX 版本类型 2 Ubuntu搭建EMQX 平台 2.1 下载和安装 2.1.1 下载 2.1.2 安装 2.2 查看运行端口 3 运行Dashboard 管理控制台 3.1 查看Ubuntu上的防火墙 3.2 运行Dashboard 管理控制台 概述 本文主要介绍EMQX 的一些内容&a…