Alpine制作java镜像

9 篇文章 1 订阅
本文详细介绍了如何在Alpine Linux上配置网络、使用apk软件包管理工具,以及制作包含Java的Dockerfile实例。涉及主机名设置、DNS配置、软件包安装与升级,以及SSH服务、Nginx部署和Dockerfile的编写技巧。
摘要由CSDN通过智能技术生成

一、Alpine Linux 简介

  1. Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版(centos、Ubuntu),Alpine采用了musl libc 和 BusyBox以减少系统的体积和运行时的资源消耗。

  2. 小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB; 包管理: https://pkgs.alpinelinux.org/packages

  3. 建议使用Alpine Linux 3.10.0版本,这也是 v3.10 稳定系列的首个版本
    alpine:3.10

二、Alpine的配置和使用

1.网络相关

#主机名
/etc/hostname
#设置主机名,立刻生效
hostname -F /etc/hostname
#主机IP和域名映射文件
/etc/hosts
#dns服务器配置文件
/etc/resolv.conf
#内容:
nameserver 218.2.135.1
#网卡配置文件
/etc/network/interfaces
#文件内容为:

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

      address 192.168.3.166

      netmask 255.255.255.0

      gateway 192.168.3.254

#修改完相关配置以后,重新启动网络服务:

/etc/init.d/networking restart

网络相关的文档,详见:https://wiki.alpinelinux.org/wiki/Configure_Networking

#更新国内源
# Alpine的源文件为:

/etc/apk/repositories,

# 默认的源地址为:http://dl-cdn.alpinelinux.org/

#可以编辑源文件

/etc/apk/repositories,

#采用国内阿里云的源,文件内容为:

https://mirrors.aliyun.com/alpine/v3.6/main/

https://mirrors.aliyun.com/alpine/v3.6/community/

# 如果采用中国科技大学的源,文件内容为:

https://mirrors.ustc.edu.cn/alpine/v3.6/main/

https://mirrors.ustc.edu.cn/alpine/v3.6/community/

2.软件包管理工具apk的使用

alpine 提供了非常好用的apk软件包管理工具,

可以方便地安装、删除、更新软件。

#查询openssh相关的软件包

apk search  openssh 

#安装一个软件包

apk add  xxx 

#删除已安装的xxx软件包

apk del  xxx 

#获取更多apk包管理的命令参数

apk --help 

#比如安装常用的网络相关工具:

#更新软件包索引文件

apk update   

#用于文本方式查看网页,用于测试http协议

apk add curl 

#提供了查看网络连接的协议端口的命令ss,可以替代netstat命令

apk add iproute2 

#drill 命令可以替代dig和nslookup DNS查询命令

apk add drill 

#测试192.168.3.166的80端口,查看web服务是否能正常访问。

curl 192.168.3.166 

#查看建立的TCP连接

ss -ta 

#查询域名的信息

drill blog.csdn.net @8.8.8.8   

#根据IP地址,反向查找域名

drill -x 8.8.8.8 @47.94.71.34   

4.4开启SSH服务

#安装openssh-server服务器

apk add openssh-server

#修改配置文件

/etc/ssh/sshd_config,

#如果要想使用root用户远程管理,需要修改参数为:

PermitRootLogin yes

#将ssh服务配置为开机自动启动

rc-update add sshd

#如果你想立刻生效,可以执行命令:

/etc/init.d/sshd restart

4.5安装nginx

#安装Nginx软件并更新到最新,

apk add --update nginx 

#手工启动Nginx

/etc/init.d/nginx 

#将Nginx添加到启动服务中,下次开机自动运行

rc-update add nginx   

#测试Nginx服务是否正常,使用curl访问,

#默认配置会返回nginx的404页面错误,标明服务已正常:

curl 192.168.3.166

三、Dockerfile制作JAVA镜像

1、软件包准备

说明:
需要的软件包都会在附件中提供

[root@135 alpine-glibc]# ls
Dockerfile        glibc-2.30-r0.apk      glibc-i18n-2.30-r0.apk  server-jre-8u301-linux-x64.tar.gz
Dockerfile.bak-1  glibc-bin-2.30-r0.apk  jre1.8.tar.gz

