dockerfile用alpine制作httpd镜像
1.拉取alpine镜像
[root@loaclhost ~]# podman pull alpine
[root@loaclhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/alpine latest 9c6f07244728 3 weeks ago 5.83 MB
2.编写dockerfile文件
[root@loaclhost dockerfile_alpine]# cat Dockerfile
FROM alpine //基础镜像是alpine
//作者信息
LABEL MAINTAINER='huangweifeng 431143766@qq.com'
//变量
ENV apr_version=1.6.5 apr_util_version=1.6.1 httpd_version=2.4.54
ENV PATH /usr/local/apachectl/bin:$PATH
//将httpd下的文件解压到/tmp/目录下
ADD httpd/* /tmp/
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \ //修改/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 && \ //创建一个apache用户
cd /tmp/apr-1.6.5/ && \
sed -i '/$RM "$cfgfile"/d' configure && \ //编辑文件内容
./configure --prefix=/usr/local/apr && \ //进行预编译
make && make install && \ //编译安装
cd ../apr-util-1.6.1/ && \
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && \ //进行预编译
make && make install && \ //编译安装
cd ../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 && \ //编译安装
sed -i '/#ServerName/s/#//g' /usr/local/apache/conf/httpd.conf && \
//删除一些没必要的东西减少镜像大小
rm -rf /tmp/* && \
rm -rf /var/cache/* && \
apk del gcc make && \
EXPOSE 80 //暴露端口号
WORKDIR /usr/local/apache //开启容器直接进入该路径
CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND""] //默认要执行的命令
3.创建镜像
[root@loaclhost dockerfile_alpine]# podman build -t httpd:v4 .
[root@loaclhost dockerfile_alpine]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/httpd v4 a89febeede61 20 minutes ago 117 MB
//用创建的镜像来跑一个容器
[root@loaclhost dockerfile_alpine]# podman run -d --name asdqwe localhost/httpd:v4
5576879b964c74c187f6f89d03ef89f8887cc5c3e9afee353afbf977c78c843f
[root@loaclhost dockerfile_alpine]# podman inspect -l |grep -i ipadd
"IPAddress": "10.88.0.4",
"IPAddress": "10.88.0.4",
[root@loaclhost dockerfile_alpine]# curl 10.88.0.4
<html><body><h1>It works!</h1></body></html>
4.上传镜像
[root@loaclhost dockerfile_alpine]# podman login
Username: 15072814090
Password:
Login Succeeded!
[root@loaclhost dockerfile_alpine]# podman tag l
library/alpine library/alpine:latest localhost/httpd localhost/httpd:v0.2 localhost/httpd:v3 localhost/httpd:v4
[root@loaclhost dockerfile_alpine]# podman tag localhost/httpd:v4 15072814090/httpd:v4
[root@loaclhost dockerfile_alpine]# podman push 15072814090/httpd:v4
Getting image source signatures
Copying blob 1c1f2e4258e7 skipped: already exists
Copying blob 994393dc58e7 skipped: already exists
Copying blob d9c5111e6d96 [--------------------------------------] 0.0b / 0.0b
Copying config a89febeede [--------------------------------------] 0.0b / 3.2KiB
Writing manifest to image destination
Storing signatures
5.用刚创建的镜像来做一个网站
[root@loaclhost dockerfile_tanke]# tree
.
├── Dockerfile
└── httpd
├── apr-1.6.5.tar.gz
├── apr-util-1.6.1.tar.gz
├── Battle_City.tar.gz
└── httpd-2.4.54.tar.gz
[root@loaclhost dockerfile_tanke]# cat Dockerfile
FROM localhost/alpine:v4
LABEL MAINTAINER='huangweifeng 431143766@qq.com'
ENV apr_version=1.6.5 apr_util_version=1.6.1 httpd_version=2.4.54
ENV PATH /usr/local/apache/bin:$PATH
ADD httpd/* /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 expat-dev pcre-dev openssl-dev make && \
cd /tmp && \
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 \
--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 && \
sed -i '/#ServerName/s/#//g' /usr/local/apache/conf/httpd.conf && \
rm -f /usr/local/apache/htdocs/index.html && \
mv /tmp/Battle_City/* /usr/local/apache/htdocs/ && \
apk del gcc make && \
rm -rf /var/cache/* && \
rm -rf /tmp/*
WORKDIR /usr/local/apache
EXPOSE 80
CMD ["httpd","-D","FOREGROUND"]
//创建镜像
[root@loaclhost dockerfile_tanke]# podman build -t alpine:v5 .
//运行一个容器来测试
[root@loaclhost dockerfile_tanke]# podman run -P alpine:v5
[root@loaclhost httpd]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78f82683120f localhost/alpine:v5 httpd -D FOREGROU... 49 seconds ago Up 49 seconds ago 0.0.0.0:41487->80/tcp xenodochial_wu
PORTS NAMES
78f82683120f localhost/alpine:v5 httpd -D FOREGROU… 49 seconds ago Up 49 seconds ago 0.0.0.0:41487->80/tcp xenodochial_wu
![](https://img-blog.csdnimg.cn/img_convert/7d0491ee810eefae7f65b0a069ac4e75.jpeg)