Dockerfile自定义镜像
创始人
2024-09-26 05:50:51
0

目录

前言

1. 镜像结构

2. Dockerfile语法

3. 构建Java项目

3.1 基于Ubuntu构建Java项目

3.2 基于java8构建Java项目

3.3 小结


前言

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

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

1. 镜像结构

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

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

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

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

2. Dockerfile语法

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

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

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

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。

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

3. 构建Java项目

3.1 基于Ubuntu构建Java项目

需求:基于Ubuntu镜像构建一个新镜像,运行一个java项目

  • 步骤1:在本机任意目录下,新建一个空文件夹docker-demo

  • 步骤2:将打包好的java项目的jar包文件到docker-demo这个目录

  • 步骤3:将下载好的JDK的linux版本文件拷贝到docker-demo目录下:

  •  步骤4:在docker-demo目录下,新建dockerfile文件,编写内容

内容如下:

# 指定基础镜像 FROM ubuntu:16.04 # 配置环境变量,JDK的安装目录 ENV JAVA_DIR=/usr/local  # 拷贝jdk和java项目的包 COPY ./jdk8.tar.gz $JAVA_DIR/ COPY ./docker-demo.jar /tmp/app.jar  # 安装JDK RUN cd $JAVA_DIR \  && tar -xf ./jdk8.tar.gz \  && mv ./jdk1.8.0_144 ./java8  # 配置环境变量 ENV JAVA_HOME=$JAVA_DIR/java8 ENV PATH=$PATH:$JAVA_HOME/bin  # 暴露端口 EXPOSE 8090 # 入口,java项目的启动命令 ENTRYPOINT java -jar /tmp/app.jar

文件内容解释如下:

PS:这里JDK解压后的文件名也就是上面显示的jdk1.8.0_144,根据你们自己的实际情况去修改。

  • 步骤5:进入docker-demo

将准备好的docker-demo上传到虚拟机的任意目录,我这里上传的是/tmp目录,然后进入docker-demo目录下:

  •  步骤6:运行命令

docker build -t [你自己定义的镜像的名称]:[你自定义的镜像版本号] .

这里的镜像版本后要加上空格和一个点,不要忘记!

镜像版本后要加上空格和一个点,不要忘记!

镜像版本后要加上空格和一个点,不要忘记!

重要的事情说三遍!

这时候通过命令docker images可以查看到我们刚刚构建的镜像:

然后用这个命令,可以将这个新鲜的镜像启动起来:

# 这里的docker-demo是我定义的容器名字,你可以自己定义,可以跟之前镜像的名字不一致 docker run --name docker-demo -p 8090:8090 -d docker-demo:1.0

 

然后就可以访问你自己的demo对外暴露的接口,我这里是http://我的虚拟机IP:8090/hello/count,结果:

3.2 基于java8构建Java项目

 我们先来看一下上一小节,我们的dockerfile文件:

绿色的部分是执行JDK安装的部分,只有红色的部分才是我们真正执行java项目的部分。虽然我们可以基于Ubuntu基础镜像,添加任意自己需要的安装包,构建镜像,但是如果我们以后微服务比较多的话,每个微服务都要将绿色的部分重复执行一遍是不是比较麻烦。这时候,我们可以在一些安装了部分软件的基础镜像上做改造。

例如,构建java项目的镜像,可以在已经准备好JDK的基础镜像基础上构建。

需求:基于java:8-alpine镜像,将一个Java项目构建为镜像

实现思路如下:

1)新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile

2)将打包好的docker-demo.jar拷贝到这个目录中

3)编写Dockerfile文件:

        a)基于java:8-alpine作为基础镜像

        b)将docker-demo.jar拷贝到镜像

        c)暴露端口

        d)编写入口ENTRYPOINT

        内容如下:

FROM java:8-alpine COPY ./docker-demo.jar /tmp/app.jar EXPOSE 8090 ENTRYPOINT java -jar /tmp/app.jar

4) 使用docker build命令构建镜像

5)使用docker run创建容器并运行

我们来实践一下。先把原来的docker-demo的镜像停掉:

然后访问http://我的虚拟机IP:8090/hello/count,可以看到,已经无法访问了。

我们在虚拟机上的/tmp目录下新建文件夹deocker-demo2,然后把需要的docker-demo.jar和新的Dockerfile文件上传进去:

 使用docker build命令构建镜像:

