【云原生 | 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};"]


目录
相关文章
|
3月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
3月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
3月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
396 2
|
7月前
|
运维 监控 数据可视化
容器化部署革命:Docker实战指南
容器化部署革命:Docker实战指南
|
6月前
|
供应链 测试技术 开发者
用 Docker 轻松部署 ERPNext 15:多场景实战指南
ERPNext 15 是一款功能全面的开源企业资源规划系统,结合 Docker 容器化部署,具备高效、灵活、低成本等优势。适用于小微企业数字化起步、多分支机构协同办公、开发者测试环境搭建、短期项目管理及企业内部培训等多种场景。模块化设计支持按需扩展,满足不同规模企业需求,是实现高效企业管理的理想选择。
用 Docker 轻松部署 ERPNext 15:多场景实战指南
|
7月前
|
安全 Java Docker
Docker 部署 Java 应用实战指南与长尾优化方案
本文详细介绍了Docker容器化部署Java应用的最佳实践。首先阐述了采用多阶段构建和精简JRE的镜像优化技术,可将镜像体积减少60%。其次讲解了资源配置、健康检查、启动优化等容器化关键配置,并演示了Spring Boot微服务的多模块构建与Docker Compose编排方案。最后深入探讨了Kubernetes生产部署、监控日志集成、灰度发布策略以及性能调优和安全加固措施,为Java应用的容器化部署提供了完整的解决方案指南。文章还包含大量可落地的代码示例,涵盖从基础到高级的生产环境实践。
389 3
|
8月前
|
关系型数据库 MySQL 数据库
Docker Compose-实战
Docker Compose-实战
272 5
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
386 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
5月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
512 16

热门文章

最新文章