制作Apache容器

apache简介:

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。

(注意:红色是代码,蓝色是运行出来的结果!!!)

一、准备工作

//下载apache源码包

# 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

//拉取镜像

# docker pull centos

# docker images

REPOSITORY   TAG       IMAGE ID       CREATED        SIZE

busybox      latest    beae173ccac6   3 months ago   1.24MB

httpd        latest    dabbfbe0c57b   4 months ago   144MB

centos       latest    5d0da3dc9764   7 months ago   231MB

//创建容器基于centos镜像,在终端1上操作

# docker run -it --name c1 centos /bin/bash

# ls

bin  home   lost+found opt   run   sys  var

dev  lib    media proc  sbin  tmp

etc  lib64  mnt root  srv   usr

# alias ls='ls --color'    //显示颜色

# ls

bin  home   lost+found  opt   run   sys  var

dev  lib    media       proc  sbin  tmp

etc  lib64  mnt         root  srv   usr

# cd /usr/src

# ls

debug  kernels

//另起一个终端2,在终端2上执行操作

# ls

anaconda-ks.cfg   apr-util-1.6.1.tar.gz

apr-1.7.0.tar.gz  httpd-2.4.53.tar.gz

# mkdir software    //创建目录

# mv *.gz software/     //将apache的源码包移动复制到目录里

# ls

anaconda-ks.cfg  software

# docker cp software c1:/usr/src/       //将此目录复制到容器c1的/usr/src

//在终端1上操作

# ls

debug  kernels  software

# ls software/

apr-1.7.0.tar.gz       httpd-2.4.53.tar.gz

apr-util-1.6.1.tar.gz

//配置yum源

# cd /etc/yum.repos.d/

# ls

CentOS-Linux-AppStream.repo

CentOS-Linux-BaseOS.repo

CentOS-Linux-ContinuousRelease.repo

CentOS-Linux-Debuginfo.repo

CentOS-Linux-Devel.repo

CentOS-Linux-Extras.repo

CentOS-Linux-FastTrack.repo

CentOS-Linux-HighAvailability.repo

CentOS-Linux-Media.repo

CentOS-Linux-Plus.repo

CentOS-Linux-PowerTools.repo

CentOS-Linux-Sources.repo

# rm -rf *

# ls

# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*

# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*

# yum clean all

 

Failed to set locale, defaulting to C.UTF-8

18 files removed

# yum makecache

 

二、基于容器编译apache

//安装开发环境

# yum -y install wget make

# yum groups mark install "Development Tools"

# rpm -qa | grep gcc

libgcc-8.4.1-1.el8.x86_64

# useradd -r -M -s /sbin/nologin apache

# id apache

uid=998(apache) gid=996(apache) groups=996(apache)

# yum -y install openssl-devel pcre-devel expat-devel libtool

//解压

# tar xf apr-1.7.0.tar.gz

# tar xf apr-util-1.6.1.tar.gz

# tar xf httpd-2.4.53.tar.gz

//编译apr-1.7.0

# cd /usr/src/software/apr-1.7.0

# ls

apr-config.in     dso           NOTICE

apr.dep           emacs-mode    NWGNUmakefile

apr.dsp           encoding      passwd

apr.dsw           file_io       poll

apr.mak           helpers       random

apr.pc.in         include       README

apr.spec          libapr.dep    README.cmake

atomic            libapr.dsp    shmem

build             libapr.mak    strings

build.conf        libapr.rc     support

buildconf         LICENSE       tables

build-outputs.mk  locks         test

CHANGES           Makefile.in   threadproc

CMakeLists.txt    Makefile.win  time

config.layout     memory        tools

configure         misc          user

configure.in      mmap

docs              network_io

# vim configure

$RM "$cfgfile"   //把这个删掉

# ./configure --prefix=/usr/local/apr

# make

# make install

//编译apr-util-1.6.1

# cd ../apr-util-1.6.1

# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

# make 

# make install

//编译httpd-2.4.53

# cd ../httpd-2.4.53

# ls

ABOUT_APACHE     docs            modules

acinclude.m4     emacs-style     NOTICE

Apache-apr2.dsw  httpd.dep       NWGNUmakefile

