Docker – 多容器搭建centos7 + apache + php7.4,并通过nginx反向代理

0、引言

docker经验整理,技术一定要实践,总结,’难者不会,会者不难‘。
话不多说,搞起 :
1,安装及卸载
2,拉取镜像,创建容器
3,容器搭建 centos7 + apache + php7.4
4,服务器使用 nginx 代理到各个容器

1、安装及卸载

1.1 安装

使用 Docker 仓库进行安装
设置仓库

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

1
2
3

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

使用以下命令来设置稳定的仓库

1
2
3

yum-config-manager \
    –add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装 Docker Engine-Community

安装最新版本的 Docker Engine-Community 和 containerd

1

yum install -y docker-ce docker-ce-cli containerd.io

启动

1
2
3
4

systemctl enable docker     //开机启动
systemctl start docker      //启动
systemctl stop docker       //停止
systemctl restart docker    //重启

1.2 卸载

卸载主要使用三个命令

  • 查询安装过的包

1

yum list installed | grep docker

  • 删除安装的软件包

1

yum -y remove docker-ce.x86_64 docker-ce-cli.x86_64

  • 删除镜像/容器等

1

rm -rf /var/lib/docker

我的执行结果 :
在这里插入图片描述

2、拉取镜像,创建容器

2.1 拉取镜像

  • 搜索镜像:docker search 镜像名称

1

docker search centos

  • 拉取镜像:docker pull 镜像名称:标签

1
2
3
4
5

//不加tag,会拉取最新 tag:latest

docker pull centos
等价于
docker pull centos:latest

  • 删除镜像:docker rmi 镜像名称:标签

1

docker rmi centos:latest

  • 怎么拉取指定版本?

如果需要指定版本可以前往 https://hub.docker.com 搜索对应镜像的所有tag,选择下载

比如:搜索 centos 点击想要的镜像来源, 点击Tags,列举出所有的版本,复制下载命令
在这里插入图片描述

可能出现问题
a. Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
b. 镜像拉取慢(docker pull)
解决方法
修改镜像源

1
2
3
4
5
6
7
8
9
10

//1.编辑文件 /etc/docker/daemon.json 有则修改,没有则创建
vi /etc/docker/daemon.json
//2.将以下代码加入到文件中,我使用的是阿里源
{
  "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}
//3.保存  
:wq
//4.重启docker
systemctl restart docker

2.2 创建容器

  • 查看镜像

1

docker images

  • 创建容器

1
2
3
4
5
6

docker run -d –name phpdev1 \
-v /mnt/www/test.jocker.com:/var/www/html \
-p 0.0.0.0:90:90/tcp \
–privileged \
centos:7.7.1908 \
/usr/sbin/init

这里的创建命令主要针对 centos ,其他容器会有所调整

  • 查看容器

1
2

docker ps       //运行中的容器
docker ps -a    //所有容器

  • 容器操作相关命令

1
2
3
4

docker start   容器id 容器id …    //启动一个或多个已经被停止的容器
docker stop    容器id 容器id …    //停止一个或多个运行中的容器
docker restart 容器id         //重启容器
docker rm      容器id         //删除已经被停止的容器

我的执行结果 :
在这里插入图片描述

3、容器搭建 centos7 + apache + php7.4

centos7 我们已经拉取下来并且创建好容器了,下面就是进入容器,搭建环境

  • 进入容器

1
2

docker exec -it 容器id  /bin/bash
docker exec -it 81f3cbd1c65e /bin/bash  //我的操作记录

  • yum 安装相应扩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

//1. apache
yum -y install httpd            //yum安装
vi /etc/httpd/conf/httpd.conf   //修改Listen 端口为创建容器时指定的端口90

systemctl enable httpd          //开机启动
systemctl start httpd           //运行apache

//2. php7.4
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm

yum -y install yum-utils
yum-config-manager –enable remi-php74
yum -y  install php php-cli

yum -y  install php  php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json

4、服务器使用 nginx 代理到各个容器

  • 创建多个容器
    因为这个容器的环境已经配置好了,可以将这个容器commit为镜像保存,做为一个基础的环境镜像。可以通过这个镜像直接生成新的容器。
    添加新的容器,只需要修改httpd.conf 的 Listen ,容器绑定的端口即可。

1
2

docker commit 容器id 镜像名称:版本          //通过容器 创造 镜像
docker commit 81f3cbd1c65e  basedev:v1  //我的操作

  • 修改服务器上nginx配置文件,添加server,大概如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

vim /etc/nginx/nginx.conf

//添加新的 server
server {
    listen 91;
    server_name  test1.joker.com;
    location / {
        proxy_pass http://localhost:91;
    }
}
server {
    listen 92;
    server_name  test2.joker.com;
    location / {
        proxy_pass http://localhost:92;
    }
}

5、总结

本次主要记录总结了下,自己搭建docker环境,遇到的问题,实际业务中的架构会比这更复杂,会有很多变化,负载,K8s等,但是核心基础不会改变。
文章中有些详细的命令,和参数没做讲解,因为都有对应的官方文档,官方文档很重要,一定要仔细阅读。

原文链接:https://www.codenong.com/cs106245633/

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享