从零初始化你的服务端环境

安装CentOS7虚拟机

  • 安装VitualBox

注意:为了避免权限问题,这里我选择了以管理员身份运行VitualBox软件。

  • 从CentOS的官网下载minimal的CentOS7的iso文件
  • 将iso导入VitualBox,启动系统,安装CentOS7系统
  • 设置系统的网络,使其可以上网

可以参考这个文章

通过VitualBox给虚拟机设置一个NAT网络,一个Host-Only网络,注意记录MAC地址

设置系统的网络信息和DNS,详见我的笔记《VitualBox下CentOS7的网络设置》

  • 设置yum源
1
2
3
4
5
6
7
8
cd /etc/yum.repos.d/
yum install -y wget
mv CentOS-Base.repo CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
yum update
  • 初始化系统必须的基础软件

由于是我自己的笔记本测试环境,为了方便,我就不考虑冗余,全部安装了;如果是制作线上跑的docker镜像,必须按需安装,避免冗余:

1
yum install -y gcc-c++ gcc-g77 flex lrzsz bison file libtool libtool-libs autoconf kernel-devel patch wget libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel unzip tar bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel vim-minimal gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap diffutils net-tools libc-client-devel psmisc libXpm-devel git-core c-ares-devel

安装Docker

参考这个文章

1
2
3
4
5
6
7
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum install docker-ce
systemctl start docker
systemctl enable docker
docker version

安装Apache

https://hub.docker.com/搜索httpd的镜像,然后拉取我需要的版本对应的标签:

1
docker pull httpd:2.4

查看一下,拉取成功后,本地应该有这个镜像了:

1
2
3
[root@localhost yum.repos.d]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd 2.4 a6ea92c35c43 2 weeks ago 166MB

然后启动这个镜像,并将其80端口映射为宿主机的80端口:

1
docker run -dti -p 80:80 a6ea92c35c43

查看下容器的ID(CONTAINER ID),用于下一步进入容器:

1
2
3
[root@localhost yum.repos.d]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c369b1aaf3b a6ea92c35c43 "httpd-foreground" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp objective_wilson

现在可以通过容器ID进入容器里面,去进行调试和自定义配置了:

1
docker exec -ti 8c369b1aaf3b /bin/bash

制作个性化的Apache镜像

修改好容器内部的信息后,将该容器保存为新的镜像即可:

1
docker commit 8c369b1aaf3b httpd.2.4.no_index

其他问题

如何在纯净的docker内部安装软件?

纯净的docker里面,可能连基本的vi、yum命令都没有,这时需要通过apt-get进行软件的安装,比如:

1
2
apt-get update 
apt-get install vim

Apache服务器配置不显示文件列表

修改对应目录的Directory节点里面的Option:

1
2
3
4
# 显示文件列表
options Indexes FollowSymLinks
# 不显示文件列表
options FollowSymLinks

或者在Indexes前面加个减号也可以:

1
options -Indexes FollowSymLinks

还可以在根目录的 .htaccess 文件中输入:

1
2
3
<Files *>
Options -Indexes
</Files>

Indexes 的作用就是当该目录下没有 index.html 文件时,就显示目录结构,去掉 Indexes,Apache 就不会显示该目录的列表了。

然后重新加载下配置即可:

1
2
/usr/local/apache2/bin/httpd -t
/usr/local/apache2/bin/httpd -k graceful