【云原生 | Docker篇】实战Dockerfile(五)(上)

简介: 【云原生 | Docker篇】实战Dockerfile(五)(上)

实战Dockerfile



前言


博主语录:一文精讲一个知识点,多了你记不住,一句废话都没有


经典语录:别在生活里找你想要的,要去感受生活里发生的东西


Dockerfile基础知识已经在上一篇做了详细介绍,如果还不是很清楚的同学可以点击传送门再复习一遍。


传送门:【云原生 | Docker篇】深入Dockerfile_Lansonli的博客-CSDN博客


以下是实战经典十例,反复练习,可玩转Dockerfile


运行实例命令


# 修改dockerfile文件
vim Docderfile
# 构建容器看执行过程
docker build --no-cache -t demo:test -f Dockerile .
#传入构建参数
docker build --no-cache --build-arg param="11 22 33" msg="aa bb cc" -t demo:test -f Dockerfile2 .
#进入容器控制台
docker exec -it mydemo1 /bin/sh
第一例、这是我第一个Dockerfile
# 这是我第一个Dockerfile
FROM alpine
# 给镜像加个标签
LABEL maintainer="lanson @ dd" \
abc=def \
aaa=bbb cccc=ddd  
# 运行的指令,安装了软件,修改了文件,默认是用id=0 也就是root,这个基础系统的root用户
# 代表镜像构建过程中运行的命令。
RUN echo 11111
# 镜像启动如果要运行很长命令才行,容器启动执行的命令
## 1、准备一个sh文件,让镜像启动运行sh文件(大多镜像操作)
## 2、直接在CMD的位置写即可
CMD sleep 10;echo success


第二例、ARG指令和ENV指令简单使用


# 不可以引用多个


FROM alpine
LABEL maintainer="llanson @ dd" \
abc=def \
aaa=bbb cccc=ddd


#指定构建参数【构建时】


ARG aaa=aaaa


#指定环境变量【为RUN以及CMD指定环境变量的】


ENV  parm=11111


# shell* 形式; bash -c "echo 11111"


RUN echo $parm


#  exec 形式。$parm 默认拿不到ENV


RUN ["echo","$aaa"]
# 错误语法  RUN ["echo",'$parm']
# 错误语法  RUN ["echo",$parm]


# 错误语法。NOT FOUND(取不出环境变量【ENV】,ARG也是取不出)


#RUN ["echo",'${aaa}']
#RUN ["echo",${parm}]


#都是可以启动容器的命令有什么不同


#CMD sleep 1;echo $parm;echo $aaa;


# 都是可以启动容器的命令有什么不同


ENTRYPOINT sleep 1;echo $parm;


第三例、ARG指令可任意位置定义

#可以在任意位置定义,并在以后取值使用,


#使用--build-arg version=3.13 改变;以我们传入的为准


ARG version=3.13.4
# 3.13
FROM alpine:$version
LABEL maintainer="lanson" a=b \
c=dd


#构建期+运行期都可以生效;但是只能在运行期进行修改


#怎么修改:构建期修改和运行期修改


#构建期不能改 ENV的值


#运行期:docker run -e app=atguigu 就可以修改


ENV app=itdachang


##测试构建期间生效


RUN echo $app
RUN echo $param


# 定义以后的剩下环节(不包括运行时)能生效:取值$param;


#可以在构建时进行变化,docker build


# ARG不像ENV不能并排写


ARG param=123456  
ARG msg="hello docker"


#构建时期我们会运行的指令(根据Dockerfile创建一个镜像的整个过程时期)


RUN echo 11111
RUN echo $param
RUN echo $msg


#运行时期我们会运行的指令(根据之前创建的镜像启动一个容器,容器启动默认运行的命令)


#(docker run/docker start)
# CMD和ENTRYPOINT` 都是指定的运行时的指令
CMD ["/bin/sh","-c","echo 1111;echo $param;echo app_${app}"]


第四例、ENV的坑--构建期间就已经确定好值

# env的坑


FROM alpine
# ARG msg=hello


# # ENV肯定能引用ARG


# ENV name=${msg}
# RUN echo ${name}
# RUN echo ${msg}


# ENV只能运行期改掉


ENV msg1=hello
ENV msg2=$msg1


# 以上构建期间就已经确定好值了;ENV持久化问题。


RUN echo ${msg1}
RUN echo ${msg2}


# msg1=msg2没问题;如果我运行期修改了msg1=66666的值,请求msg1;msg2输出什么


# 结果输出: 6666   hello;  传值不是传引用???原因:


# docker build的时候,env环境的信息会固化,直接在镜像配置里面就已经写死,msg1=hello,msg2=hello。


