首页 » docker » 正文

基于alpine 制作jdk8镜像

一.环境

系统版本:
Ubuntu18.04 LTS

docker版本:

Client:
Version: 18.05.0-ce
API version: 1.37
Go version: go1.9.5
Git commit: f150324
Built: Wed May 9 22:16:13 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm

Server:
Engine:
Version: 18.05.0-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: f150324
Built: Wed May 9 22:14:23 2018
OS/Arch: linux/amd64
Experimental: false

jdk版本:
jdk-8u172

二.安装docker

Ubuntu18下安装

由于Ubuntu18比较新,没有稳定版可用。所以,我装的是月更版(edge)


在其中写入源地址

保存,退出

CentOS7下安装

首先进入官网:
1、https://docs.docker.com/install/linux/docker-ce/centos/#upgrade-docker-ce
2、https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

下载最新版

接下来执行:
1、 (执行时间较长,耐心些)
2、如果不执行上面这个 可能要执行  
3、

三.配置用户组

docker安装时默认创建了docker用户组,将普通用户加入docker用户组就可以不使用sudo来操作docker

注意:
光加入还不行,要么重新登录。
要么执行newgrp – docker (改变当前用户的有效群组)

如果一切OK 那么就可以执行

四.拉取镜像

我们以阿里云的为例。
假设你已经注册并登录阿里云的镜像中心

配置镜像源,请参考 《Linux上yum安装docker

我这里配置好了,直接拉取镜像

官网地址:
https://hub.docker.com/_/alpine/

接下来首先到Oracle去下载JDK1.8

五.创建基础镜像(jdk8:1.0)

步骤:

1、我们首先创建一个空文件夹,叫做myjava
2、在myjava里面创建一个文件夹叫做install

然后在myjava文件夹

tips:ADD 会进行压缩包的自动解压

执行编译:

如果成功 容器内部 /usr/local/下面会有个文件夹叫做jdk1.8.0_172

六.排坑

我们可以使用 进入

你会发现无论如何都无法运行java.
因为 Oracle Java 基于 GNU Standard C library[glibc]),而 alpine 是 MUSL libc(迷你libc)

请查看这个帖子:
https://wiki.alpinelinux.org/wiki/Running_glibc_programs

手动执行以下安装方式:

项目地址在这里:
https://github.com/sgerrand/alpine-pkg-glibc

七.设置镜像源

1、alpine使用的是apk包管理器,命令,如apk add 、apk update 、apk del
2、在中国,默认镜像源可能比较慢,常用的有
中科大镜像源:http://mirrors.ustc.edu.cn/alpine/
阿里云镜像源:http://mirrors.aliyun.com/alpine/

设置方式:

设置后要执行

八..dockerignore的设置

在 .dockerignore 文件中指定在传递给 docker引擎 时需要忽略掉的文件或文件夹

我们不想把/install 下的文件也传给daemon

在myjava里创建一个.dockerignore文件写入

九.基于基础镜像(jdk8:1.0)的再次编译

到此,制作jdk镜像成功!

tips:
(Clean up)

By default a container’s file system persists even after the container exits. This makes debugging a lot easier (since you can inspect the final state) and you retain all your data by default. But if you are running short-term foreground processes, these container file systems can really pile up. If instead you’d like Docker to automatically clean up the container and remove the file system when the container exits, you can add the –rm flag

大概意思是说:
即使在容器退出后,默认情况下容器的文件系统仍然存在。 这使调试更容易(因为您可以检查最终状态),并且默认情况下保留所有数据。 但是如果你正在运行短期的前台进程,这些容器文件系统可能真的堆积如山。 如果您希望Docker在容器退出时自动清理容器并移除文件系统,则可以添加 标志

参考文档:
https://docs.docker.com/engine/reference/run/#clean-up—rm

十.一步到位Dockerfile

发表评论

正在加载验证码......

请先完成验证