在docker容器编译安装apache
时间:2022-08-24 03:00:01
编译安装apache
下载apr,apr-util,httpd
[root@localhost ~]# dnf -y install wget [root@localhost ~]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz [root@localhost ~]# wget https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz [root@localhost ~]# wget https://downloads.apache.org/httpd/httpd-2.4.53.tar.gz
创建容器
[root@localhost ~]# docker images ///检查镜像 REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest beae173ccac6 3 months ago 1.24MB httpd latest dabbfbe0c57b 4 months ago 144MB centos latest 5d0da3dc9764 7 months ago 231MB [root@localhost ~]# docker run -it --name c1 centos /bin/bash ///在前台运行,所以添加/bin/bash [root@386a2487e917 /]# ls bin etc lib lost found mnt proc run srv tmp var dev home lib64 media opt root sbin sys usr [root@386a2487e917 /]# alias ls='ls --color' //设置别名 [root@386a2487e917 /]# ls bin etc lib lost found mnt proc run srv tmp var dev home lib64 media opt root sbin sys usr
解压
[root@386a2487e917 /]# cd /usr/src [root@386a2487e917 src]# ls debug kernels [root@localhost ~]# ls anaconda-ks.cfg apr-util-1.6.1.tar.gz apr-1.7.0.tar.gz httpd-2.4.53.tar.gz [root@localhost ~]# mkdir abc [root@localhost ~]# mv *.gz abc/ //把所有gz文件的结尾abc目录 [root@localhost ~]# ls abc anaconda-ks.cfg [root@localhost ~]# docker cp abc c1:/usr/src //把abc将目录复制到容器中c1里面 [root@386a2487e917 src]# ls abc debug kernels [root@386a2487e917 src]# ls abc apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.53.tar.gz [root@386a2487e917 src]# cd abc [root@386a2487e917 abc]# ls apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.53.tar.gz [root@386a2487e917 abc]# tar -xf apr-1.7.0.tar.gz [root@386a2487e917 abc]# tar -xf apr-util-1.6.1.tar.gz [root@386a2487e917 abc
]
# tar -xf httpd-2.4.53.tar.gz
[root@386a2487e917 abc
]
# ls apr-1.7.0 apr-1.7.0.tar.gz apr-util-1.6.1 apr-util-1.6.1.tar.gz httpd-2.4.53 httpd-2.4.53.tar.gz
配置yum源
[root@386a2487e917 ~]# cd /etc/yum.repos.d/
[root@386a2487e917 yum.repos.d]# ls
CentOS-Linux-AppStream.repo
CentOS-Linux-BaseOS.repo
CentOS-Linux-ContinuousRelease.repo
CentOS-Linux-Debuginfo.repo
CentOS-Linux-Devel.repo
CentOS-Linux-Extras.repo
CentOS-Linux-FastTrack.repo
CentOS-Linux-HighAvailability.repo
CentOS-Linux-Media.repo
CentOS-Linux-Plus.repo
CentOS-Linux-PowerTools.repo
CentOS-Linux-Sources.repo
[root@386a2487e917 yum.repos.d]# rm -rf *
[root@386a2487e917 yum.repos.d]# ls
[root@386a2487e917 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 3376 0 --:--:-- --:--:-- --:--:-- 3380
[root@386a2487e917 yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@386a2487e917 ~]# dnf clean all //清除缓存
[root@386a2487e917 ~]# dnf makecache //建立缓存
配置apr
[root@386a2487e917 ~]# useradd -r -M -s /sbin/nologin apache //创建系统用户
[root@386a2487e917 ~]# id apache
uid=998(apache) gid=996(apache) groups=996(apache)
[root@386a2487e917 abc]# cd apr-1.7.0
[root@386a2487e917 apr-1.7.0]# yum -y install make gcc
[root@386a2487e917 apr-1.7.0]# vi configure
$RM "$cfgfile" //删除此行
[root@386a2487e917 apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@386a2487e917 apr-1.7.0]# make
[root@386a2487e917 apr-1.7.0]# make install
配置apr-util
[root@386a2487e917 apr-util-1.6.1]# dnf -y install expat-devel
[root@386a2487e917 ~]# cd /usr/src/abc
[root@386a2487e917 abc]# ls
apr-1.7.0 apr-1.7.0.tar.gz apr-util-1.6.1 apr-util-1.6.1.tar.gz httpd-2.4.53 httpd-2.4.53.tar.gz
[root@386a2487e917 abc]# cd apr-util-1.6.1
[root@386a2487e917 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@386a2487e917 apr-util-1.6.1]# makae
[root@386a2487e917 apr-util-1.6.1]# makae install
配置httpd
[root@386a2487e917 httpd-2.4.53]# dnf -y install pcre-devel
[root@386a2487e917 httpd-2.4.53]# dnf -y install openssl-devel
[root@386a2487e917 abc]# cd httpd-2.4.53
./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@386a2487e917 httpd-2.4.53]# make
[root@386a2487e917 httpd-2.4.53]# make install
[root@386a2487e917 apache]# cd /
[root@386a2487e917 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@386a2487e917 /]# vi aaa.sh
[root@386a2487e917 /]# cat aaa.sh
#!/bin/bash
/usr/local/apache/bin/httpd && sleep 1d
[root@386a2487e917 /]# chmod +x /aaa.sh //给这个脚本加执行权限
[root@386a2487e917 /]# ./aaa.sh //运行脚本
[root@localhost ~]# docker inspect c1
...
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
[root@localhost ~]# curl 172.17.0.2
<html><body><h1>It works!</h1></body></html>
[root@localhost ~]# docker commit -a 'yyqx ' -c 'CMD ["/aaa.sh"]' -p c1 yyqxyyds/httpd:w01 //创建镜像
sha256:5e7bb05141d3aa3d941b8a4c525cb9690e900888028e0ad928ff9f277ce846ef
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yyqxyyds/httpd w01 5e7bb05141d3 28 seconds ago 616MB
busybox latest beae173ccac6 3 months ago 1.24MB
httpd latest dabbfbe0c57b 4 months ago 144MB
centos latest 5d0da3dc9764 7 months ago 231MB
[root@localhost ~]# docker run -d --name web -p 80:80 yyqxyyds/httpd:w01 //创建运行容器
16b6cc06d098325784defe44ec7f35327498294f6bcd9996bde89da288a4a418
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16b6cc06d098 yyqxyyds/httpd:w01 "/aaa.sh" 7 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web
386a2487e917 centos "/bin/bash" 2 hours ago Up 2 hours c1
让apache在前台运行
[root@386a2487e917 /]# rm -f aaa.sh //删除刚刚创建的脚本
[root@386a2487e917 /]# pkill httpd
[root@localhost ~]# docker rm -f web
-D指定要传入配置文件的参数
[root@386a2487e917 /]# /usr/local/apache/bin/httpd -DFOREGROUND
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [root@localhost ~]# curl 172.17.0.2 It works!
[root@localhost ~]# docker commit -a 'yyqx<1@2.com>' -c 'CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]' -p c1 yyqxyyds/httpd:w02
sha256:27f1780ffee7ec73014718ff95fc13be49bb225ef1259e2cf2e53cf62cb91043
[root@localhost ~]# docker run -d --name web -p 80:80 yyqxyyds/httpd:w02
f021163f808737e72a18fa6bc99daccb13581eaffb95d170d355464e6b12701a
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f021163f8087 yyqxyyds/httpd:w02 "/usr/local/apache/b…" 14 seconds ago Up 12 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web
386a2487e917 centos "/bin/bash" 3 hours ago Up 3 hours c1
[root@localhost ~]# docker inspect web
...
"Cmd": [
"/usr/local/apache/bin/httpd",
"-D",
"FOREGROUND"
...
优化
[root@386a2487e917 var]# cd cache //删除缓存
[root@386a2487e917 cache]# ls
bpf dnf ldconfig private
[root@386a2487e917 cache]# rm -rf *
[root@386a2487e917 usr]# cd src/
[root@386a2487e917 src]# ls
abc debug kernels
[root@386a2487e917 src]# rm -rf abc
[root@386a2487e917 ~]# dnf -y remove gcc make
[root@localhost ~]# docker commit -a 'yyqx<1@2.com>' -c 'CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]' -p c1 yyqxyyds/httpd:w03sha256:d8ff731dd5cc0fe15586d05546a4c506c7caf7fb96df410c7eecd21f8ba7a466
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yyqxyyds/httpd w03 d8ff731dd5cc 5 seconds ago 354MB