DockerFile介绍与及其实际案例

2024-01-22 10:41:32 浏览数 (1)

DockerFile简介

DockerFile是用来构建Docker的文本文件,是有一条条构建的镜像所需的指令和参数构成的脚本。只要一次编写,处处能运行,不用部署都敲写docker命令。通过DockerFile,可以定义应用程序的运行环境,包括操作系统、依赖库、配置文件等。使用DockerFile可以确保应用程序在不同环境中的一致性和可移植性。本文将带大家认识一下什么是dockerfile,以及为什么要使用它,它有什么好处。

DockerFile要求和常用命令

Dockerfile的大致流程,Dockerfile文件docker build之后会产生一个Docker镜像,启动镜像运行容器即可以提供服务

1)docker从基础镜像运行一个容器

2)执行一条指令并对容器进行修改

3)执行类似docker commit的操作提交一个新的镜像层

4)docker再基于刚提交的镜像运行一个新的容器

5)dockerfile执行完下一条指令知道所有的指令完成

在创建DockerFile时,需要遵循一些基本规则和约定:

1. DockerFile文件名必须是Dockerfile(大小写敏感)。

2. DockerFile应该位于项目的根目录中。

3. DockerFile中的指令必须按照特定的顺序排列,例如:FROM、RUN、COPY、ADD、CMD等。

常用命令:

FROM 基础镜像,当前镜像基于那个镜像,模板

ENV 构建过程中设置环境变量

RUN 构建时需要的运行命令,在docker build时运行,支持shell格式和exec格式,在Linux能运行的命令

WORKDIR 指定工作目录也就是,容器运行位置,进入容器之后查看pwd,

EXPOSE 指定那个端口 EXPOSE 8080

CMD 容器启动命令,与RUN 相似 ,exec格式 :CMD ["catalina.sh", "run"],CMD在docker run运行,RUN在docker build运行

为什么使用DockerFile

使用Dockerfile 的主要原因是自定义docker镜像实现容器化应用程序的可移植性和可重复性,并且有以下好处:

1. **可重复性**:DockerFile确保应用程序在不同环境中的一致性和可重复性。

2. **可移植性**:DockerFile使得应用程序可以在不同的操作系统和硬件平台上运行。

3. **隔离性**:DockerFile可以将应用程序及其依赖项打包到一个独立的容器中,从而避免了不同应用程序之间的干扰。

4. **易于维护**:DockerFile使得应用程序的运行环境易于维护和更新。

实际案例

接下来,将介绍通过两个案例,编写dockerfile文件,进一步加深对dockerflie的理解。

实战1:制作自己的一个docker镜像,在原有的centos镜像上加其他镜像,比如vim、ifconfig、jdk8(注意:由于新版的CentOS,在2022年1月31日,CentOS团队终于从官方镜像中移除CentOS 8的所有包。CentOS 8已于2021年12月31日寿终正非,但软件包仍在官方镜像上保留了一段时间。现在他们被转移到https://vault.centos.org,所以构建会报错,所以本案例只测试安装jdk) 编写Dockerfile文件:注意文件名D要大写,然后不需要后缀。直接vim Dockerfile

代码语言:dockerfile复制
FROM centos
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 按照 vim编辑器
#RUN yum -y install vim
# 安装ifconfig命令查看网络
#RUN yum -y install net-tools
# 安装java8以及lib库,必须先安装glibc
#RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
# ADD是相对路径jar,把jdk-8u40-linux-x64.gz添加到容器中,按照包必须是Dockerfile文件在同一位置
ADD jdk-8u40-linux-x64.gz /usr/local/java/

#配置java环境
ENV JAVA_HOME /usr/local/java/jdk1.8.0_40
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

EXPOSE 80
CMD echo $MYPATH
CMD echo "success................ok"
CMD /bin/bash

构建命令:注意TAG后有个空格,有个 . )

代码语言:bash复制
docker build -t 新镜像名字:TAG .   

运行

代码语言:bash复制
docker run -it 新镜像名字:TAG

测试:

代码语言:bash复制
java -version 就可以查看java版本

实战2:部署springboot工程镜像,比如把我们的工程项目构建docker镜像

代码语言:dockerfile复制
#基础镜像使用java
FROM java:8
# 作者
MAINTAINER oqm
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到/tmp
VOLUME /tmp
# 将jar包添加到docker容器中并更名为oqm_docker.jar
ADD dockerfile-0.0.1-SNAPSHOT.jar oqm_docker.jar
# 运行jar包
RUN bash -c 'touch /oqm_docker.jar'
ENTRYPOINT ["java","-jar","/oqm_docker.jar"]
# 暴露 6001 端口作为微服务
EXPOSE 6001 

构建完镜像之后,就可以想启动docker容器一样启动服务了。

总结

DockerFile是Docker容器化应用程序的基础,它可以帮助开发人员定义应用程序的运行环境,确保应用程序在不同环境中的一致性和可移植性。使用DockerFile可以简化应用程序的部署和管理过程,提高开发和运维效率。少提一嘴,关于构建和管理 Docker 容器的工具还有另一个Docker Compose,Dockerfile 更多地用于创建和定制 Docker 镜像,而 Docker Compose 更多地用于管理多个 Docker 容器

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

0 人点赞