镜像就是包含了应用程序,程序运行的系统函数库,运行配置等文件包,构建镜像的过程其实就是把相应文件打包的过程
1)常用指令:
Dockerfile就是一个文本文件,其中包含一个个的指令,用指令来说明要执行的操作来构建镜像,将来Docker可以根据Dockerfile帮助我们构建镜像
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM centos:7 |
ENV | 设置环境变量,可以在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像指定的目录 | COPY .jrell.tar.gz /tmp |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN tar -zxvf /tmp/jrell.tar.gz && EXPORTS path=/tmp/jrell:$path |
EXPOSE | 指定容器运行时监听的端口,给镜像使用这观看 | EXPORT 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
2)编写Dockerfile文件:
基于系统编写基础的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 ./jdkl.8.0_144 ./java8
# 配置环境变量
ENV JAVA HOME=$JAVA DIR/java8ENV PATH=SPATH:SJAVA HOME/bin
# 暴露端口
EXPOSE 端口号
# 入口,java项目的启动命令
ENTRYPOINT ["java","-jar","/app.jar"]
基于jdk编写Dockerfile镜像文件:
# 基础镜像
FROM openjdk:11.0-jre-buster
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 暴露端口
EXPOSE 端口号
# 入口
ENTRYPOINT ["java","-jar","/app.jar"]
3)构建镜像:
编写好Dockerfile,就可以使用命令构建镜像了:将Dockerfile文件和对应的java.tar包上传到服务器执行一下命令创建镜像
docker build -t 镜像名:镜像版本 Dockerfile所在目录
-
-t :后跟镜像名,格式是repository:tag的格式,不指定tag时,默认latest
-
. :是指定dockerfile所在的文件目录,如果即使当前目录,Dockerfile所在目录就使用.表示