【Docker】在EC2实例上将nginx和php-fpm容器进行协作

总结

在EC2实例上安装并运行Docker和Docker Compose的方法备忘录
操作系统:AmazonLinux2

目标

可以直接访问EC2的EIP而无需经过负载均衡器(LB)来查看phpinfo。

安装Docker

安装 -> 启动 -> 调整权限以使其在ec2-user上运行

$ sudo su -
# yum update -y
# amazon-linux-extras install -y docker
# systemctl enable docker
# systemctl start docker
# usermod -aG docker ec2-user

安装 Docker Compose

如果能显示版本信息就可以了,请根据需要随时调整docker-compose的版本!

# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
# chmod 755 /usr/local/bin/docker-compose
# docker-compose -v
docker-compose version 1.24.1, build 4667896b

创建一个 Nginx 容器并进行访问确认。

在中国境内的情况下,使用ec2-user进行操作。

$ mkdir project
$ cd project/
$ mkdir -p docker/nginx
$ vi docker/nginx/Dockerfile
$ vi docker-compose.yml
$ docker-compose up -d
EIPにアクセスして「welcome to nginx」が見れればOK!
FROM nginx:alpine
ENV LANG ja_JP.UTF-8
version: "3"

services:
  nginx:
    build: ./docker/nginx
    ports:
      - 80:80

使用自己的index.html文件准备nginx容器

$ vi docker/nginx/index.html
$ vi docker/nginx/Dockerfile
$ docker-compose --log-level CRITICAL down --rmi all --volumes
$ docker-compose up -d
EIPにアクセスして用意したhtmlファイルに変わっていればOK
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Hogehoge</h1>
<p>Hogehoge</p>
</body>
</html>
FROM nginx:alpine
ENV LANG ja_JP.UTF-8

ADD ./index.html /usr/share/nginx/html/index.html

准备php-fpm容器。

目前与nginx的协作还未实现,暂时先启动php-fpm容器并确认php是否可以正常运行。

$ mkdir -p docker/php-fpm
$ vi docker/php-fpm/Dockerfile
$ vi docker-compose.yml
$ docker-compose --log-level CRITICAL down --rmi all --volumes
$ docker-compose up -d
$ docker-compose exec php-fpm sh

※php-fpmコンテナで実行して、バージョン情報が表示されればOK
/var/www/html # php -v
PHP 7.1.33 (cli) (built: Oct 25 2019 07:25:49) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
FROM php:7.1-fpm-alpine
ENV LANG ja_JP.UTF-8

将nginx容器和php-fpm容器进行协作

$ vi index.php
$ cp index.php docker/nginx
$ cp index.php docker/php-fpm
$ vi docker/nginx/Dockerfile
$ vi docker/php-fpm/Dockerfile
$ vi docker/nginx/default.conf
$ vi docker-compose.yml
$ docker-compose --log-level CRITICAL down --rmi all --volumes
$ docker-compose up -d
EIPにアクセスしてphpinfoが表示されればOK!
<?php
echo 'hogehoge';
phpinfo();
FROM nginx:alpine
ENV LANG ja_JP.UTF-8

ADD ./index.php /project/index.php
ADD ./default.conf /etc/nginx/conf.d/default.conf
FROM php:7.1-fpm-alpine
ENV LANG ja_JP.UTF-8

ADD ./index.php /project/index.php
server {
    listen       80;
    server_name  _;

    root /project;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.(php|xml)$ {
        fastcgi_pass  php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        include       fastcgi_params;
    }
}
version: "3"

services:
  nginx:
    build: ./docker/nginx
    ports:
      - 80:80
    depends_on:
      - php-fpm
  php-fpm:
    build: ./docker/php-fpm
广告
将在 10 秒后关闭
bannerAds