Apache.dsw       httpd.dsp       os

apache_probes.d  httpd.mak       README

ap.d             httpd.spec      README.CHANGES

build            include         README.cmake

BuildAll.dsp     INSTALL         README.platforms

BuildBin.dsp     InstallBin.dsp  ROADMAP

buildconf        LAYOUT          server

CHANGES          libhttpd.dep    srclib

changes-entries  libhttpd.dsp    support

CMakeLists.txt   libhttpd.mak    test

config.layout    LICENSE         VERSIONING

configure        Makefile.in

configure.in     Makefile.win

# ./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

 

# make

# make install

//要使apache在前台运行则需要写脚本

# cd /

# ls

bin  home   lost+found  opt   run   sys  var

dev  lib    media       proc  sbin  tmp

etc  lib64  mnt         root  srv   usr

# vi entrypoint.sh

# chmod +x entrypoint.sh    //给执行权限

# ls

bin            etc   lib64       mnt   root  srv  usr

dev            home  lost+found  opt   run   sys  var

entrypoint.sh  lib   media       proc  sbin  tmp

# cat entrypoint.sh 

#!/bin/bash

/usr/local/apache/bin/httpd && sleep 5d

# ./entrypoint.sh

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message

# 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:*    

//在终端2试着访问

# docker ps

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES

aac9feaa6e20   centos    "/bin/bash"   36 minutes ago   Up 36 minutes             c1

# docker inspect c1

"Gateway": "172.17.0.1",

                    "IPAddress": "172.17.0.2",

                    "IPPrefixLen": 16,

                    "IPv6Gateway": "",

                    "GlobalIPv6Address": "",

                    "GlobalIPv6PrefixLen": 0,

                    "MacAddress": "02:42:ac:11:00:02",

                    "DriverOpts": null

# curl 172.17.0.2    //访问成功,表示编译成功了

<html><body><h1>It works!</h1></body></html>

三、基于容器生成镜像

//制作镜像

# docker images

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE

httpd        v0.1      2aea1e2b975c   6 minutes ago   729MB

busybox      latest    beae173ccac6   3 months ago    1.24MB

httpd        latest    dabbfbe0c57b   4 months ago    144MB

centos       latest    5d0da3dc9764   7 months ago    231MB

# docker commit -a 'sean <1@2.com>' -c 'CMD ["/entrypoint.sh"]' -p c1 httpd:v0.2    //制作镜像

sha256:fe36a36e4c2f8b45757d88fe054d12f7fe3df9b05f6e1880107d21e0887be090

# docker run -d --name web -p 80:80 httpd:v0.2    //基于这个镜像创建一个容器来看是否成功

7f2510c27750ecc7aedf2c0f96513e9d32e2040ae4c52f6207ed88e54fe2ba49

# docker ps     //查看有启动,表示成功

CONTAINER ID   IMAGE        COMMAND            CREATED          STATUS          PORTS                               NAMES

7f2510c27750   httpd:v0.2   "/entrypoint.sh"   9 seconds ago    Up 8 seconds    0.0.0.0:80->80/tcp, :::80->80/tcp   web

aac9feaa6e20   centos       "/bin/bash"        52 minutes ago   Up 52 minutes                                       c1

# docker images

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE

httpd        v0.2      fe36a36e4c2f   2 minutes ago   729MB

httpd        v0.1      2aea1e2b975c   9 minutes ago   729MB

busybox      latest    beae173ccac6   3 months ago    1.24MB

httpd        latest    dabbfbe0c57b   4 months ago    144MB

centos       latest    5d0da3dc9764   7 months ago    231MB

使用IP地址访问

 如果程序本身可以在前台运行,就不用写脚本,直接让在程序里启动

//制作镜像

#docker commit -a 'sean <1@2.com>' -c 'CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]' -p c1 httpd:v0.4

# docker run -d --name web1 -p 80:80 httpd:v0.4   //如果报错显示端口号被占

则把占用端口的那个删掉就行

# docker rm -f web

//如果前面创建容器报错了端口被占,后面删除了占端口的web,run命令的创建成功了,启动没有成功,所以需要启动

# docker start web1    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值