Docker-自定义镜像

目录

[1 前言](#1 前言)

[2 构建java应用的步骤及镜像结构图](#2 构建java应用的步骤及镜像结构图)

[2.1 构建步骤](#2.1 构建步骤)

[2.2 镜像结构图](#2.2 镜像结构图)

[3 Dockerfile常用指令](#3 Dockerfile常用指令)

[4 Dockerfile的内容举例](#4 Dockerfile的内容举例)

[4.1 一般形式](#4.1 一般形式)

[4.2 一般形式的优化](#4.2 一般形式的优化)

[5 构建镜像](#5 构建镜像)

[5.1 指令](#5.1 指令)

[5.2 实操](#5.2 实操)

[5.2.1 加载jdk镜像(基础镜像)](#5.2.1 加载jdk镜像(基础镜像))

[5.2.2 构建我们的镜像](#5.2.2 构建我们的镜像)

[5.2.3 使用我们的镜像](#5.2.3 使用我们的镜像)


1 前言

本文参考自黑马程序员,算是学习笔记。

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。具体如下。

2 构建java应用的步骤及镜像结构图

2.1 构建步骤

①准备一个Linux运行环境

②安装JRE并配置环境变量

③拷贝Jar包

④编写运行脚本

2.2 镜像结构图

该图片来自黑马程序员:

3 Dockerfile常用指令

指令 说明 示例
FROM 指定基础镜像 FROM centos:7
ENV 设置环境变量,可在后面指令使用 ENV key value
COPY 拷贝本地文件到镜像的指定目录 COPY ./jre11.tar.gz /tmp
RUN 执行Linux的shell命令,一般是安装过程的命令 RUN tar -zxvf /tmp/jre11.tar.gz && EXPORTS path=/tmp/jre11:$path
EXPOSE 指定容器运行时监听的端口,是给镜像使用者看的,只是一个描述 EXPOSE 8080
ENTRYPOINT 镜像中应用的启动命令,容器运行时调用 ENTRYPOINT java -jar xx.jar

更多详细内容可查看官网:

Dockerfile reference | Docker Docs

4 Dockerfile的内容举例

4.1 一般形式

bash 复制代码
# 指定基础镜像
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
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

语句解释:

  1. FROM ubuntu:16.04:指定基础镜像为Ubuntu 16.04。

  2. ENV JAVA_DIR=/usr/local:设置环境变量JAVA_DIR/usr/local,表示JDK的安装目录。

  3. COPY ./jdk8.tar.gz $JAVA_DIR/:将本地的jdk8.tar.gz文件复制到容器的/usr/local/目录下。

  4. COPY ./docker-demo.jar /tmp/app.jar:将本地的docker-demo.jar文件复制到容器的/tmp/目录下。

  5. RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8:在容器中执行的命令,解压jdk8.tar.gz文件,并将解压后的目录重命名为java8

  6. ENV JAVA_HOME=$JAVA_DIR/java8:设置环境变量JAVA_HOME/usr/local/java8,指定JDK的安装路径。

  7. ENV PATH=$PATH:$JAVA_HOME/bin:将Java的bin目录添加到系统的PATH环境变量中,以便可以直接运行Java命令。

  8. ENTRYPOINT ["java", "-jar", "/app.jar"]:指定容器启动时执行的默认命令,即运行Java应用程序。这里使用java -jar /app.jar启动/tmp/app.jar中的Java应用程序。

4.2 一般形式的优化

一般形式中存在着许多可以复用的内容,在我们编程的时候,我们经常会将可复用的内容写成一个函数。同理,有人也将Dockerfile的可复用部分打包成了一个基础镜像。因此可以优化如下:

bash 复制代码
# 基础镜像
FROM openjdk:11.0-jre-buster
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

5 构建镜像

5.1 指令

bash 复制代码
docker build -t myImage:1.0 .

这个命令中,最后一部分表示在目录中查找名为 Dockerfile 的文件(如果是点则表示当前目录),并使用它来构建(-t)一个名为 myImage 版本号为 1.0(没指定版本号默认latest)的Docker镜像。

5.2 实操

5.2.1 加载jdk镜像(基础镜像)

jdk镜像的百度网盘链接如下:

链接: https://pan.baidu.com/s/1p7jNRQX42cyZ3M4uOaSOMA?pwd=5ew2

提取码: 5ew2

5.2.2 构建我们的镜像

5.2.3 使用我们的镜像

相关推荐
2301_819287121 小时前
ce第六次作业
linux·运维·服务器·网络
武汉联从信息1 小时前
如何使用linux日志管理工具来管理oracle osb服务器日志文件?
linux·运维·服务器
Aileen_0v02 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
VinciYan2 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
州周2 小时前
Ftp目录整个下载
linux·服务器·数据库
Jackey_Song_Odd2 小时前
Ubuntu 24.04.1 解决部分中文字符(门、径)显示错误的问题
linux·ubuntu
kaixin_learn_qt_ing3 小时前
Linux export命令
linux
余额不足121383 小时前
C语言基础十六:枚举、c语言中文件的读写操作
linux·c语言·算法
冷曦_sole3 小时前
linux-19 根文件系统(一)
linux·运维·服务器
AI大模型学徒3 小时前
Linux(二)_清理空间
linux·运维·服务器