基于容器编译安装apache
# 进入容器内配置yum源 [root@localhost ~]# docker run -it --name apache centos /bin/bash [root@fbd63b817914 ~]# cd /etc/yum.repos.d [root@fbd63b817914 yum.repos.d]# rm -rf * [root@fbd63b817914 yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo [root@fbd63b817914 yum.repos.d]# https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo [root@fbd63b817914 yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo [root@fbd63b817914 yum.repos.d]# cd [root@fbd63b817914 ~]# dnf -y install wget # 安装并解压httpd所需的包 [root@fbd63b817914 ~]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz > https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz > https://downloads.apache.org/httpd/httpd-2.4.53.tar.gz [root@fbd63b817914 ~]# tar xf apr-1.7.0.tar.gz [root@fbd63b817914 ~]# tar xf apr-util-1.6.1.tar.gz [root@fbd63b817914 ~]# tar xf httpd-2.4.53.tar.gz
# 安装开发环境和依赖包 [root@fbd63b817914 ~]# dnf -y groups mark install "Development Tools" [root@fbd63b817914 ~]# dnf -y install gcc gcc-c++ openssl-devel pcre-devel expat-devel [root@fbd63b817914 ~]# useradd -r -M -s /sbin/nologin apache
# 编译安装
[root@fbd63b817914 ~]# cd apr-1.7.0
[root@fbd63b817914 apr-1.7.0]# vim ./configure
cfgfile=${ofile}T
trap "$RM "$cfgfile"; exit 1" 1 2 15
# $RM "$cfgfile" //注释此行
[root@fbd63b817914 apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@fbd63b817914 apr-1.7.0]# cd /root/apr-util-1.6.1
[root@fbd63b817914 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@fbd63b817914 apr-util-1.6.1]# make && make install
[root@fbd63b817914 apr-util-1.6.1]# ./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@fbd63b817914 httpd-2.4.53]# make && make install
# 设置映射关系 [root@fbd63b817914 apache]# ln -s /usr/local/apache/include/ /usr/include/apache # 启动httpd服务 [root@fbd63b817914 apache]# /usr/local/apache/bin/httpd /usr/local/apache/bin/apachectl [root@fbd63b817914 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:* [root@fbd63b817914 apache]# ip a 1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 34: eth0@if35: mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever
# 测试能否访问 [root@localhost ~]# curl 172.17.0.2It works!
# 编写启动脚本 [root@036f6267e67a ~]# vim /start.sh #!/bin/sh /usr/local/apache/bin/httpd /bin/bash [root@036f6267e67a ~]# ls -ld /start.sh -rw-r--r--. 1 root root 48 Apr 26 17:55 /start.sh [root@036f6267e67a ~]# chmod a+x /start.sh //给所有用户执行权限 [root@036f6267e67a ~]# ls -ld /start.sh -rwxr-xr-x. 1 root root 48 Apr 26 17:55 /start.sh
# 制作httpd镜像(另起一个终端,httpd容器不能停止) [root@localhost ~]# docker commit -a 'zuoyq <123@456.com>' -c 'CMD ["/bin/bash","/start.sh"]' apache zuoyq/httpd:v1.0 sha256:5a7123f91c02a8b242275bf2bcbc96d0a9d06c97161bebd32f20e44c3671db54 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE zuoyq/httpd v1.0 5a7123f91c02 2 minutes ago 691MB 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 login -u'zuoyq' //登陆docker账号 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 [root@localhost ~]# docker push zuoyq/httpd:v1.0 //上传镜像 The push refers to repository [docker.io/zuoyq/httpd] 5f2da280ddab: Pushed 74ddd0ec08fa: Mounted from library/centos v1.0: digest: sha256:370ea560347c01570bb76a1f32a091b90b94681718a5b1487e0329f0151651f0 size: 742
# 创建容器 [root@localhost ~]# docker ps [root@localhost ~]# docker run -itd --name test -p 80:80 zuoyq/httpd:v1.0 /bin/sh 00563439c3d9e030ea4eeb26e1a6077609257d651f7c06befb35620561bcf761 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS 00563439c3d9 zuoyq/httpd:v1.0 "/bin/sh" 10 seconds ago Up 9 seconds 0.0.0.0:80->80/tcp, :::80-
打开本机浏览器测试



