alpine用法以及dockerfile做apache编译安装
一、alpine简介
alpine是一个轻量级的Linux发行版本,轻量级不仅体现在其占用空间的大小,还因为它没有图形化界面,只有命令行界面。
特点:
- 小巧:基于Musl libc和busybox,和busybox一样小巧,最小的docker镜像只有5MB;
- 安全:面向安全的轻量发行版;
- 简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便;
- 适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像;
alpine镜像下载
更新仓库
localhost:~# cd /etc/apk
localhost:/etc/apk# ls
arch protected_paths.d world
keys repositories
localhost:/etc/apk# apk update
3.15.0 [/media/cdrom/apks]
OK: 85 distinct packages available
localhost:/etc/apk#
网络配置
localhost:~# cat /etc/network/interfaces
atuo lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.183.100
netmask 255.255.255.0
geteway 192.168.183.2
localhost:~# /etc/init.d/networking restart
* Stopping networking ...
* lo ... [ ok ]
* eth0 ... [ ok ]
* Starting networking ...
* lo ... [ ok ]
* eth0 ... [ ok ]
localhost:~# 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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:1e:90:2e brd ff:ff:ff:ff:ff:ff
inet 192.168.183.100/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe1e:902e/64 scope link
valid_lft forever preferred_lft forever
localhost:~#
SSH远程
alpine安装完成后是不允许远程登录的,需要我们修改配置文件,修改完配置文件后重启服务才可进行远程
localhost:~# apk add openssh
······
localhost:~# vi /etc/ssh/sshd_config
#LoginGraceTime 2m
PermitRootLogin yes //此行取消注释后,将prohibit-password替换为yes
#StrictModes yes
开机自启
localhost:~# rc-update add sshd
重启
localhost:~# /etc/init.d/sshd restart
设置root密码
localhost:~# passwd root
基本命令用法
apk update
apk update //更新最新镜像源列表
localhost:~# apk update
3.15.0 [/media/cdrom/apks]
OK: 85 distinct packages available
localhost:~#
apk search
apk search #查找所以可用软件包
apk search -v #查找所以可用软件包及其描述内容
apk search -v 'acf*' #通过软件包名称查找软件包
apk search -v -d 'docker' #通过描述文件查找特定的软件包
apk add
apk add openssh #安装一个软件
apk add openssh openntp vim #安装多个软件
apk add --no-cache -U apache2 #不使用本地镜像源缓存,相当于先执行update,再执行add
apk info
apk info #列出所有已安装的软件包
apk info -a zlib #显示完整的软件包信息
apk info --who-owns /sbin/lbu #显示指定文件属于的包
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 #关机
dockerfile做alpine编译安装镜像
创建目录并下载所需安装包
[root@localhost ~]#mkdir -p /srv/web
[root@localhost ~]# cd /srv/web/
[root@localhost web]# ls
[root@localhost web]# echo "test" > index.html
[root@localhost web]# cat index.html
test
[root@localhost ~]# mkdir httpd
[root@localhost ~]# cd httpd/
[root@localhost httpd]# mkdir files
[root@localhost httpd]# touch Dockerfile
[root@localhost httpd]# ls
Dockerfile files
[root@localhost httpd]# cd files/
[root@localhost files]# wget http://mirrors.aliyun.com/apache/apr/apr-1.7.0.tar.gz
[root@localhost files]# wget https://mirrors.aliyun.com/apache/apr/apr-util-1.6.1.tar.gz
[root@localhost files]# wget https://mirrors.aliyun.com/apache/httpd/httpd-2.4.54.tar.gz
[root@localhost files]# ls
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.54.tar.gz
编写entrypoint.sh脚本
[root@localhost files]# vim entrypoint.sh
[root@localhost files]# cat entrypoint.sh
#!/bin/bash
sed -i '/^ServerName/s/#//g' /usr/local/apache/conf/httpd/conf
exec "$@"
[root@localhost files]# chmod +x entrypoint.sh
[root@localhost files]# ll
总用量 11136
-rw-r--r--. 1 root root 1093896 4月 5 2019 apr-1.7.0.tar.gz
-rw-r--r--. 1 root root 554301 10月 23 2017 apr-util-1.6.1.tar.gz
-rwxr-xr-x. 1 root root 87 8月 30 21:23 entrypoint.sh
-rw-r--r--. 1 root root 9743277 6月 8 16:42 httpd-2.4.54.tar.gz
编写dockerfile
[root@localhost httpd]# vim Dockerfile
[root@localhost httpd]# cat Dockerfile
FROM alpine
LABEL MANTAINER "JL 1548126326@qq.com"
ENV apr_version=1.7.0 apr_util_version=1.6.1 httpd_version=2.4.54
ADD files/* /tmp/
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk update && \
adduser -SHs /sbin/nologin apache && \
apk add --no-cache -U gcc libc-dev make expat-dev pcre-dev openssl-dev libtool && \
cd /tmp/apr-${apr_version} && \
sed -i '/$RM "$cfgfile"/d' configure && \
./configure --prefix=/usr/local/apr && \
make && make install && \
cd /tmp/apr-util-${apr_util_version} && \
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && \
make && make install && \
cd /tmp/httpd-${httpd_version} && \
./configure --prefix=/usr/local/apache \
--sysconfdir=/etc/httpd24 \
--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 && \
mv /tmp/entrypoint.sh / && \
apk del gcc make && \
rm -rf /tmp/* /var/cache/*
EXPOSE 80
WORKDIR /usr/local/apache
CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]
ENTRYPOINT ["/bin/bash","/entrypoint.sh"]
创建镜像
[root@localhost httpd]# cd
[root@localhost ~]# podman build -t test/httpd:v0 httpd/
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/test/httpd v0 5b312457b7af About a minute ago 128 MB
docker.io/library/alpine latest c059bfaa849c 9 months ago 5.87 MB
创建容器,链接外部存储,并测试
[root@localhost ~]# podman run -d --name web -p 80:80 -v /srv/web/://usr/local/apache/htdocs/:Z test/httpd:v0
[root@localhost web]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f3dc425697b localhost/test/httpd:v0 /usr/local/apache... 10 minutes ago Up 10 minutes ago 0.0.0.0:80->80/tcp web
[root@localhost ~]# curl localhost:80
test

上传镜像到dockerhub
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/test/httpd v0 5b312457b7af 38 minutes ago 128 MB
docker.io/library/alpine latest c059bfaa849c 9 months ago 5.87 MB
[root@localhost ~]# podman push test/httpd:v0
Getting image source signatures
Copying blob 8d3ac3489996 done
Copying blob bdb16d456f26 done
Copying blob 796a38c423e2 done
Copying config 5b312457b7 done
Writing manifest to image destination
Storing signatures

本文介绍了如何使用alpine Linux这一轻量级发行版进行基础操作,如更新仓库、安装Apache,以及如何利用Dockerfile创建自定义的Apache镜像,包括下载安装包、编写entrypoint.sh和Dockerfile,最后测试和上传到dockerhub。
1016

被折叠的 条评论
为什么被折叠?



