三、Dockerfile自定义镜像

镜像结构

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

Dockerfile语法

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

指令

说明

示例

FROM

指定基础镜像

FROM centos:6

ENV

设置环境变量,可在后面指令使用

ENV key value

COPY

拷贝本地文件到镜像的指定目录

COPY ./mysql-5.7.rpm /tmp

RUN

执行Linux的shell命令,一般是安装过程的命令

RUN yum install gcc

EXPOSE

指定容器运行时监听的端口,是给镜像使用者看的

EXPOSE 8080

ENTRYPOINT

镜像中应用的启动命令,容器运行时调用

ENTRYPOINT java -jar xx.jar

更新详细语法说明,请参考官网文档: Dockerfile reference | Docker Documentation

构建Java项目

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

步骤1:在虚拟机/云服务器新建一个空文件夹docker-demo                                                              步骤2:拷贝课前资料中的docker-demo.jar文件到docker-demo这个目录                                      步骤3:拷贝课前资料中的jdk8.tar.gz文件到docker-demo这个目录                                                步骤4:拷贝课前资料提供的Dockerfile到docker-demo这个目录                                                    步骤5:进入docker-demo                                                                                                                步骤6:运行命令:

docker build -t javaweb:1.0

-t:tag版本号的意思,后面跟上 镜像名:版本号

最后访问 http://虚拟机ip:8090/hello/count


优化后:基于java:8-alpine镜像(优化了Dockerfile文件中的指令),将一个Java项目构建为镜像

                                                # 基于Ubuntu镜像下的Dockerfile文件

# 指定基础镜像
FROM ubuntu:16.04

# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/


# 安装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


#拷贝java项目的包
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

                                       

                                                 # 基于java:8-alpine镜像的Dockerfile文件

# 指定基础镜像
FROM java:8-alpine

#拷贝java项目的包
COPY ./docker-demo.jar /tmp/app.jar


# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

 我们可以发现拷贝java项目之前的指令都是在安装JDK,那我们每一次构建微服务是都要执行完整的流程,且前面的流程都是不会变的。

所以,我们就将前面安装JDK的流程构建好做一个镜像。就是我们这里用到的java:8-alpine镜像

将更新后的Dockerfile文件将之前的Dockerfile文件覆盖后再次运行该java项目

docker build -t javaweb:2.0


总结:

  1. Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
  2. Dockerfile的第一行必须是FROM,从一个基础镜像来构建
  3. 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

注意:以上资料均来自黑马程序员,也可私信我获取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值