在容器中部署一个web站点

本文详细介绍了如何在容器中部署web站点,包括编译安装Apache,制作Docker镜像,以及测试和部署网页的过程。首先,从拉取CentOS镜像开始,接着在容器内配置阿里云YUM源和EPEL源,下载并编译安装Apache。随后,配置环境变量并制作Docker镜像。最后,在新的终端中测试镜像,成功部署网页。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在容器中部署一个web站点

编译安装apache

拉取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

用centos生成一个容器进去

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

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

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

下载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@135f494840af ~]# 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@135f494840af ~]# dnf -y install wget vim openssl-devel pcre-devel expat-devel libtool libxml2-devel gcc gcc-c++ make

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

编译安装apache

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

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

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

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

配置环境变量

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

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

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

//启动apache服务
[root@6cd57ac5f6e7 ~]# apachectl start
[root@6cd57ac5f6e7 ~]# 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@6cd57ac5f6e7 ~]# curl 127.0.0.1
<html><body><h1>It works!</h1></body></html>

制作镜像

在开启一个终端进行操作

[root@localhost ~]# docker ps 
CONTAINER ID   IMAGE      COMMAND       CREATED        STATUS        PORTS     NAMES
6cd57ac5f6e7   centos:8   "/bin/bash"   13 hours ago   Up 12 hours             httpd
//-p参数是让正在运作中的容器先暂停等制作完镜像。-c后面跟上的命令是让该镜像作为容器启动时把httpd服务也启用
[root@localhost ~]# docker commit -p -c 'CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]' 135f494840af albertdnp/httpd:v1.1
[root@localhost ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
albertdnp/httpd   v1.1      1be8037c305a   23 minutes ago   789MB
sia0294/httpd     v1        8c71018e7328   2 days ago       762MB
busybox           latest    beae173ccac6   7 months ago     1.24MB
ubuntu            latest    ba6acccedd29   9 months ago     72.8MB
centos            8         5d0da3dc9764   10 months ago    231MB
centos            latest    5d0da3dc9764   10 months ago    231MB

//首次登录需要提供用户名和密码
[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 albertdnp/httpd:v1.1		//上传镜像

测试镜像,并部署网页

//使用创建的镜像创建容器,并挂载存储卷
[root@localhost ~]# docker run -d --name web --restart always -p 80:80 -v /root/httpd_html:/usr/local/apache/htdocs albertdnp/httpd:v1.1
8df6083e80c4af28606e78cdaa2fdbd833f1d902717cdee11b94149e98f5c35b
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED              STATUS              PORTS                               NAMES
8df6083e80c4   albertdnp/httpd:v1.1   "/usr/local/apache/b…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   web
135f494840af   centos:8               "/bin/bash"              16 minutes ago       Up 16 minutes                                           httpd

//导入下载的压缩包,配置网站
[root@localhost httpd_html]# cd /root/httpd_html/
[root@localhost httpd_html]# ls
SnakeHTMLgames_780cbae4.zip
[root@localhost httpd_html]# unzip SnakeHTMLgames_780cbae4.zip
[root@localhost httpd_html]# rm -rf SnakeHTMLgames_780cbae4.zip
[root@localhost httpd_html]# ls
'#U6700#U65b0Asp.Net#U6e90#U7801#U4e0b#U8f7d.url'   Node.js    Stage.js     snake.html
 51Aspx#U6e90#U7801#U5fc5#U8bfb.txt                 Snake.js  'from .gif'

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值