1, docker 安装
# 安装 yum-utils,否则没有下面用到的 yum-config-manager 命令
yum install -y yum-utils
添加Docker CE的yum源,如果国内不能访问的话,使用第二个链接
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
systemctl start docker
systemctl enable docker
docker -v
Docker version 20.10.8, build 3967b7d
2, 制作一个 jre 镜像
mkdir /root/jreimg && cd /root/jreimg
# 准备 jdk-8u231-linux-x64.tar.gz
# 将其中的 jre 解压复制出来,上传到服务器
# 给 jre/bin 目录下的程序赋可执行权限
chmod -R +x /root/jreimg/jre/bin
vim Dockerfile
# 新增如下内容
FROM docker.io/jeanblanchard/alpine-glibc
ADD jre /usr/local/jre
ENV JAVA_HOME /usr/local/jre
ENV PATH ${PATH}:${JAVA_HOME}/bin
CMD ["/usr/local/jre/bin/java", "-version"]
# 解释一下 alpine-gblic 是一个带有 c 运行库的轻型 linux 发行版,非常小,通常只有十几兆。
# 注意一下 有了 CMD 命令,那么在创建容器时,就会执行这个 CMD 而不会进入容器了。
# 构建 jre 镜像
docker build -f /root/jreimg/Dockerfile -t jre:8 .
# 看一下我们构建出来的镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jre 8 ef4b6e66bda7 4 seconds ago 252MB
jeanblanchard/alpine-glibc latest 3729f1c28e54 7 weeks ago 17.8MB
# 创建 jre 容器
# 注意一下,如果上面 Dockerfile 中有了 CMD 命令,那么下面的命令,是进入不了容器内部的,
# 而是执行该 CMD 命令,如果该命令不是阻塞型的,那么执行完,容器就停止了。
docker run --name jre -it jre:8
# 进入容器内部,确认一下 jre 正确传入了
/ # ls /usr/local/jre
bin lib plugin
/ # java -version
java version "1.8.0_231"
# ctrl + p + q 退出容器回到宿主机,而不会停止容器
# 看一下我们拥有的容器
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5c84d1e20533 jre:8 "/bin/sh" 48 seconds ago Up 47 seconds jre
# 停止容器
docker stop jre
# 如果要重来,那么删除容器,删除镜像
docker rm jre
docker rmi jre:8
3, 制作一个 java 应用程序镜像
创建一个 maven 项目 ash-test。
编写一个测试文件 Test.java
package com.dosrain;
public class Test {
public static void main(String[] args) {
System.out.println("Hello, Luchunyu");
}
}
打包成 ash-test-0.0.1.jar
开始制作 ast-test 镜像
mkdir /root/ashimg && cd /root/ashimg
# 将 ash-test-0.0.1.jar 上传到服务器
# 创建一个运行脚本
vim run.ash.sh
#!/bin/sh
java -cp /root/ash-test/ash-test-0.0.1.jar com.dosrain.Test
# 解释一下,alpine-gblic 镜像中只有 /bin/sh 的环境,如果使用 /bin/bash 是要报错的。
# 给 run.ash.sh 脚本文件赋可执行权限
chmod +x ./run.ash.sh
vim Dockerfile
# 新增如下内容
FROM jre:8
ADD ash-test-0.0.1.jar /root/ash-test/
ADD run.ash.sh /root/ash-test/
ENTRYPOINT ["/root/ash-test/run.ash.sh"]
# 解释一下 alpine-gblic 是一个带有 c 运行库的轻型 linux 发行版,非常小,通常只有十几兆。
# 注意一下 有了 CMD 命令,那么在创建容器时,就会执行这个 CMD 而不会进入容器了。
# 构建 jre 镜像
docker build -f /root/ashimg/Dockerfile -t ash-test:0.0.1 .
# 看一下我们构建出来的镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ash-test 0.0.1 6927c571c100 5 seconds ago 252MB
jre 8 9c1b15bd1268 3 hours ago 252MB
jeanblanchard/alpine-glibc latest 3729f1c28e54 7 weeks ago 17.8MB
# 创建 ash-test 容器
docker run --name ash-test -it ash-test:0.0.1
Hello, Luchunyu
# 看一下我们拥有的容器
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce6be592f09c ash-test:0.0.1 "/root/ash-test/run.…" 56 seconds ago Exited (0) 56 seconds ago ash-test
b18bc1f4ef62 jre:8 "/bin/sh" 3 hours ago Exited (1) 2 hours ago jre
# 因为 ash-test 容器启动后,打印 hello, luchunyu 之后,就停止运行了,
# 我们可以不停的重新启动它,使它不停的执行预定的脚本程序。
docker start -ia ash-test
# 如果要重来,那么删除容器,删除镜像
docker rm ash-test
docker rmi ash-test:0.0.1
好了,本文先到这里了。