Dockerfile使用alpine创建apache镜像
目录Alpine
Alpine简介
alpine是一个轻量级的Linux发行版本,轻量级不仅体现在其占用空间的大小,还因为他没有图形化界面,只有命令行界面。
alpine官网链接:https://www.alpinelinux.org/
alpine特点:
1、小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;
2、安全:面向安全的轻量发行版;
3、简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。
4、适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。以Alpine为基础镜像,创建一个容器,镜像大小只有35.26MB,同样的方式使用centos系统作为基础镜像,镜像大小有127MB;所以以Apline作为基础镜像是个非常明智的选择
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服务管理
alpine没有使用fedora的systemctl来进行服务管理,使用的是RC系列命令:
rc-update | 主要用于不同运行级增加或者删除服务 |
---|---|
rc-status | 主要用于运行级的状态管理 |
rc-service | 主用于管理服务的状态 |
rc-status -a | 列出系统所有服务 |
alpine制作httpd镜像
拉取alpine镜像,创建一个目录存放dockerfile和下载的包
[root@localhost ~]# podman pull alpine
[root@localhost ~]# mkdir httpd
[root@localhost ~]# ls
anaconda-ks.cfg httpd
[root@localhost ~]# cd httpd/
[root@localhost httpd]# touch Dockerfile
[root@localhost httpd]# mkdir files
[root@localhost httpd]# cd files/
[root@localhost files]# 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
[root@localhost files]# ls
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.54.tar.gz
编写Dockerfile与entrypoint脚本文件
[root@localhost files]# cd ..
[root@localhost httpd]# vim Dockerfile
[root@localhost httpd]# cat Dockerfile
FROM alpine
LABEL MANTAINER "daxinyu [email protected]"
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 files/
[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 ~]# podman build -t a3171344634/httpd:v2.1 httpd/
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/a3171344634/httpd v2.1 516902851718 22 minutes ago 120 MB
上传镜像
[root@localhost files]# cd
[root@localhost ~]# podman login
Username: a3171344634
Password:
Login Succeeded!
[root@localhost ~]# podman push a3171344634/httpd:v2.1
Getting image source signatures
Copying blob 2778bca97ac2 done
Copying blob f53ee605dbd2 done
Copying blob 994393dc58e7 skipped: already exists
Copying config 5169028517 done
Writing manifest to image destination
Storing signatures
标签:httpd,--,介绍,apk,apr,使用,root,localhost,Alpine
From: https://www.cnblogs.com/Clannaddada/p/16644685.html