// 提示:此操作需要建立在已经安装docker的基础上操作
- 先创建一个HTTPD容器
[root@cxr ~]# docker run -tid --name httpd centos Unable to find image 'centos:latest' locally latest: Pulling from library/centos a1d0c7532777: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Status: Downloaded newer image for centos:latest ce74033b952def4fcaee69321cbc27f1a860384d439cf112c80a5ee384232fce [root@cxr ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ce74033b952d centos "/bin/bash" 15 seconds ago Up 12 seconds httpd
- 进入到这个容器
[root@cxr ~]# docker exec -it ce74033b952d /bin/bash [root@ce74033b952d /]#
- 把一些安装apache需要的包复制到容器里面
//这些安装包可以到apache官网进行下载 [root@cxr src]# docker cp apr-1.7.0.tar.gz ce74033b952d:/usr/src/ [root@cxr src]# docker cp apr-util-1.6.1.tar.gz ce74033b952d:/usr/src/ [root@cxr src]# docker cp httpd-2.4.53.tar.gz ce74033b952d:/usr/src/ [root@ce74033b952d /]# cd /usr/src/ [root@ce74033b952d src]# ls apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz debug httpd-2.4.53.tar.gz kernels
- 源码安装apache
[root@ce74033b952d ~]# useradd -r -M -s /sbin/nolongin apache //创建一个名为apache的系统用户
[root@ce74033b952d ~]# cd /etc/yum.repos.d/
[root@ce74033b952d yum.repos.d]# ls
CentOS-Linux-AppStream.repo CentOS-Linux-FastTrack.repo
CentOS-Linux-BaseOS.repo CentOS-Linux-HighAvailability.repo
CentOS-Linux-ContinuousRelease.repo CentOS-Linux-Media.repo
CentOS-Linux-Debuginfo.repo CentOS-Linux-Plus.repo
CentOS-Linux-Devel.repo CentOS-Linux-PowerTools.repo
CentOS-Linux-Extras.repo CentOS-Linux-Sources.repo
[root@ce74033b952d yum.repos.d]# rm -rf * //将这个命令下的文件全都删掉
[root@ce74033b952d yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo //替换成阿里云的centos8的源
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2495 100 2495 0 0 1533 0 0:00:01 0:00:01 --:--:-- 1532
[root@ce74033b952d yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo //去除一些不必要的东西
[root@ce74033b952d yum.repos.d]# yum clean all //清理一下缓存
Failed to set locale, defaulting to C.UTF-8
0 files removed
[root@ce74033b952d yum.repos.d]# yum makecache //重建一下缓存
Failed to set locale, defaulting to C.UTF-8
CentOS-8.5.2111 - Base - mirrors.aliyun.com 1.0 MB/s | 4.6 MB 00:04
CentOS-8.5.2111 - Extras - mirrors.aliyun.com 29 kB/s | 10 kB 00:00
CentOS-8.5.2111 - AppStream - mirrors.aliyun.com 815 kB/s | 8.4 MB 00:10
Metadata cache created.
//预装一些工具
[root@ce74033b952d ~]# yum groups mark install 'Development Tools'
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 0:04:20 ago on Wed Apr 27 06:30:35 2022.
Dependencies resolved.
=====================================================================================
Package Architecture Version Repository Size
=====================================================================================
Installing Groups:
Development Tools
Transaction Summary
=====================================================================================
Is this ok [y/N]: y
Complete!
//在安装一些依赖包和一些需要的命令
yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ make //安装过程省略
[root@ce74033b952d ~]# cd /usr/src/
//将这些安装包解压到/usr/local/目录下
[root@ce74033b952d src]# tar -xf apr-1.7.0.tar.gz -C /usr/local/
[root@ce74033b952d src]# tar -xf apr-util-1.6.1.tar.gz -C /usr/local/
[root@ce74033b952d src]# tar -xf httpd-2.4.53.tar.gz -C /usr/local/
[root@ce74033b952d src]# cd /usr/local/apr-1.7.0/ //进入到刚才解压到目录中
[root@ce74033b952d apr-1.7.0]# vi configure
cfgfile=${ofile}T
trap "$RM "$cfgfile"; exit 1" 1 2 15
$RM "$cfgfile" //将文件中这行注释掉或者删除都可以
[root@ce74033b952d apr-1.7.0]# ./configure --prefix=/usr/local/apr //过程省略
[root@ce74033b952d apr-1.7.0]# make && make install //编译安装过程省略
[root@ce74033b952d apr-1.7.0]# cd ../apr-util-1.6.1/
[root@ce74033b952d apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ //过程省略
[root@ce74033b952d apr-util-1.6.1]# make && make install //编译安装过程省略
[root@ce74033b952d apr-util-1.6.1]# cd ../httpd-2.4.53/
[root@ce74033b952d 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=worker //过程省略
[root@ce74033b952d httpd-2.4.53]# make && make install //编译过程省略
[root@e9d663b63374 ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/httpd.sh
[root@e9d663b63374 ~]# source /etc/profile.d/httpd.sh
[root@e9d663b63374 ~]# ln -s /usr/local/apache/include /usr/include/apache
[root@e9d663b63374 ~]# exit //退出容器
exit
- 制作apache镜像
[root@cxr ~]# docker commit -a 'sean <1544060135@qq.com>' -c 'CMD ["/usr/local/apache/bin/httpd","-X","-D","FOREGROUND"]' -p httpd httpd:v0.1 sha256:fc8ddf19c8e8e2eed41cfcbb520395d42d6e8e037f44286084fbdef850d96337 [root@cxr ~]#
- 删除所有的容器准备测试镜像是否可使用
[root@cxr ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c76214abb2d6 httpd:v0.2 "/usr/local/apache/b…" 13 minutes ago Up 11 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp web [root@cxr ~]# docker stop web web [root@cxr ~]# docker rm -f web web [root@cxr ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-使用干才制作的镜像创建一个httpd容器
[root@cxr ~]# docker run -d --name httpd -p 80:80 httpd:v0.1 //创建容器不懂可以查看帮助文档
4ed60bf965ed17ed423bda17d7a57ed5b0c0b69f46740f6e97dbb01cd375ec0a
[root@cxr ~]# docker inspect httpd | grep IPAddress //看下这个容器的IP
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
[root@cxr ~]# curl 172.17.0.2 //在虚拟机中访问
It works!
- 在网页中查看,已经把容器的IP映射到本地,所以使用本地的IP去访问。
- 能访问到就说明镜像制作成功。



