3.3 Dockerfile自定义镜像
一、镜像结构
镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成
镜像结构:
基础镜像(BaseImage),应用依赖的系统函数库、环境、配置、文件等
安装
配置
入口(Entrypoint),镜像运行入口,一般是程序启动的脚本和参数
备注:上面是按照选后顺序记录的
每一步,都可以称为一层(Layer):在BaseImage基础上添加安装依赖、配置等,每次操作都形成新的一层
二、Dockerfile语法
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每个指令都会形成一层Layer
指令
说明
示例
FROM
制定基础镜像
FROM centos:
ENV
设置环境变量,可在后面指令使用
ENV key value
COPY
拷贝本地文件到镜像指定目录
copy ./mysql-5.7.rpm /tmp
RUN
执行Linux的shell命令,一般是安装过程的命令
RUN yum install gcc
EXPORT
制定容器运行时监听的端口,是给镜像使用者看的
EXPORT 8080
ENTRYPOINT
镜像中应用的启动命令,容器运行时调用
ENTRYPOINT java -jar xxx.jar
备注:更详细的语法,可以参考官方文档:https://docs.docker.com/engine/reference/builder/
举例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构建命令:
docker build -t javaweb:1.0 . 从当前目录(.)构建一个javaweb:1.0版本的镜像
最后更新于
这有帮助吗?