podman用脚本和dockerfile做apache编译安装镜像(alpine版)
alpine系统是什么
Alpine Linux 是一个基于 musl libc 和 busybox 的面向安全的轻量级 Linux 发行版。
alpine系统的特点
小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;
安全:面向安全的轻量发行版;
简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。
适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。
alpine镜像下载
alpine官网
alpine国内源
清华大学:https://mirror.tuna.tsinghua.edu.cn/alpine/
阿里云:https://mirrors.aliyun.com/alpine/
网易:http://mirrors.163.com/
更换apk源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
alpine基础命令
apk update //更新最新镜像源列表
apk search //查找所以可用软件包
apk search -v //查找所以可用软件包及其描述内容
apk search -v ‘acf*’ //通过软件包名称查找软件包
apk search -v -d ‘docker’ //通过描述文件查找特定的软件包
apk add openssh //安装一个软件
apk add openssh openntp vim //安装多个软件
apk add --no-cache mysql-client //不使用本地镜像源缓存,相当于先执行update,再执行add
apk info //列出所有已安装的软件包
apk info -a zlib //显示完整的软件包信息
apk info --who-owns /sbin/lbu //显示指定文件属于的包
apk upgrade //升级所有软件
apk upgrade openssh //升级指定软件
apk upgrade openssh openntp vim //升级多个软件
apk add --upgrade busybox //指定升级部分软件包
apk del openssh //删除一个软件
服务管理
alpine没有使用fedora的systemctl来进行服务管理,使用的是RC系列命令:
rc-update //主要用于不同运行级增加或者删除服务
rc-status //主要用于运行级的状态管理
rc-service //主用于管理服务的状态
rc-status -a //列出系统所有服务
关闭系统
reboot //重启系统
poweroff //关机
dockerfile创建apache镜像
创建好目录结构
#下载好需要使用的包
[root@localhost ~]# wget http://mirrors.aliyun.com/apache/apr/apr-1.7.0.tar.gz https://mirrors.aliyun.com/apache/apr/apr-util-1.6.1.tar.gz https://mirrors.aliyun.com/apache/httpd/httpd-2.4.54.tar.gz
--2022-08-31 20:50:18-- http://mirrors.aliyun.com/apache/apr/apr-1.7.0.tar.gz
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 119.96.17.242, 58.42.55.237, 36.99.20.191, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|119.96.17.242|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1093896 (1.0M) [application/octet-stream]
Saving to: ‘apr-1.7.0.tar.gz’
apr-1.7.0.tar.gz 100%[=========================>] 1.04M --.-KB/s in 0.04s
2022-08-31 20:50:18 (27.3 MB/s) - ‘apr-1.7.0.tar.gz’ saved [1093896/1093896]
--2022-08-31 20:50:18-- https://mirrors.aliyun.com/apache/apr/apr-util-1.6.1.tar.gz
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|119.96.17.242|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 554301 (541K) [application/octet-stream]
Saving to: ‘apr-util-1.6.1.tar.gz’
apr-util-1.6.1.tar.gz 100%[=========================>] 541.31K --.-KB/s in 0.03s
2022-08-31 20:50:19 (18.3 MB/s) - ‘apr-util-1.6.1.tar.gz’ saved [554301/554301]
--2022-08-31 20:50:19-- https://mirrors.aliyun.com/apache/httpd/httpd-2.4.54.tar.gz
Reusing existing connection to mirrors.aliyun.com:443.
HTTP request sent, awaiting response... 200 OK
Length: 9743277 (9.3M) [application/octet-stream]
Saving to: ‘httpd-2.4.54.tar.gz’
httpd-2.4.54.tar.gz 100%[=========================>] 9.29M 46.1MB/s in 0.2s
2022-08-31 20:50:19 (46.1 MB/s) - ‘httpd-2.4.54.tar.gz’ saved [9743277/9743277]
FINISHED --2022-08-31 20:50:19--
Total wall clock time: 1.3s
Downloaded: 3 files, 11M in 0.3s (40.4 MB/s)
创建好一个目录存放包和dockerfile
[root@localhost ~]# mkdir httpd
[root@localhost ~]# cd httpd
[root@localhost httpd]# mkdir files
[root@localhost httpd]# touch Dockerfile
[root@localhost httpd]# cd
[root@localhost ~]# mv *.tar.gz httpd/files/
编写一个entrypoint.sh的脚本
[root@localhost httpd]# cd files/
[root@localhost files]# vim entrypoint.sh
#!/bin/bash
sed -i '/^ServerName/s/#//g' /usr/local/apache/conf/httpd/conf
exec "$@"
[root@localhost files]# chmod +x entrypoint.sh
编写dockerfile
[root@localhost ~]# cd httpd/
[root@localhost httpd]# vim Dockerfile
[root@localhost httpd]# cat Dockerfile
FROM alpine
LABEL MANTAINER "SHU 2228706561@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 ~]# docker build -t shujiaming/httpd:v2 httpd/
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
STEP 1/9: FROM alpine
Resolved "alpine" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/alpine:latest...
Getting image source signatures
Copying blob 59bf1c3509f3 done
Copying config c059bfaa84 done
Writing manifest to image destination
Storing signatures
STEP 2/9: LABEL MANTAINER "SHU 2228706561@.com"
--> a357281e44b
.......
[root@localhost ~]# docker images
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/shujiaming/httpd v4 e1aafa71b8ba 9 seconds ago 133 MB
<none> <none> 7f9c80a5a0ca 23 minutes ago 65.5 MB
localhost/shujiaming/s1 2002.17 011654610dfc 24 hours ago 705 MB
localhost/nuanchun/httpd 2002.17 011654610dfc 24 hours ago 705 MB
localhost/httpd 2002.17 011654610dfc 24 hours ago 705 MB
localhost/ub latest 8b43ab34c7e4 47 hours ago 1.09 kB
<none> <none> d852b2ec6dc2 47 hours ago 1.09 kB
<none> <none> cae8327971d3 47 hours ago 1.09 kB
<none> <none> 42ff5a1f99ac 47 hours ago 1.09 kB
localhost/centoscy 7 53a49eebc8f3 47 hours ago 411 MB
docker.io/library/httpd latest dabbfbe0c57b 8 months ago 148 MB
docker.io/library/alpine latest c059bfaa849c 9 months ago 5.87 MB
docker.io/library/ubuntu latest ba6acccedd29 10 months ago 75.2 MB
quay.io/centos/centos latest 300e315adb2f 21 months ago 217 MB
quay.io/centos/centos 7 8652b9f0cb4c 21 months ago 212 MB
创建容器,链接外部存储,并测试
[root@localhost ~]# mkdir /html/
[root@localhost ~]# cd /html/
[root@localhost html]# echo "hello Shujiaming" > index.html
[root@localhost html]# cat index.html
hello Shujiaming
[root@localhost html]# docker run -dit --name web -p 80:80 -v /html/://usr/local/apache/ htdocs/:Z shujiaming/httpd:v4
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
397a38977401ac3e57f72f047dd165e6c0d1924bc08f1ac03a49fcd8d4bb5b0e
[root@localhost html]# docker ps
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID IMAGE COMMAND CREATED STATU S PORTS NAMES
397a38977401 localhost/shujiaming/httpd:v4 /usr/local/apache... 12 seconds ago Up 11 seconds ago 0.0.0.0:80->80/tcp web
[root@localhost html]# curl 192.168.237.134:80
hello Shujiaming

上传镜像
[root@localhost ~]# docker push shujiaming/httpd:v4
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Getting image source signatures
Copying blob 8d3ac3489996 done
Copying blob c7cb0d226989 done
Copying blob b298e09cc10e done
Copying config e1aafa71b8 done
Writing manifest to image destination
Storing signatures


浙公网安备 33010602011771号