2、dockerfile编写

#1.指定基础镜像,并且必须是第一条指令
FROM alpine:3.10

#2.指明该镜像的作者和其电子邮件
MAINTAINER YMY "2312398095@qq.com"

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /ymy_docker/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
ADD jre1.8.tar.gz /ymy_docker/jdk/

## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
#1.指定基础镜像,并且必须是第一条指令
FROM alpine:3.10

#2.指明该镜像的作者和其电子邮件
MAINTAINER YMY "2312398095@qq.com"

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /ymy_docker/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
ADD jre1.8.tar.gz /ymy_docker/jdk/

## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.30-r0.apk /ymy_docker/jdk/
COPY glibc-bin-2.30-r0.apk /ymy_docker/jdk/
COPY glibc-i18n-2.30-r0.apk /ymy_docker/jdk/

#5.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了
RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
    echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
RUN apk update && apk upgrade

#6.运行指定的命令
## Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
## 用来安装一些常用软件,其语法如下:apk add bash wget curl git make vim docker
## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh:   wget: not found”,网上例子少安装wget
## ca-certificates证书服务,是安装glibc前置依赖
RUN apk --no-cache add ca-certificates wget && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && apk add glibc-2.30-r0.apk glibc-bin-2.30-r0.apk glibc-i18n-2.30-r0.apk && rm -rf /var/cache/apk/* glibc-2.30-r0.apk glibc-bin-2.30-r0.apk glibc-i18n-2.30-r0.apk

#7.中文字符集配置,时间配置,默认同步宿主机的
ENV LANG=C.UTF-8
RUN /usr/glibc-compat/bin/localedef --force --inputfile POSIX --charmap UTF-8 "$LANG" || true && \
    echo "export LANG=$LANG" > /etc/profile.d/locale.sh \
&& apk add tzdata \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
     && echo "Asia/Shanghai" > /etc/timezone && apk del tzdata
     
#8.配置环境变量
ENV JAVA_HOME=/ymy_docker/jdk/jdk1.8.0_301
ENV PATH=$JAVA_HOME/bin:$PATH

#9.安装字体包,不然程序生成验证码等操作可能有问题
RUN apk  add  --update   ttf-dejavu fontconfig &&  rm -rf /var/cache/apk/*

Alpine Linux 是一种轻量级的 Linux 发行版,以其小型、安全和高效的特性而知名。要制作一个包含 JDK 21 的 Alpine 镜像,你需要按照以下步骤操作: 1. **基础镜像选择**: 使用 `alpine` 基础镜像作为起点,因为它的体积小且适合构建最小化镜像。你可以使用官方的 `alpine:latest` 或者指定特定版本,如 `alpine:3.14`。 2. **下载 JDK**: 使用 `apk add` 或 `wget` 下载 JDK 21 的二进制文件。你可以从 Oracle 或 Adoptium(以前的 OpenJDK)官方网站下载最新版本的 JDK,然后复制到镜像中。 3. **解压并配置**: 将下载的JDK压缩包解压到镜像中的一个合适的目录,例如 `/opt` 或 `/usr/lib/jvm`。记得设置必要的权限以便后续使用。 4. **环境变量设置**: 添加环境变量 `JAVA_HOME` 指向JDK的安装路径,这样系统可以方便地找到Java。 5. **添加启动脚本**: 创建一个启动脚本(比如 `/usr/bin/java`),使用户可以通过命令行运行 `java` 或 `javac`。 6. **清理不必要的文件**: 删除下载的JDK安装包以减小程序大小。 7. **运行时权限**: 如果你的镜像需要在容器中运行,确保给予必要的执行权限。 8. **制作镜像**: 使用 `docker build` 命令创建一个新的Docker镜像,指定基础镜像和上述操作的结果。 **相关问题--:** 1. 如何确保在镜像中JDK的依赖项是最新的? 2. 在制作镜像时,如何处理JDK更新的问题? 3. 如何在Dockerfile中编写命令来添加启动脚本并设置环境变量?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值