Apache编译安装制作镜像
1.利用centos镜像创建容器
//拉取centos镜像,默认拉取tag为latest的镜像,一般来说是最新的镜像
[root@localhost ~]# docker pull centos
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest dabbfbe0c57b 7 months ago 144MB
centos latest 5d0da3dc9764 10 months ago 231MB
//创建容器
[root@localhost ~]# docker run -it -d --name httpd centos
ea09fe54956090f82e0da0f907e0cbdb07e500133b610803d12277bc8995a70e
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea09fe549560 centos "/bin/bash" 3 seconds ago Up 3 seconds httpd
//进入容器,并配置yum仓库
[root@localhost ~]# docker exec -it httpd /bin/bash
[root@ea09fe549560 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@ea09fe549560 /]# cd /etc/yum.repos.d/
[root@ea09fe549560 yum.repos.d]# rm -f *
[root@ea09fe549560 yum.repos.d]# ls
[root@ea09fe549560 yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2495 100 2495 0 0 10942 0 --:--:-- --:--:-- --:--:-- 10942
[root@ea09fe549560 yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@ea09fe549560 yum.repos.d]# dnf clean all
[root@ea09fe549560 yum.repos.d]# dnf list all
2.准备所需依赖包和安装包
[root@ea09fe549560 /]# cd ~
[root@ea09fe549560 ~]# dnf -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ vim make wget
[root@ea09fe549560 ~]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz
[root@ea09fe549560 ~]# wget https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz
[root@ea09fe549560 ~]# wget https://downloads.apache.org/httpd/httpd-2.4.54.tar.gz
3.编译apr
[root@ea09fe549560 ~]# tar xf apr-1.7.0.tar.gz
[root@ea09fe549560 ~]# cd apr-1.7.0/
[root@ea09fe549560 apr-1.7.0]# vim configure
cfgfile=${ofile}T
trap "$RM \"$cfgfile\"; exit 1" 1 2 15
# $RM "$cfgfile" //将此行注释或删除
[root@ea09fe549560 apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@ea09fe549560 apr-1.7.0]# make
[root@ea09fe549560 apr-1.7.0]# make install
4.编译apr-util
[root@ea09fe549560 ~]# tar xf apr-util-1.6.1.tar.gz
[root@ea09fe549560 ~]# cd apr-util-1.6.1/
[root@ea09fe549560 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@ea09fe549560 apr-util-1.6.1]# make
[root@ea09fe549560 apr-util-1.6.1]# make install
5.编译httpd
[root@ea09fe549560 ~]# tar xf httpd-2.4.54.tar.gz
[root@ea09fe549560 ~]# cd httpd-2.4.54/
[root@ea09fe549560 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
[root@ea09fe549560 httpd-2.4.54]# make
[root@ea09fe549560 httpd-2.4.54]# make install
//配置全局环境变量
[root@ea09fe549560 httpd-2.4.54]# cd /usr/local/apache/
[root@ea09fe549560 apache]# ls
bin build cgi-bin conf error htdocs icons include logs man manual modules
[root@ea09fe549560 apache]# echo "export PATH=$PATH:/usr/local/apache/bin" > /etc/profile.d/httpd.sh
[root@ea09fe549560 apache]# source /etc/profile.d/httpd.sh
[root@ea09fe549560 apache]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/apache/bin
[root@ea09fe549560 apache]# which apachectl
/usr/local/apache/bin/apachectl
//配置头文件
[root@ea09fe549560 apache]# ln -sv /usr/local/apache/include/ /usr/include/httpd
'/usr/include/httpd' -> '/usr/local/apache/include/'
[root@ea09fe549560 apache]# ls -l /usr/include/httpd
lrwxrwxrwx. 1 root root 26 Aug 9 01:51 /usr/include/httpd -> /usr/local/apache/include/
//将主配置文件里的'#ServerName'行的注释去掉
[root@ea09fe549560 apache]# sed -i '/#ServerName/s/#//g' conf/httpd.conf
//启动httpd
[root@ea09fe549560 apache]# apachectl
[root@ea09fe549560 apache]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
6.将容器提交为镜像
[root@localhost ~]# docker commit -c 'CMD ["/usr/local/apache/bin/httpd","-DFOREGROUND"] -p httpd ziczhou/httpd:v1.1
sha256:c1eb5e6a1d69ac79f912909c1fc7d38ab61c1194f3419e127b9ec6b3e1e3d588
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ziczhou/httpd v1.1 c1eb5e6a1d69 4 minutes ago 745MB
httpd latest dabbfbe0c57b 7 months ago 144MB
centos latest 5d0da3dc9764 10 months ago 231MB
//登录docker账号
[root@localhost ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: ziczhou
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
//将镜像推送到docker官方网站的私有仓库
[root@localhost ~]# docker push ziczhou/httpd:v1.1
The push refers to repository [docker.io/ziczhou/apache]
d2194aabf814: Pushed
74ddd0ec08fa: Mounted from library/centos
v1.1: digest: sha256:d7c2ca4a4648c3caeaac4a57f6c45819cafc15a6082f6ca9de3b153c01c29ed6 size: 742
7.利用提交好的镜像跑一个容器,并访问
[root@localhost ~]# docker run -it -d --name web -p 80:80 ziczhou/httpd:v1.1
762ef10dfe61e8b8ea39d144120fe0da8e5760754bc92a91fe3cc2903b6ddc98
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
762ef10dfe61 ziczhou/httpd:v1.1 "/usr/local/apache/b…" 2 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web
ea09fe549560 centos "/bin/bash" 7 hours ago Up 7 hours httpd
[root@localhost ~]# curl 192.168.169.139
<html><body><h1>It works!</h1></body></html>
进行访问