一、Alpine Linux 简介
-
Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版(centos、Ubuntu),Alpine采用了musl libc 和 BusyBox以减少系统的体积和运行时的资源消耗。
-
小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB; 包管理: https://pkgs.alpinelinux.org/packages
-
建议使用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/*