基于容器编译安装apache

基于容器编译安装apache

1.安装docker

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
[root@localhost yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo
[root@localhost yum.repos.d]# dnf -y install docker-ce

2.配置镜像加速器

[root@localhost ~]# sudo mkdir -p /etc/docker
[root@localhost ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://w673ojdv.mirror.aliyuncs.com"]
> }
> EOF
{
  "registry-mirrors": ["https://w673ojdv.mirror.aliyuncs.com"]
}
[root@localhost ~]# sudo systemctl daemon-reload
[root@localhost ~]# sudo systemctl restart docker
[root@localhost ~]# systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.

3.先拉取一个centos的镜像

[root@localhost ~]# docker pull centos:8
8: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:8
docker.io/library/centos:8
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       8         5d0da3dc9764   10 months ago   231MB

4.用centos生成一个容器进去

[root@localhost ~]# docker run -it --name httpd centos:8 /bin/bash
[root@44293a537755 /]# 

5.在容器中阿里云的yum源和epel源

//yum源配置
[root@44293a537755 /]# cd /etc/yum.repos.d/
[root@44293a537755 yum.repos.d]# rm -rf *
[root@44293a537755 yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@44293a537755 yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
//配置epel源
[root@44293a537755 yum.repos.d]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@44293a537755 yum.repos.d]# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@44293a537755 yum.repos.d]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
[root@44293a537755 yum.repos.d]# ls
CentOS-Base.repo  epel-modular.repo  epel-testing-modular.repo  epel-testing.repo  epel.repo

6.下载apache的包,并复制到容器中

//新打开一个终端
[root@localhost ~]# wget https://mirrors.aliyun.com/apache/httpd/httpd-2.4.54.tar.gz http://mirrors.aliyun.com/apache/apr/apr-util-1.6.1.tar.gz http://mirrors.aliyun.com/apache/apr/apr-1.7.0.tar.gz
[root@localhost ~]# ls
anaconda-ks.cfg  apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.54.tar.gz
[root@localhost ~]# docker cp httpd-2.4.54.tar.gz httpd:/usr/src/
[root@localhost ~]# docker cp apr-1.7.0.tar.gz httpd:/usr/src/
[root@localhost ~]# docker cp apr-util-1.6.1.tar.gz httpd://usr/src/

//在容器中查看是否复制成功
[root@44293a537755 ~]# ls /usr/src/
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  debug  httpd-2.4.54.tar.gz  kernels

//下载相关依赖包
[root@44293a537755 ~]# dnf -y install wget vim openssl-devel pcre-devel expat-devel libtool libxml2-devel gcc gcc-c++ make

//创建一个用户
[root@44293a537755 ~]# useradd -r -M -s /sbin/nologin apache

7.编译安装apache

//解压
[root@44293a537755 ~]# cd /usr/src/
[root@44293a537755 src]# tar xf apr-1.7.0.tar.gz 
[root@44293a537755 src]# tar xf apr-util-1.6.1.tar.gz 
[root@44293a537755 src]# tar xf httpd-2.4.54.tar.gz 

//编译apr
[root@44293a537755 src]# cd apr-1.7.0/
[root@44293a537755 apr-1.7.0]# vim configure
cfgfile=${ofile}T
    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
    #$RM "$cfgfile"			//注释这一行
[root@44293a537755 apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@44293a537755 apr-1.7.0]# make && make install

//解压编译apr-util
[root@44293a537755 apr-1.7.0]# cd ..
[root@44293a537755 src]# cd apr-util-1.6.1/
[root@44293a537755 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@44293a537755 apr-util-1.6.1]# make && make install

//解压编译httpd
[root@44293a537755 apr-util-1.6.1]# cd ..
[root@44293a537755 src]# cd httpd-2.4.54/
[root@44293a537755 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-rpm=prefork
[root@44293a537755 httpd-2.4.54]# make && make install

8.配置环境变量

//配置环境变量
[root@44293a537755 ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
[root@44293a537755 ~]# source /etc/profile.d/apache.sh  

//创建头文件
[root@44293a537755 ~]# ln -s /usr/local/apache/include/ /usr/include/apache

//取消警告
[root@44293a537755 ~]# vim /usr/local/apache/conf/httpd.conf 
#ServerName www.example.com:80			//取消注释

//启动80端口
[root@44293a537755 ~]# apachectl start
[root@44293a537755 ~]# 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:*          

//设置httpd服务的启动脚本
[root@44293a537755 ~]# cd /
[root@44293a537755 /]# vim start.sh
[root@44293a537755 /]# cat start.sh
#!/bin/sh
/usr/local/apache/bin/httpd
[root@44293a537755 /]# chmod a+x start.sh
[root@44293a537755 /]# ./start.sh

9.制作镜像

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS         PORTS     NAMES
44293a537755   centos:8   "/bin/bash"   41 minutes ago   Up 4 minutes             httpd
[root@localhost ~]# docker commit -p -c 'CMD ["/start.sh"]' 44293a537755 zxr/httpd:v1
sha256:2e6b51a9a00cedb15d491c6cdaf161f893832e85286a9ee7b1d97d108bc9b6d8
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
zxr/httpd    v1        2e6b51a9a00c   17 seconds ago   788MB
centos       8         5d0da3dc9764   10 months ago    231MB

10.对镜像进行测试

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
zxr/httpd    v1        2e6b51a9a00c   17 seconds ago   788MB
centos       8         5d0da3dc9764   10 months ago    231MB
[root@localhost ~]# docker run -dit -p 80:80 --name web zxr/httpd:v1 /bin/bash
a181319a7ff2e6a56863dad77b29263f26f6a6bf0bdee85882ac1554413fab44
[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS          PORTS                               NAMES
a181319a7ff2   zxr/httpd:v1   "/bin/bash"   6 seconds ago   Up 5 seconds    0.0.0.0:80->80/tcp, :::80->80/tcp   web
44293a537755   centos:8       "/bin/bash"   4 hours ago     Up 15 minutes                                       httpd
[root@localhost ~]# docker exec -it web /bin/bash		//进入容器
[root@a181319a7ff2 /]# 

image

11.上传镜像到docker hub上

https://hub.docker.com

//打标签
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
zxr/httpd    v1        2e6b51a9a00c   About a minute ago   788MB
centos       8         5d0da3dc9764   10 months ago        231MB
[root@localhost ~]# docker tag 2e6b51a9a00c xinruizhong/httpd:v1
[root@localhost ~]# docker images
REPOSITORY          TAG       IMAGE ID       CREATED         SIZE
zxr/httpd           v1        2e6b51a9a00c   2 minutes ago   788MB
xinruizhong/httpd   v1        2e6b51a9a00c   2 minutes ago   788MB
centos              8         5d0da3dc9764   10 months ago   231MB

//上传镜像
[root@localhost ~]# docker login			//登录docker hub账号
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: xinruizhong
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 xinruizhong/httpd:v1
The push refers to repository [docker.io/xinruizhong/httpd]
b1b068c775bd: Pushed 
74ddd0ec08fa: Pushed 
v1: digest: sha256:8d5bd3a20e2fb4d441057537d03ccbcfb002c0defeeab5d2178b77168a542e6c size: 742

image

posted @   事愿人为  阅读(137)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示