制作apache镜像
基于容器编译安装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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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.2
<html><body><h1>It works!</h1></body></html>
# 编写启动脚本
[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-
打开本机浏览器测试