基于容器编译安装apache制作镜像
1. 安装docker
[root@localhost ~]# curl -o docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1919 100 1919 0 0 12222 0 --:--:-- --:--:-- --:--:-- 12222
[root@localhost ~]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo
[root@localhost ~]# ls
anaconda-ks.cfg docker-ce.repo
[root@localhost ~]# mv docker-ce.repo /etc/yum.repos.d/
[root@localhost ~]# dnf -y install docker-ce
Failed to set locale, defaulting to C.UTF-8
······
Complete!
2. 设置开机自启
[root@localhost ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor pres>
Active: active (running) since Tue 2022-08-10 09:02:13 CST; 6s ago
Docs: https://docs.docker.com
Main PID: 24300 (dockerd)
Tasks: 7
Memory: 33.7M
CGroup: /system.slice/docker.service
└─24300 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/conta>
3. 准备工作
//配置镜像加速器并拉取镜像
[root@localhost ~]# vim /etc/docker/daemon.json
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
//启动容器
[root@localhost ~]# docker run -it --name pg1 centos /bin/bash
//配置yum源
[root@0f13b7bbdd54 /]# rm -rf /etc/yum.repos.d/*
[root@0f13b7bbdd54 /]# 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 7148 0 --:--:-- --:--:-- --:--:-- 7148
[root@0f13b7bbdd54 /]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
//安装依赖包
[root@0f13b7bbdd54 /]# dnf -y install openssl-devel pcre-devel expat-devel libtool libxml2-devel gcc gcc-c++
······
Complete!
//创建apache系统用户
[root@0f13b7bbdd54 /]# useradd -rMs /sbin/nologin apache
4. 部署apache
- 安装apr
[root@0f13b7bbdd54 /]# wget http://mirrors.aliyun.com/apache/apr/apr-1.7.0.tar.gz
--2022-08-10 15:17:29-- http://mirrors.aliyun.com/apache/apr/apr-1.7.0.tar.gz
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 119.96.138.217, 119.96.138.211, 58.49.248.229, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|119.96.138.217|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1093896 (1.0M) [application/octet-stream]
Saving to: ‘apr-1.7.0.tar.gz’
apr-1.7.0.tar.gz 100%[===================>] 1.04M 6.73MB/s in 0.2s
2022-08-10 15:17:30 (6.73 MB/s) - ‘apr-1.7.0.tar.gz’ saved [1093896/1093896]
[root@0f13b7bbdd54 /]#
[root@0f13b7bbdd54 /]# tar -xf apr-1.7.0.tar.gz -C /usr/local/src/
[root@0f13b7bbdd54 /]# cd /usr/local/src/apr-1.7.0/
[root@0f13b7bbdd54 apr-1.7.0]# vi configure
$RM "$cfgfile" //注释或删除此行
[root@0f13b7bbdd54 apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@0f13b7bbdd54 apr-1.7.0]# make && make install
- 安装apr-utils
[root@0f13b7bbdd54 apr-1.7.0]# cd
[root@0f13b7bbdd54 ~]# wget https://mirrors.aliyun.com/apache/apr/apr-util-1.6.1.tar.gz
--2022-08-10 15:21:52-- https://mirrors.aliyun.com/apache/apr/apr-util-1.6.1.tar.gz
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 119.96.138.215, 119.96.138.210, 58.49.248.229, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|119.96.138.215|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 554301 (541K) [application/octet-stream]
Saving to: ‘apr-util-1.6.1.tar.gz’
apr-util-1.6.1.tar. 100%[===================>] 541.31K --.-KB/s in 0.1s
2022-08-10 15:21:53 (4.34 MB/s) - ‘apr-util-1.6.1.tar.gz’ saved [554301/554301]
[root@0f13b7bbdd54 ~]# tar -xf apr-util-1.6.1.tar.gz -C /usr/local/src/
[root@0f13b7bbdd54 ~]# cd /usr/local/src/apr-util-1.6.1/
[root@0f13b7bbdd54 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@0f13b7bbdd54 apr-util-1.6.1]# make && make install
- 安装httpd
[root@0f13b7bbdd54 apr-util-1.6.1]# cd
[root@0f13b7bbdd54 ~]# wget https://mirrors.aliyun.com/apache/httpd/httpd-2.4.54.tar.gz
--2022-08-10 15:23:47-- https://mirrors.aliyun.com/apache/httpd/httpd-2.4.54.tar.gz
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 119.96.138.215, 58.49.248.226, 58.49.248.231, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|119.96.138.215|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9743277 (9.3M) [application/octet-stream]
Saving to: ‘httpd-2.4.54.tar.gz’
httpd-2.4.54.tar.gz 100%[===================>] 9.29M 4.55MB/s in 2.0s
2022-08-10 15:23:50 (4.55 MB/s) - ‘httpd-2.4.54.tar.gz’ saved [9743277/9743277]
[root@0f13b7bbdd54 ~]# tar -xf httpd-2.4.54.tar.gz -C /usr/local/src/
[root@0f13b7bbdd54 ~]# cd /usr/local/src/httpd-2.4.54/
[root@0f13b7bbdd54 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@0f13b7bbdd54 httpd-2.4.54]# make && make install
- 配置apache并进行验证
//配置环境变量
[root@0f13b7bbdd54 httpd-2.4.54]# cd
[root@0f13b7bbdd54 ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
[root@0f13b7bbdd54 ~]# source /etc/profile.d/apache.sh
//映射头文件
[root@0f13b7bbdd54 ~]# ln -s /usr/local/apache/include/ /usr/include/apache
//去除提示信息
[root@0f13b7bbdd54 ~]# vi /usr/local/apache/conf/httpd.conf
ServerName www.example.com:80 //将此行取消注释
//启动服务查看状态
[root@0f13b7bbdd54 ~]# httpd
[root@0f13b7bbdd54 ~]# ss -anlt
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@0f13b7bbdd54 ~]#
5. 制作镜像
//另外连接一个终端进行制作
[root@localhost ~]# docker commit -p -c 'CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]' pg1 lishuails/httpd:v0.1
sha256:185cb811ddab28a09a5d8a7dc749e2885640ae365d25a461ac5975f519bc260e
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lishuails/httpd v0.1 185cb811ddab 6 seconds ago 729MB
centos latest 5d0da3dc9764 10 months ago 231MB
[root@localhost ~]#
6. 启动容器
[root@localhost ~]# docker run -d --name web -p 80:80 -v /root/html/:/usr/local/apache/htdocs lishuails/httpd:v0.1
b152bb5a229fab4179715b025eda60385636403e01c0ce110cf684e6c2e907d4
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b152bb5a229f lishuails/httpd:v0.1 "/usr/local/apache/b…" 14 seconds ago Up 12 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web
7. 访问效果
[root@localhost ~]# echo hello world! > html/index.html
[root@localhost ~]# curl 192.168.183.131
hello world!
8. 上传镜像
[root@localhost ~]# docker login
Authenticating with existing credentials...
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 lishuails/httpd:v0.1
The push refers to repository [docker.io/lishuails/httpd]
2dda0c2d9788: Pushed
74ddd0ec08fa: Pushed
v0.1: digest: sha256:8f1c75bd684ebc983a0a028f0c843e56a15a5615d17db36fadeae4f252671ee2 size: 742
[root@localhost ~]#
镜像名称:lishuails/httpd
版本号:v0.1