一、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/*