# -e 真的只能修改当前env本身


# 为什么运行期间能用ENV定义的所有值,一定是ENV存在某个地方


CMD ["/bin/sh","-c","echo ${msg1};echo ${msg2};"]


目录
相关文章
|
1天前
|
存储 缓存 监控
【Docker 专栏】Docker 容器性能调优实战
【5月更文挑战第8天】本文探讨了Docker容器的性能调优技巧,包括理解容器性能指标(如CPU、内存、网络和磁盘I/O)并进行相应调优。重点讲述了CPU和内存的限制设置,网络配置优化以及磁盘I/O性能提升方法。通过实例展示了如何解决高CPU使用率问题,强调了根据应用需求进行调优的重要性,以实现更高效、稳定的容器运行。
【Docker 专栏】Docker 容器性能调优实战
|
1天前
|
数据库 Docker 容器
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
【5月更文挑战第8天】Dockerfile是构建Docker镜像的关键,它包含一系列指令,用于描述应用运行环境及所需软件包。通过自动化构建,能提高效率、保证可重复性并提升灵活性。确定基础镜像、安装依赖、设置环境后,执行Dockerfile生成镜像,用于应用程序部署。虽然需要熟悉Docker技术和应用细节,但其带来的益处使其成为现代软件开发和部署的重要工具。
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
|
2天前
|
存储 Cloud Native 文件存储
云原生之使用Docker部署home-page个人导航页
【5月更文挑战第4天】云原生之使用Docker部署home-page个人导航页
14 1
|
2天前
|
Kubernetes Cloud Native 持续交付
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
【5月更文挑战第7天】本文探讨了Docker和Kubernetes如何协同构建和管理云原生应用。Docker提供容器化技术,Kubernetes则负责容器的部署和管理。两者结合实现快速部署、自动扩展和高可用性。通过编写Dockerfile创建镜像,然后在Kubernetes中定义部署和服务进行应用暴露。实战部分展示了如何部署简单Web应用,包括编写Dockerfile、构建镜像、创建Kubernetes部署配置以及暴露服务。Kubernetes还具备自动扩展、滚动更新和健康检查等高级特性,为云原生应用管理提供全面支持。
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
|
2天前
|
前端开发 API 数据库
【Docker专栏】Docker Compose实战:编排多容器应用
【5月更文挑战第7天】Docker Compose是Docker的多容器管理工具,通过YAML文件简化多容器应用部署。它能一键启动、停止服务,保证开发、测试和生产环境的一致性。安装后,创建`docker-compose.yml`文件定义服务,如示例中的web和db服务。使用`docker-compose up -d`启动服务,通过`docker-compose ps`、`stop`、`down`和`logs`命令管理服务。
【Docker专栏】Docker Compose实战:编排多容器应用
|
2天前
|
运维 Linux Docker
Docker详解(十一)——Docker容器CPU资源限额实战Docker详解
Docker详解(十一)——Docker容器CPU资源限额实战
21 5
|
4天前
|
存储 Cloud Native 文件存储
云原生之使用Docker部署Nas-Cab个人NAS平台
【5月更文挑战第2天】云原生之使用Docker部署Nas-Cab个人NAS平台
74 1
|
4天前
|
Docker 容器
电子好书发您分享《4天实战 轻松玩转docker4天实战 轻松玩转docker》
📚 《4天实战:轻松玩转Docker》电子书分享🚀。通过4天的学习,快速掌握Docker容器技术。阿里云链接:[阅读全书](https://developer.aliyun.com/ebook/7445/20547?spm=a2c6h.26392459.ebook-detail.4.73e72e17w6wZGj)。书中包含丰富实例和图片,助你轻松上手!PNG图像示意。
23 2
|
4天前
|
Kubernetes Cloud Native Go
Golang深入浅出之-Go语言中的云原生开发:Kubernetes与Docker
【5月更文挑战第5天】本文探讨了Go语言在云原生开发中的应用,特别是在Kubernetes和Docker中的使用。Docker利用Go语言的性能和跨平台能力编写Dockerfile和构建镜像。Kubernetes,主要由Go语言编写,提供了方便的客户端库与集群交互。文章列举了Dockerfile编写、Kubernetes资源定义和服务发现的常见问题及解决方案,并给出了Go语言构建Docker镜像和与Kubernetes交互的代码示例。通过掌握这些技巧,开发者能更高效地进行云原生应用开发。
44 1
|
5天前
|
Cloud Native 测试技术 Linux
云原生之使用Docker部署RSS阅读器Huntly
【5月更文挑战第1天】云原生之使用Docker部署RSS阅读器Huntly
33 4

热门文章

最新文章