docker build -t docker-demo:2.0 .

然后开始启动这个镜像的容器:

docker run --name docker-demo2 -p 8090:8090 -d docker-demo:2.0

然后访问http://我的虚拟机IP:8090/hello/count,就可以访问成功了:

3.3 小结

小结:

  • Dockerfile的本质是一个文件,通过指令描述镜像的构建过程

  • Dockerfile的第一行必须是FROM,从一个基础镜像来构建

  • 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

相关内容

热门资讯

安卓10系统更新关闭,全面优化... 你知道吗?最近安卓系统又来了一次大动作,那就是安卓10系统的更新关闭了!这可真是让人有点摸不着头脑,...
安卓系统的文件加密,Andro... 你知道吗?在咱们这个数字化时代,保护隐私和安全变得比以往任何时候都重要。尤其是对于安卓系统用户来说,...
使用安卓系统的费用,全面了解使... 你有没有想过,为什么有些人拿着安卓手机,而有些人却选择了苹果?这其中可不仅仅是品牌喜好那么简单,使用...
vivo用原生安卓系统下载,尽... 你有没有发现,现在手机市场真是热闹非凡,各种品牌争奇斗艳,让人眼花缭乱。不过,今天我要给你安利的,可...
安卓系统好用的桌面时钟,实用好... 你有没有发现,手机里的时钟功能有时候比闹钟还重要呢?想象每天早上被它温柔地叫醒,或者在忙碌的工作间隙...
安卓系统导航车载用优盘,安卓车... 你有没有想过,开车的时候,手机导航虽然方便,但有时候屏幕太小,看不清路线?别急,今天就来给你安利一个...
正确使用电池安卓系统,无忧体验 你知道吗?现在这个智能手机时代,电池续航能力可是大家关注的焦点。尤其是安卓系统用户,电池使用得当与否...
玩吧安卓可以和苹果系统,畅享游... 你知道吗?现在这个时代,手机可是我们生活中不可或缺的好伙伴。不管是安卓还是苹果,它们各有各的特色,各...
安卓系统怎么去掉hd,恢复纯净... 你是不是也和我一样,对安卓手机的系统设置充满了好奇?尤其是那个让人眼花缭乱的“HD”标识,有时候看着...
电脑安卓系统性能表,电脑版性能... 你有没有发现,现在手机电脑的操作系统越来越丰富,尤其是安卓系统,简直就像是个万能的小精灵,啥都能干。...
如何玩转机车安卓系统,玩转机车... 你有没有想过,拥有一台酷炫的机车安卓系统,让你的手机瞬间变身成为一辆会跑的摩托车?想象你可以在手机上...
安卓系统网页怎么回顶部,按钮才... 你是不是在使用安卓系统的手机或平板电脑浏览网页时,不小心翻到了页面底部,现在想回到顶部,却有点摸不着...
为什么安卓系统要认证,安卓系统... 你知道吗?安卓系统最近可是掀起了一阵认证热潮,这可不仅仅是简单的更新换代那么简单哦!为什么安卓系统要...
安卓50原生系统手机,功能革新... 你有没有发现,最近你的安卓手机突然变得不一样了?是不是因为它的系统升级到了安卓50原生系统呢?没错,...
安卓永远比不了的系统,永远无法... 你有没有想过,为什么安卓系统永远比不了某些其他系统呢?是不是每次看到那些流畅无阻、功能强大的设备,心...
安卓8怎么升级11系统,解锁新... 你有没有发现,你的安卓手机已经有点儿“老态龙钟”了?别急,别急,今天就来教你怎么给它来个青春焕发的大...
双系统安卓笔记本,开启移动办公... 你有没有想过,一台既能流畅运行安卓应用,又能轻松驾驭Windows系统的笔记本,会是怎样的体验呢?没...
安卓系统调降噪通透软件,打造清... 你有没有发现,最近你的安卓手机在听音乐或者打电话的时候,声音变得超级清晰,仿佛置身于现场?这可不是你...
安卓系统包后缀名,包后缀名背后... 你有没有发现,每次下载安卓应用时,文件名后面总会有那么几个神秘的字母组合,像是“apk”、“jar”...
安卓系统好用的工作软件,盘点十... 你有没有发现,自从你把手机里的安卓系统升级后,工作效率好像提高了不少呢?今天,就让我来给你细细道来,...