基于容器的方式源码编译apache并且制作镜像(修改)

一.配置docker

安装docker

[root@localhost yum.repos.d]# yum -y install wget vim    //安装wget和vim
[root@localhost yum.repos.d]# ls
CentOS-Base.repo   epel.repo                  epel-testing.repo
epel-modular.repo  epel-testing-modular.repo  redhat.repo
[root@localhost yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   //下载docker源
[root@localhost yum.repos.d]# ls
CentOS-Base.repo   epel.repo                  redhat.repo
docker-ce.repo     epel-testing-modular.repo
epel-modular.repo  epel-testing.repo
[root@localhost ~]# dnf makecache     //建立缓存
[root@localhost ~]# dnf -y install docker-ce   //安装docker-ce

配置docker加速器

[root@localhost ~]# ls /etc/docker   //查看配置文件
ls: 无法访问'/etc/docker': 没有那个文件或目录
[root@localhost ~]# systemctl enable --now docker    //开启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; vend>
   Active: active (running) since Sun 2022-04-24 20:26:50 CST
[root@localhost ~]# ls /etc/docker     //再次查看,则已经有了配置文件
key.json

[root@localhost ~]# cd /etc/docker/
[root@localhost docker]# ls
key.json
[root@localhost docker]# vim daemon.json
[root@localhost docker]# cat daemon.json 
{
          "registry-mirrors": ["https://onmth88j.mirror.aliyuncs.com"]
}
[root@localhost docker]# systemctl daemon-reload
[root@localhost docker]# systemctl restart docker

二.创建容器

1.拉取contos镜像

[root@localhost ~]# docker pull centos
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    5d0da3dc9764   7 months ago   231MB
[root@localhost ~]# docker run -it --name http centos /bin/bash  //使用centos镜像配置httpd容器
[root@8cf8e374dcce /]#

2.下载Apache源码,并且复制到容器中

//开启另一台终端,下载httpd的源码包
[root@localhost ~]# wget https://downloads.apache.org/httpd/httpd-2.4.53.tar.gz
[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 ~]# mkdir anzhuang
[root@localhost ~]# mv *.gz anzhuang/
[root@localhost ~]# ls
anaconda-ks.cfg  anzhuang
[root@localhost ~]# docker cp anzhuang http:/usr/src/

3.准备工作

//查看复制到容器内的源码包
[root@8cf8e374dcce /]# cd /usr/src/
[root@8cf8e374dcce src]# ls
anzhuang  debug  kernels
[root@8cf8e374dcce src]# ls anzhuang/
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.53.tar.gz
[root@8cf8e374dcce src]# cd anzhuang/

//解压源码包
[root@8cf8e374dcce anzhuang]# tar xf apr-1.7.0.tar.gz 
[root@8cf8e374dcce anzhuang]# tar xf apr-util-1.6.1.tar.gz 
[root@8cf8e374dcce anzhuang]# tar xf httpd-2.4.53.tar.gz

//更换本地yum源为阿里云yum源
[root@8cf8e374dcce ~]# cd /etc/yum.repos.d/
[root@8cf8e374dcce 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@8cf8e374dcce yum.repos.d]# rm -rf *
[root@8cf8e374dcce yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@8cf8e374dcce yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@8cf8e374dcce yum.repos.d]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@8cf8e374dcce yum.repos.d]# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@8cf8e374dcce yum.repos.d]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
[root@8cf8e374dcce ~]# yum clean all    
[root@8cf8e374dcce ~]# yum makecache   


//下载依赖包
[root@8cf8e374dcce ~]# yum -y install gcc make expat-devel pcre-devel openssl-devel

//创建一个名为apache的系统用户,并且不生成家目录,拒绝登录
[root@8cf8e374dcce ~]# useradd -r -M -s /sbin/nologin apache
[root@8cf8e374dcce ~]# id apache 
uid=998(apache) gid=996(apache) groups=996(apache)

4.编译安装httpd

[root@8cf8e374dcce anzhuang]# cd apr-1.7.0
[root@8cf8e374dcce apr-1.7.0]# vi configure
$RM "$cfgfile"
[root@8cf8e374dcce apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@8cf8e374dcce apr-1.7.0]# make && make install
[root@8cf8e374dcce anzhuang]# cd apr-util-1.6.1
[root@8cf8e374dcce apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@8cf8e374dcce apr-util-1.6.1]# make && make install
[root@8cf8e374dcce anzhuang]# cd httpd-2.4.53
[root@8cf8e374dcce 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@8cf8e374dcce httpd-2.4.53]# make && make install

