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


目录
相关文章
|
11天前
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
164 75
|
11天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
74 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
17天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
43 3
实战~如何组织一个多容器项目docker-compose
|
1月前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
58 9
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
102 7
|
2月前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
92 0
|
2月前
|
存储 Cloud Native 开发者
深入探索容器化技术——Docker的实战应用
深入探索容器化技术——Docker的实战应用
42 0
|
2月前
|
存储 安全 Docker
Docker 的实战应用与优化策略
Docker 的实战应用与优化策略
38 0
|
5月前
|
Docker 容器
在Docker中,Dockerfile有哪些常见指令?
在Docker中,Dockerfile有哪些常见指令?
|
8月前
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
83 0