Docker4️⃣自定义镜像
1、镜像结构
镜像:应用程序及其所需函数库、依赖、环境配置等文件打包在一起形成的文件包。
-
基础镜像:应用程序所需的系统函数库、环境配置、文件等。
-
层:镜像中的每个步骤(添加安装包、依赖等)都作为单独的一层,以提高复用性。
-
入口:镜像运行入口,一般是程序的启动脚本和参数。
2、Dockerfile(❗)
Dockerfile:描述性文本文件
-
通过指令(Instruction),描述构建镜像所要执行的操作。
-
每个指令都会形成一层 Layer。
-
参考官网文档
含义 说明 FROM 指定基础镜像 基础镜像可以是操作系统,或制作好的镜像 ENV 设置环境变量 COPY 将本地文件拷贝到镜像的指定目录 RUN 执行 Linux 的 shell 命令 通常用于安装操作 EXPOSE 暴露端口 指定容器运行时的监听端口 ENTRYPOINT 入口点 镜像中应用的启动命令,运行容器时调用
3、构建镜像
3.1、步骤
- 新建空文件夹,用于构建镜像。
- 依赖文件(如安装包,项目 jar 包)
- Dockerfile
- 将文件夹上传到服务器(或直接在服务器中进行以上操作)
- Docker build
3.2、case:构建 Java 项目
3.2.1、基于 CentOS
-
在服务器新建空文件夹,用于构建镜像。
-
相关文件:
- JDK 安装包(
.tar.gz
) - 项目 jar 包(任意能正常访问的 web 项目)
- JDK 安装包(
-
Dockerfile:安装 JDK,导入 Java 项目,暴露端口,入口点
# 基础镜像 FROM centos:7 # 安装JDK # 安装目录 ENV JAVA_DIR=/usr/local # 拷贝安装包 COPY ./jdk8.tar.gz $JAVA_DIR/ # 安装 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 # 暴露端口:web项目中配置的访问端口 EXPOSE 8090 # 入口,java项目的启动命令 ENTRYPOINT java -jar /tmp/app.jar
-
-
构建镜像:在
docker-demo
目录下执行命令# -t 镜像名 dockerfile位置 docker build -t myweb:1.0 .
-
查看镜像:构建时会自动下载基础镜像(CentOS),成功构建自定义镜像
3.2.2、基于 alpine
示例:基于
java:8-alpine
镜像,将 Java 项目构建为镜像。
-
在服务器新建空文件夹
-
只需导入项目 jar 包,无需导入 JDK 安装包。
-
Dockerfile:指定基础镜像即可安装 JDK
FROM java:8-alpine COPY ./app.jar /tmp/app.jar EXPOSE 8090 ENTRYPOINT java -jar /tmp/app.jar
3.2.3、说明
- 以上 2 个案例,区别在于 dockerfile 中指定的基础镜像。
- 其余内容和后续操作步骤相同。