Alpine系统的基础操作
简介
alpine是一个轻量级的Linux发行版本,轻量级不仅体现在其占用空间的大小,还因为他没有图形化界面,只有命令行界面。
alpine特点:
小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;
安全:面向安全的轻量发行版;
简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。
适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。
alpine国内源
清华大学:https://mirror.tuna.tsinghua.edu.cn/alpine/
阿里云:https://mirrors.aliyun.com/alpine/
网易:http://mirrors.163.com/
基本命令使用
apk 相当于 yum
用法:apk[…]命令[…]
/ # apk add vim
fetch https://dl-cdn.alpinelinux.org/alpine/v3.16/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.16/community/x86_64/APKINDEX.tar.gz
(1/5) Installing xxd (8.2.5000-r0)
(2/5) Installing lua5.4-libs (5.4.4-r5)
(3/5) Installing ncurses-terminfo-base (6.3_p20220521-r0)
(4/5) Installing ncurses-libs (6.3_p20220521-r0)
(5/5) Installing vim (8.2.5000-r0)
Executing busybox-1.35.0-r17.trigger
OK: 35 MiB in 19 packages
apk update 更新
apk update #更新最新镜像源列表
apk search 查找
apk search #查找所有可用软件包
/ # apk search
...
graphviz-graphs-3.0.0-r0
qt6-qtwebsockets-dev-6.3.0-r0
uwsgi-signal-2.0.20-r0
abook-lang-0.6.1-r5
softhsm-doc-2.6.1-r3
perl-mime-types-2.21-r0
py3-pastedeploy-2.1.1-r1
perl-net-http-doc-6.22-r0
shared-mime-info-lang-2.2-r0
font-iosevka-curly-slab-15.3.1-r0
restic-bash-completion-0.13.1-r4
fbida-2.14-r1
apk search -v #查找所以可用软件包及其描述内容
apk search -v 'acf*' #通过软件包名称查找软件包
/ # apk search -v 'acf*'
acf-lib-lua5.1-0.11.0-r2 - Lua 5.1 libraries for ACF
acf-alpine-baselayout-0.13.3-r2 - Web-based system administration interface for alpine-baselayout
acf-dnscache-0.6.0-r4 - Web-based system administration interface for dnscache
acf-nsd-0.0.1-r2 - Web-based system administration interface for nsd
alpine-conf-3.14.6-r0 - Alpine configuration management scripts
apk search -v -d 'docker' #通过描述文件查找特定的软件包
apk add 安装
apk info #列出所有已安装的软件包
apk info -a zlib #显示完整的软件包信息
apk info --who-owns /sbin/lbu #显示指定文件属于的包
/ # apk info
alpine-baselayout-data
musl
busybox
alpine-baselayout
alpine-keys
ca-certificates-bundle
libcrypto1.1
libssl1.1
ssl_client
zlib
apk upgrade 升级
apk upgrade #升级所有软件
apk upgrade openssh #升级指定软件
apk upgrade openssh openntp vim #升级多个软件
apk add --upgrade busybox #指定升级部分软件包
apk del 卸载
apk del openssh #删除一个软件
add: **相当于install**
del: **相当于remove**
创建用户和组
//创建用户
adduser
-h #创建家目录
-g #用户的详细信息
-s #登录shell
-G #组
-S #创建系统用户
-D #不分配密码
-H #不创建家目录
-u #UID
-k #创建框架目录
//删除用户
deluser
关机重启
localhost:~# reboot #重启系统
localhost:~# poweroff #关机
查看系统版本
[root@localhost ~]# docker run -it --rm alpine /bin/sh
/ # cat /etc/issue
Welcome to Alpine Linux 3.15
Kernel \r on an \m (\l)
配置apk源
配置apk源
[root@localhost ~]# cat apk
#!/bin/bash
#阿里源
version=v3.15
echo 'http://mirrors.aliyun.com/alpine/$version/main
http://mirrors.aliyun.com/alpine/$version/community
' >/etc/apk/repositories
apk update #更新
Dockerfile用Alpine系统做为底层镜像编译安装httpd
为什么用Alpine做底层镜像而不用centos呢,因为Alpine占用内存更小,上传和拉取更为方便,在企业里一般都是基于Apline底层镜像在做镜像的。
#现在网上把httpd的三个包下载下来然后创建一个httpd的目录。在httpd的目录下面创建一个files目录放三个安装包。
[root@localhost ~]# mkdir httpd
[root@localhost ~]# cd httpd
[root@localhost httpd]# mkdir files
[root@localhost httpd]# cd
[root@localhost ~]# mv apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.54.tar.gz httpd/files/
[root@localhost ~]# cd httpd/
[root@localhost httpd]# ls
files
[root@localhost httpd]# ls files/
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.54.tar.gz
[root@localhost httpd]#
写dockerfile文件
[root@localhost httpd]# cat Dockerfile
FROM alpine
LABEL MAINTAINER "kang 3102907818@qq.com"
EXPOSE 80
ADD files/* /tmp/
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk update && \
apk add --no-cache -U gcc libc-dev make expat-dev pcre-dev openssl-dev libtool && \
adduser -SHs /sbin/nologin apache && \
cd /tmp/apr-1.7.0/ && \
sed -i '/$RM "$cfgfile"/d' configure && \
./configure --prefix=/usr/local/apr && \
make && \
make install && \
cd && \
cd /tmp/apr-util-1.6.1/ && \
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && \
make && \
make install && \
cd && \
cd /tmp/httpd-2.4.54/ && \
./configure --prefix=/usr/local/apache --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork && \
make && \
make install && \
apk del gcc make && \
rm -rf /tmp/* /var/cache/*
WORKDIR /usr/local/apache
CMD ["-D","FOREGROUND"]
ENTRYPOINT ["/usr/local/apache/bin/httpd"]
[root@localhost httpd]# podman build -t httpd:v0.5 .
...
WORKDIR /usr/local/apache
CMD ["-D","FOREGROUND"]
ENTRYPOINT ["/usr/local/apache/bin/httpd"]
[root@localhost httpd]#
Executing busybox-1.35.0-r17.trigger
OK: 24 MiB in 29 packages
--> 6dff07d2150
STEP 6/8: WORKDIR /usr/local/apache
--> 0e22ae5a52e
STEP 7/8: CMD ["-D","FOREGROUND"]
--> 17183c23cb6
STEP 8/8: ENTRYPOINT ["/usr/local/apache/bin/httpd"]
COMMIT httpd:v0.5
--> 7570b5d872e
Successfully tagged localhost/httpd:v0.5
7570b5d872e7d650a64c0b74fa93333a43f40e06a8cb476f1cabcc306f6d797c
[root@localhost httpd]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/httpd v0.5 7570b5d872e7 12 seconds ago 120 MB
[root@localhost httpd]# podman run -d -p 8000:80 localhost/httpd:v0.5
0e495c50192e0d28cba5135b543a121c3eea80b9f80f5d56541637b41853cffa
#检验镜像是否能访问的到
[root@localhost httpd]# curl http://192.168.171.134:8000
<html><body><h1>It works!</h1></body></html>
[root@localhost httpd]# podman login docker.io
Username: nuanchun
Password:
Login Succeeded!
[root@localhost httpd]# podman push docker.io/nuanchun/httpd:v0.5
Trying to push docker.io/nuanchun/httpd:v0.5...
Getting image source signatures
Copying blob 213ec9aee27d skipped: already exists
Copying blob 4059ef3f52cf done
Copying blob f4853e097388 done
Copying config 7570b5d872 done
Writing manifest to image destination
Storing signatures
7570b5d872e7d650a64c0b74fa93333a43f40e06a8cb476f1cabcc306f6d797c