03(总)-docker篇 Dockerfile镜像制作(jdk,jar)与jar包制作成docker容器方式

全文目录,一步到位

  • 1.前言简介
    • [1.1 专栏传送门](#1.1 专栏传送门)
      • [1.1.2 上文传送门](#1.1.2 上文传送门)
  • [2. docker镜像制作一: jdk](#2. docker镜像制作一: jdk)
    • [2.1 制作jdk镜像](#2.1 制作jdk镜像)
      • [2.1.1 准备工作](#2.1.1 准备工作)
      • [2.1.2 jdk镜像的Dockerfile](#2.1.2 jdk镜像的Dockerfile)
      • [2.1.3 基于Dockerfile构建镜像](#2.1.3 基于Dockerfile构建镜像)
      • [2.1.4 docker使用镜像运行容器](#2.1.4 docker使用镜像运行容器)
      • [2.1.5 进入jdk1.8容器内测试](#2.1.5 进入jdk1.8容器内测试)
  • [3. docker镜像制作二: java镜像(jar包)](#3. docker镜像制作二: java镜像(jar包))
    • [3.0 准备工作](#3.0 准备工作)
    • [3.1 制作方法一: 基于jdk8-image镜像一键启动jar容器](#3.1 制作方法一: 基于jdk8-image镜像一键启动jar容器)
      • [3.1.1 创建并启动jar容器](#3.1.1 创建并启动jar容器)
    • [3.2 制作方法二: Dockerfile制作java的镜像并创建运行容器](#3.2 制作方法二: Dockerfile制作java的镜像并创建运行容器)
      • [3.2.0 准备工作](#3.2.0 准备工作)
      • [3.2.1 Dockerfile制作java的镜像](#3.2.1 Dockerfile制作java的镜像)
      • [3.2.2 docker创建运行jar容器](#3.2.2 docker创建运行jar容器)
  • [4. 文章的总结与预告](#4. 文章的总结与预告)
    • [4.1 本文总结](#4.1 本文总结)
      • [4.1.1 问题总结](#4.1.1 问题总结)
    • [4.2 下文预告](#4.2 下文预告)

1.前言简介

在看本文之前 需要有基础的docker知识 了解 镜像与容器 的区别

同时也需要了解 宿主机与容器之间的关系

例如在端口与目录挂载等位置使用

1.1 专栏传送门

===> docker专栏传送门 <===

1.1.2 上文传送门

2. docker镜像制作一: jdk

2.1 制作jdk镜像

2.1.1 准备工作

下载centos7.9操作系统镜像(就是一个文件系统)

创建文件夹 (任意)

进入文件夹 cd

编辑Dockerfile文件

bash 复制代码
docker pull centos:7.9.2009
mkdir -p /usr/local/src/docker/jdk8
cd /usr/local/src/docker/jdk8
vim Dockerfile

2.1.2 jdk镜像的Dockerfile

注意Dockerfile 文件名称

bash 复制代码
#!/bin/bash
FROM centos:7.9.2009
MAINTAINER pingzhuyan

# ADD 拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压 (注意:拷贝的文件要跟Dockerfile文件同级)
# 将jdk1.8添加到/usr/local/pro/jdk目录下并解压
ADD jdk-8u65-linux-x64.tar.gz  /usr/local/jdk

ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_65
ENV JRE_HOME /usr/local/jdk/jdk1.8.0_65/jre
ENV PATH $JAVA_HOME/bin:$PATH

2.1.3 基于Dockerfile构建镜像

docker build -t 镜像名称 . #注意这个点

bash 复制代码
docker build -t jdk8-image . 

2.1.4 docker使用镜像运行容器

基于jdk8-image运行容器

指令如下

bash 复制代码
docker run -di --name=jdk1.8 jdk8-image

2.1.5 进入jdk1.8容器内测试

进入后 看到Java版本即为成功

指令如下

bash 复制代码
docker exec -it jdk1.8 bash 
java -verion   #执行成功

3. docker镜像制作二: java镜像(jar包)

3.0 准备工作

创建文件夹存放jar包(使用jenkins等打版工具上传)

指令如下 如上图 (涂掉的地方是 3.2 方法二使用先忽略)

bash 复制代码
mkdir -p /usr/local/src/docker/jar/test

3.1 制作方法一: 基于jdk8-image镜像一键启动jar容器

3.1.1 创建并启动jar容器

设置本目录 与 容器内自己挑选的位置挂载

示例: -v /usr/local/src/docker/jar/test:/usr/local/jar

设置个开机自启 --restart=always

基于jdk8-image镜像启动容器

java 复制代码
docker run -d -p 9090:9090 --restart=always \
-v /usr/local/src/docker/jar/test:/usr/local/jar \
--name pzy_test.jar jdk8-image  java -jar -Dserver.port=9090 /usr/local/jar/pzy_test.jar

3.2 制作方法二: Dockerfile制作java的镜像并创建运行容器

3.2.0 准备工作

创建Dockerfile

bash 复制代码
cd /usr/local/src/docker/jar/test
vim Dockerfile

如图所示:

3.2.1 Dockerfile制作java的镜像

Dockerfile逻辑:

  1. 基于本地jdk8-image镜像(Java环境)
  2. 设置工作目录 /usr/local/src/docker/jar/test
  3. 将当前目录下的renren.jar复制到容器的任意目录中 /usr/local/src/docker/jar/test/pzy_test.jar
  4. 暴露应用的端口 默认8080
  5. 一个日志 查看Java的path是否正常
  6. 启动执行命令cmd
bash 复制代码
# 使用本地镜像 
FROM jdk8-image
  
# 设置工作目录为 (自定义)  
WORKDIR /usr/local/src/docker/jar/test
  
# 将当前目录下的renren.jar复制到容器的任意目录中  
COPY pzy_test.jar /usr/local/src/docker/jar/test/pzy_test.jar  
  
# 暴露应用的端口 默认8080
EXPOSE 9090  
  
RUN which java || echo "Java not found in PATH"
RUN echo $PATH

# 容器启动时执行的命令  
CMD ["java", "-jar", "/usr/local/src/docker/jar/test/pzy_test.jar"]

构建docker镜像制作pzy_test-image

bash 复制代码
docker build -t pzy_test-image . 

3.2.2 docker创建运行jar容器

目录挂载 设置开机自启 使用pzy_test-image 镜像 端口9091
docker container logs -f pzy_test.jar #查询日志

java 复制代码
docker run --name pzy_test.jar -p 9091:9090 \
-v /usr/local/src/docker/jar/test:/usr/local/src/docker/jar/test \
-d --restart=always pzy_test-image

4. 文章的总结与预告

4.1 本文总结

4.1.1 问题总结

有一些注意事项, 上面如果遇到问题, 先看看这里有没有对应的错误操作

  1. 镜像名字与容器名字不能相同 不然会出现各种问题
  2. 查看自己的jdk包解压后是什么名称 在制作jdk镜像时需要填写正确
  3. 不要认为在容器内修改文件后镜像会有变化, 镜像时静态的不会有变化(不对请指出哈)
  4. 在容器的所有操作,记住容器与宿主机概念, 运行都是在容器目录下操作, 上传是宿主机挂载目录

4.2 下文预告

批量生成docker镜像并启动容器脚本, 结合jenkins使用

效果: git自动拉取, maven打版, 上传到指定文件夹, 根据脚本生成docker新镜像(保留之前),完成启动


@author: pingzhuyan
@description: ok
@year: 2024

相关推荐
八股文领域大手子6 分钟前
Spring Boot Controller 如何处理HTTP请求体
java·开发语言·sql·spring·spring cloud
tanxiaomi6 分钟前
Java中对象集合转换的优雅实现【实体属性范围缩小为vo】:ListUtil.convert方法详解
java·spring boot·mybatis
odng7 分钟前
请求从发送到页面渲染的全过程
java
某不知名網友11 分钟前
linux_进程地址空间(虚拟地址空间)
java·linux·算法
每次的天空34 分钟前
移动应用开发:自定义 View 处理大量数据的性能与交互优化方案
android·java·学习·交互
纪元A梦37 分钟前
贪心算法应用:最小反馈顶点集问题详解
java·算法·贪心算法
家庭云计算专家44 分钟前
一键设置动态域名+ipv6内网直通访问ssh服务-家庭云计算专家
运维·docker·容器·云计算·ssh·onlyoffice
九转苍翎1 小时前
Java SE(10)——抽象类&接口
java
明月与玄武1 小时前
Spring Boot中的拦截器!
java·spring boot·后端
矢鱼1 小时前
单调栈模版型题目(3)
java·开发语言