关于Alpine

Alpine介绍

Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多。在保持瘦身的同时,Alpine 还提供了自己的包管理工具 apk,可以通过 https://pkgs.alpinelinux.org/packages 网站上查询包信息,也可以直接通过 apk 命令直接查询和安装各种软件。

Alpine 由非商业组织维护的,支持广泛场景的 Linux发行版,特别为资深/重度Linux用户而优化,关注安全,性能和资源效能。
Alpine 镜像可适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统/环境。

Alpine Docker 镜像也继承了 Alpine Linux 发行版的这些优势。相比于其他 Docker 镜像,它的容量非常小,仅仅只有 5 MB 左右(对比 Ubuntu 系列镜像接近 200 MB),且拥有非常友好的包管理机制。官方镜像来自 docker-alpine 项目。

Alpine 中软件安装包的名字可能会与其他发行版有所不同,可在 https://pkgs.alpinelinux.org/packages 网站搜索并确定安装包名称。如果需要的安装包不在主索引内,但是在测试或社区索引中。可按照以下方法使用这些安装包。
$ echo "http://dl-4.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
$ apk --update add --no-cache <package>

编写Dockerfile

[root@node2 ~]# vim Dockerfile
FROM alpine:3.13.6

RUN set -x; \
    echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \
    echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories && \
    apk upgrade && \
    apk add --no-cache ca-certificates && \
    apk add --no-cache unzip curl bash bash-doc bash-completion bash wget vim net-tools && \
    rm -rf /tmp/* /var/cache/apk/*

WORKDIR /

ADD jdk-8u301-linux-x64.tar.gz apache-tomcat-9.0.53.tar.gz /

COPY glibc-2.32-r0.apk glibc-bin-2.32-r0.apk glibc-dev-2.32-r0.apk glibc-i18n-2.32-r0.apk /
COPY sgerrand.rsa.pub   /etc/apk/keys/sgerrand.rsa.pub

RUN /bin/bash && \
    apk add glibc-2.32-r0.apk glibc-bin-2.32-r0.apk glibc-dev-2.32-r0.apk glibc-i18n-2.32-r0.apk && \
    rm -rf *.apk  /var/cache/apk/* && \
    mv /apache-tomcat-9.0.53  /tomcat9 && \
    rm -rf /tomcat9/webapps/{docs,examples,host-manager,manager} && \
# install JRE
    apk add --no-cache openjdk8-jre-base && \
    rm -rf /var/cache/apk/*

COPY Shanghai /etc/localtime

ENV JAVA_HOME=/jdk1.8.0_301
ENV CLASSPATH=JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$PATH:.JAVA_HOME/bin:$PATH

EXPOSE 8080

CMD ["/tomcat9/bin/catalina.sh","run"]

构建镜像

[root@node2 ~]# docker build -t alpine:v1 .

创建容器

该步可自定义添加其他参数

[root@node2 ~]# docker run -itd --name tomcat1 -p 8080:8080 alpine:v1

Alpine包管理

Alpine使用apk进行包管理,下面介绍常用命令

1.apk update
$ apk update #更新最新镜像源列表

2.apk search
$ apk search #查找所以可用软件包
$ apk search -v #查找所以可用软件包及其描述内容
$ apk search -v 'acf*' #通过软件包名称查找软件包
$ apk search -v -d 'docker' #通过描述文件查找特定的软件包

3.apk add
$ apk add openssh #安装一个软件
$ apk add openssh openntp vim   #安装多个软件
$ apk add --no-cache mysql-client  #不使用本地镜像源缓存,相当于先执行update,再执行add

4.apk info
$ apk info #列出所有已安装的软件包
$ apk info -a zlib #显示完整的软件包信息
$ apk info --who-owns /sbin/lbu #显示指定文件属于的包

5.apk upgrade
$ apk upgrade #升级所有软件
$ apk upgrade openssh #升级指定软件
$ apk upgrade openssh openntp vim   #升级多个软件
$ apk add --upgrade busybox #指定升级部分软件包

6.apk del
$ apk del openssh  #删除一个软件

Alpine常用命令

[root@node2 ~]# docker exec -it b013b /bin/sh
/ # apk search --no-cache openssh



Alpine安装常用服务

# 配置sshd
/ # apk add --no-cache openssh-server openssh-client
/ # sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config && \
/ # ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key && \
/ # ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key && \
/ # ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key && \
/ # echo "root:admin" | chpasswd       # root用户的密码改为admin
/ # /usr/sbin/sshd -D                  # 指定此选项后sshd不会分离也不会成为守护进程
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
126: eth0@if127: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

/ # exit

# 本机测试ssh连接
[root@node2 ~]# ssh root@172.17.0.2
root@172.17.0.2's password:                 # 密码是admin
Welcome to Alpine!

The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org/>.

You can setup the system with the command: setup-alpine

You may change this message by editing /etc/motd.

b013b0ebcb2f:~# cat /etc/issue 
Welcome to Alpine Linux 3.13
Kernel \r on an \m (\l)

FAQ

提示源没有这个openssh的包

解决方式:
在dockerfile中改为国内的源
http://mirrors.aliyun.com/alpine/latest-stable/main/
http://mirrors.aliyun.com/alpine/latest-stable/community/

创建容器文件修改
[root@docker43 ~]# docker run -it alpine
/ # vi /etc/apk/repositories
http://mirrors.aliyun.com/alpine/latest-stable/main/
http://mirrors.aliyun.com/alpine/latest-stable/community/
                                                     
#http://dl-cdn.alpinelinux.org/alpine/v3.8/main    
#http://dl-cdn.alpinelinux.org/alpine/v3.8/community

# 注释或者删除原来的默认源,添加阿里云的源,然后执行apk update,在进行安装就OK了


2、ssh 启动问题
/ # /etc/init.d/sshd start
/bin/sh: /etc/init.d/sshd: not found

这样的方式不能启动,需要安装一个alpine的管理工具
apk add --no-cache openrc
/ # /etc/init.d/sshd start
 * WARNING: sshd is already starting
 所以使用 /usr/sbin/sshd -D 方式启动。但是又出现如下错误
 / # /usr/sbin/sshd -D
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.
解决方式:
ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key

再次启动
/ # /usr/sbin/sshd -D

启动成功


3、创建容器后的网络问题
[root@docker43 opt]# docker run -it alpine
WARNING: IPv4 forwarding is disabled. Networking will not work.

解决方式:
[root@docker43 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1    # 添加这一行

[root@docker43 ~]# docker run -it alpine
/ #
posted @ 2021-09-28 13:07  Linux大魔王  阅读(530)  评论(0编辑  收藏  举报