Docker学习笔记4 -- Dockerfile

Dockerfile自定义镜像

常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。

而要自定义镜像,就必须先了解镜像的结构才行。

镜像结构

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。

我们以MySQL为例,来看看镜像的组成结构:

image-20210731175806273

简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。

我们要构建镜像,其实就是实现上述打包的过程。

Dockerfile语法

构建自定义的镜像时,并不需要一个个文件去拷贝,打包。

我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。

而描述上述信息的文件就是Dockerfile文件。

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。因此每一条指令的内容,就是描述该层应当如何构建。

image-20210731180321133
更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder

案例1

基于tomcat创建一个镜像,里面要有一个index.html,并写入Hello Docker。
1、在宿主机创建一空白目录:

mkdir -p /usr/local/docker/demo1

2、在该目录下,创建一文件Dockerfile:

vim Dockerfile

3、其内容为:

FROM tomcat //指定tomcat最新版本镜像
RUN echo 'Hello qfnj Docker'>/usr/local/tomcat/webapps/ROOT/index.html

这个Dockerfile很简单,一共就两行。涉及到了两条指令,FROM和RUN。
4、构建镜像

docker build -t demo1 .  
-t :指定要创建的目标镜像名
. :点代表Dockerfile文件所在目录,也就是当前目录,可以指定Dockerfile的绝对路径。

5、运行镜像所在容器

docker run --rm --name demo1-8080 -p 8080:8080 -d demo1

访问浏览器即可成功该问。

案例2

案例:基于上一个镜像(基于tomcat)将ROOT内多余的文件都删除。只保留index.html
1 基于如上修改Dockerfile

FROM tomcat //指定tomcat最新版本镜像
WORKDIR /usr/local/tomcat/webapps/ROOT/ //切换到该目录下
RUN rm -rf * //将当前目录的文件都删掉
RUN echo 'Hello qfnj Docker'>/usr/local/tomcat/webapps/ROOT/index.html

WORKDIR 用来切换工作目录的。而不是用RUN。
2、 构建镜像

docker build –t 镜像名 . //Dockerfile上下文路径

案例3

案例:基于上一个镜像(基于tomcat)外部复制一个文件(图片),并复制到容器中并能访问。
1 基于如上修改Dockerfile

FROM tomcat //指定tomcat最新版本镜像
WORKDIR /usr/local/tomcat/webapps/ROOT/ //切换到该目录下
RUN rm -rf * //将当前目录的文件都删掉
COPY 1.png /usr/local/tomcat/webapps/ROOT/
RUN echo 'Hello qfnj Docker'>/usr/local/tomcat/webapps/ROOT/index.html

2、 构建镜像

docker build –t 镜像名 . //Dockerfile上下文路径

案例4

使用docker部署springboot项目,首先将jar包复制到一个文件夹里边。
1 cd到该目录下
2 新建Dockerfile文件

vim Dockerfile

3 添加命令

FROM java:8
VOLUME /tmp
ADD boot-0.0.1-SNAPSHOT.jar exam.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/exam.jar"]

4 执行构建命令

docker build -t bootdemo .

5 根据镜像构建容器即可访问。

posted @ 2021-10-07 22:47  初晨~  阅读(85)  评论(0编辑  收藏  举报