由于基础环境是JDK1.8,我们其中一个依赖是JDK17的平台,因此使用如下方案:
1、Docker拉取CentOS7.9.2009镜像
docker pull centos:7.9.2009
docker 拉取镜像有一个需要注意的点,就是镜像源,目前【2025年01月07日】我使用的镜像源是可用的,分享给大家一起使用吧。
vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
}
2、准备好jdk17、maven3.6.3的安装包【百度网盘中已准备妥当】
通过网盘分享的文件:分享空间
链接: https://pan.baidu.com/s/1KjWGd3RF66GbNsXIVrW_1w?pwd=grg2 提取码: grg2
--来自百度网盘超级会员v9的分享
3、创建dockerfile
cd /data/centos7
vi dockerfile
############# 以下是dockerfile内容 #############
# 获取基础镜像
FROM centos:7.9.2009
# 创建者
MAINTAINER 经年不忘
# 创建Java、Maven环境所需的目录
RUN mkdir -p /usr/local/java
RUN mkdir -p /usr/local/maven
# 将包添加到镜像指定目录中
ADD jdk17.tar.gz /usr/local/java/
ADD maven-3.6.3.tar.gz /usr/local/maven
# 设置环境变量
ENV JAVA_HOME=/usr/local/java/jdk-17.0.13+11
ENV PATH=$PATH:$JAVA_HOME/bin
ENV MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
ENV PATH=$PATH:$MAVEN_HOME/bin
############# 以上是dockerfile内容 #############
4、执行dockerfile
docker build -t centos7.9:1.0.0 .
解释一下:
-t
:指定构建出的镜像名称和标签。
centos7.9 是新创建的镜像名。
1.0.0 是新创建的镜像版本。
.
表示使用当前目录下的 Dockerfile 进行构建。
如果 Dockerfile 不在当前目录下,可以使用 -f
指定其路径。
例如:
docker build -t centos7.9:1.0.0 -f /path/to/Dockerfile .
此时,通过docker images命令,可查看新创建的镜像:
docker images
我称这个镜像为:基础镜像。
5、运行基础镜像,并完善基础镜像
docker run -id \
--name=centos7.9 \
--restart=always \
--privileged=true \
-e "TZ=Asia/Shanghai" \
-p 8588:8080 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /data/docker/centos7.9/data:/data \
centos7.9:1.0.0 /bin/bash
解释一下:
docker run -id \ 交互后台运行
--name=centos7.9 \ 设置容器名称
--restart=always \ 跟随docker启动
--privileged=true \ 赋予容器几乎与主机相同的权限【1、给容器添加了所有的capabilities;2、允许容器访问主机的所有设备】
-e "TZ=Asia/Shanghai" \ 将时区设置为亚洲/上海
-p 8588:8080 \ 映射容器8080端口至宿主机8588端口【对外访问还需要防火墙放通8588端口】
-v /etc/localtime:/etc/localtime:ro \ 同步本地时间。ro表示这是一个只读挂载。
-v /etc/timezone:/etc/timezone:ro \ 同步本地时区ro表示这是一个只读挂载。
-v /data/docker/centos7.9/data:/data \ 映射 宿主机本地目录 : 镜像目录
centos7.9:1.0.0 /bin/bash 镜像名:版本号 /bin/bash 进入容器
进入容器后,需要设置DNS,否则无法访问外网。设置如下:
vi /etc/resolv.conf
nameserver 8.8.8.8
nameserver 4.4.4.4
修改centos7.9.2009的yum源,否则yum用不了。
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
# mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
重点就两个:
1、注释mirrorlist
2、释放baseurl,并修改为mirrors.aliyun.com。使用阿里的源。
此时,执行yum update并安装所需要的包及基础镜像所需的环境。
执行如下操作,确认环境是否正确:
java -version
openjdk version "17.0.13" 2024-10-15
OpenJDK Runtime Environment Temurin-17.0.13+11 (build 17.0.13+11)
OpenJDK 64-Bit Server VM Temurin-17.0.13+11 (build 17.0.13+11, mixed mode, sharing)
mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven/apache-maven-3.6.3
Java version: 17.0.13, vendor: Eclipse Adoptium, runtime: /usr/local/java/jdk-17.0.13+11
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
见到如上信息,则环境OK。
6、保存基础镜像,方便在其他项目上使用
docker commit centos7.9 centos-jdk17:1.0.0
此处的centos7.9也可以用容器id代替。
centos-jdk17为基础镜像的新的名称。
1.0.0 如果不加这个版本号,则默认为latest。
到此,在宿主机jdk1.8的环境下,运行jdk17的项目的环境则搭建完成了,运行项目可以通过进入容器执行nohup,或者写shell文件执行均可。
可通过留言或加好友,留下问题。我会在线帮助,如果是共性问题,我也会整理出来方便后来的同学查阅。