Dockerfile编译httpd做镜像
目录结构
[root@localhost ~]# mkdir apache
[root@localhost ~]# cd httpd
[root@localhost apache]# mkdir files #把安装httpd所需的包放在这里
[root@localhost ~]# mv apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.53.tar.gz httpd/files/
[root@localhost apache]# ls files/
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.53.tar.gz
[root@localhost apache]# touch Dockerfile
[root@localhost apache]# touch files/install.sh #创建脚本文件
Dockerfile编写
[root@localhost apache]# vim Dockerfile
[root@localhost apache]# cat Dockerfile
FROM alpine
LABEL MAINTAINER "tkl 2670178039@qq.com"
ENV apr_version=1.7.0 apr_util_version=1.6.1 httpd_version=2.4.53
ENV PATH=/usr/local/apache/bin:$PATH
EXPOSE 80 443
ADD files/apr-${apr_version}.tar.gz /tmp/
ADD files/apr-util-${apr_util_version}.tar.gz /tmp/
ADD files/httpd-${httpd_version}.tar.gz /tmp/
ADD files/install.sh /tmp/ #将脚本从本地的files目录传到容器内的/tmp目录下
RUN /bin/sh /tmp/install.sh #执行脚本
WORKDIR /usr/local/apache
CMD ["-D","FOREGROUND"]
ENTRYPOINT ["/usr/local/apache/bin/httpd"]
[root@localhost apache]#
install.sh
脚本的内容
[root@localhost apache]# cat files/install.sh
#!/bin/sh
cd /etc/apk && \
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk add --no-cache -U gcc make openssl-dev pcre-dev expat-dev libtool libc-dev && \
adduser -SHs /sbin/nologin apache && \
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 && \
apk del --no-cache -U gcc libc-dev make && \
rm -rf /tmp/*
[root@localhost apache]#
创建镜像
#在当前下创建镜像 ( . 可以写绝对路径/root/apache)
[root@localhost apache]# docker build -t httpd:alpine-2 .
[root@localhost apache]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd alpine-2 98b59967f9ec 23 seconds ago 112MB
httpd alpine-1 9c7e692c9a5a 14 minutes ago 234MB
alpine latest c059bfaa849c 5 months ago 5.59MB
开启一个容器测试
[root@localhost apache]# docker run -d --name web -p 80:80 httpd:alpine-2
[root@localhost apache]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
badd52dc5535 httpd:alpine-2 "/usr/local/apache/b…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp web
[root@localhost apache]# curl 172.17.0.2
<html><body><h1>It works!</h1></body></html>
浏览器访问宿主机ip
上传镜像到docker.hub仓库
#登录账号
[root@localhost ~]# docker login
#修改镜像名
[root@localhost apache]# docker tag httpd:alpine-2 tkl9639/httpd-alpine:latest
#上传镜像到docker.hub仓库
[root@localhost apache]# docker push tkl9639/httpd-alpine:latest