5.配置httpd

//修改环境变量
[root@8cf8e374dcce httpd-2.4.53]# ls /usr/local/apache/
bin    cgi-bin  error   icons    logs  manual
build  conf     htdocs  include  man   modules
[root@8cf8e374dcce httpd-2.4.53]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
[root@8cf8e374dcce httpd-2.4.53]# source /etc/profile.d/apache.sh
[root@8cf8e374dcce httpd-2.4.53]# which httpd
/usr/local/apache/bin/httpd

//取消警告信息
[root@8cf8e374dcce ~]# cd /usr/local/apache/conf/
[root@8cf8e374dcce conf]# ls
extra  httpd.conf  magic  mime.types  original
[root@8cf8e374dcce conf]# vim httpd.conf 
ServerName www.example.com:80   //取消这一行的注释

//开启Apache
[root@8cf8e374dcce conf]# apachectl start
[root@8cf8e374dcce conf]# ss -antl    //查看端口,默认为80端口
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@localhost ~]# docker commit -a 'sean <1@2.com>' -c 'CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]' -p http httpd:v0.1
sha256:c36539197455ff19ba7865b70340b2060a13e7c9827370b0d613ed1312974328
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
httpd        v0.1      c36539197455   13 seconds ago   647MB
centos       latest    5d0da3dc9764   7 months ago     231MB

//使用制作的镜像,创造容器
[root@localhost ~]# docker run -d --name web -p 80:80 httpd:v0.1
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED              STATUS              PORTS                               NAMES
51c59d69f9bb   httpd:v0.1   "/usr/local/apache/b…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   web

浏览器输入ip地址,即可看到默认页面

效果图:

缩减镜像大小

删除镜像中,不需要的东西,即可缩小

[root@8cf8e374dcce /]# du -sh *
0       bin
0       dev
2.4M    etc
0       home
0       lib
0       lib64
0       lost+found
0       media
0       mnt
0       opt
du: cannot read directory 'proc/32190/map_files': Permission denied
du: cannot read directory 'proc/32191/map_files': Permission denied
du: cannot read directory 'proc/32192/map_files': Permission denied
du: cannot read directory 'proc/32193/map_files': Permission denied
du: cannot read directory 'proc/32194/map_files': Permission denied
du: cannot access 'proc/32205/task/32205/fd/4': No such file or directory
du: cannot access 'proc/32205/task/32205/fdinfo/4': No such file or directory
du: cannot access 'proc/32205/fd/4': No such file or directory
du: cannot access 'proc/32205/fdinfo/4': No such file or directory
0       proc
32K     root
4.0K    run
0       sbin
0       srv
0       sys
12K     tmp
537M    usr
82M     var
[root@8cf8e374dcce /]# cd /var
[root@8cf8e374dcce var]# du -sh *
0       adm
55M     cache
0       crash
0       db
0       empty
0       ftp
0       games
0       gopher
0       kerberos
26M     lib
0       local
0       lock
1.7M    log
0       mail
0       nis
0       opt
0       preserve
0       run
0       spool
0       tmp
0       yp
[root@8cf8e374dcce var]# cd cache/
[root@8cf8e374dcce cache]# ls
bpf  dnf  ldconfig  private
[root@8cf8e374dcce cache]# rm -rf *
[root@8cf8e374dcce cache]# ls
[root@8cf8e374dcce cache]# 
[root@8cf8e374dcce /]# cd /usr/
[root@8cf8e374dcce usr]# du -sh *
36M     bin    //程序
0       games
14M     include    //头文件
41M     lib        //库文件
126M    lib64
56M     libexec
47M     local
11M     sbin
59M     share
151M    src     //软件包解压包,可删除
0       tmp
[root@8cf8e374dcce usr]# cd src/
[root@8cf8e374dcce src]# ls
anzhuang  debug  kernels
[root@8cf8e374dcce src]# rm -rf anzhuang/
[root@8cf8e374dcce src]# ls
debug  kernels
[root@8cf8e374dcce usr]# yum -y remove gcc make   //删除编译工具

//再次从另一个终端制作镜像,可看到镜像大小大幅度缩减
[root@localhost ~]# docker commit -a 'sean <1@2.com>' -c 'CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]' -p http httpd:v0.2
sha256:84bb7db27aea9938c9b67baa6e8682c1b8ef1d1860cb383d86759ba8d76167e7
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
httpd        v0.2      84bb7db27aea   6 seconds ago    354MB
httpd        v0.1      c36539197455   58 minutes ago   647MB
centos       latest    5d0da3dc9764   7 months ago     231MB


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值