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


目录
相关文章
|
6天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
28 2
|
4天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
18天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
58 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
12天前
|
应用服务中间件 PHP nginx
Docker-compose 编排lnmp(dockerfile) 完成Wordpress
通过使用Docker Compose,我们可以轻松编排LNMP环境并部署WordPress。本文详细介绍了各组件的Dockerfile和配置文件编写,并通过docker-compose.yml文件实现了整个环境的自动化部署。这种方法不仅简化了部署过程,还提高了环境的可移植性和一致性。希望本文能帮助你更好地理解和使用Docker Compose来管理和部署复杂的应用程序。
39 3
|
21天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
33 3
|
27天前
|
Kubernetes Cloud Native 开发者
探秘云原生计算:Kubernetes与Docker的协同进化
在这个快节奏的数字时代,云原生技术以其灵活性和可扩展性成为了开发者们的新宠。本文将带你深入了解Kubernetes和Docker如何共同塑造现代云计算的架构,以及它们如何帮助企业构建更加敏捷和高效的IT基础设施。
|
28天前
|
Docker 容器
docker中使用Dockerfile自动创建数据卷
【10月更文挑战第12天】
19 5
|
1月前
|
安全 Cloud Native Shell
云上攻防:云原生篇&Docker容器逃逸
本文介绍了Docker的基本概念及其对渗透测试的影响,重点讲解了容器逃逸的方法。Docker是一种轻量级的容器技术,与虚拟机相比,具有更高的便携性和资源利用率。然而,这也带来了安全风险,特别是容器逃逸问题。文章详细描述了三种常见的容器逃逸方法:不安全的配置、相关程序漏洞和内核漏洞,并提供了具体的检测和利用方法。此外,还介绍了几种特定的漏洞(如CVE-2019-5736和CVE-2020-15257)及其复现步骤,帮助读者更好地理解和应对这些安全威胁。
云上攻防:云原生篇&Docker容器逃逸
|
1月前
|
Kubernetes Cloud Native Docker
云原生入门:Kubernetes和Docker的协同之旅
【10月更文挑战第4天】在这篇文章中,我们将通过一次虚拟的旅行来探索云原生技术的核心——Kubernetes和Docker。就像乘坐一艘由Docker驱动的小船启航,随着波浪(代码示例)起伏,最终抵达由Kubernetes指挥的宏伟舰队。这不仅是一段技术上的旅程,也是理解现代云架构如何支撑数字世界的冒险。让我们扬帆起航,一探究竟!
|
1月前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
38 4