用Dockerfile生成docker-compose.yaml文件

根据使用 Docker 创建的包含 nginx 和 php-fpm 环境的 Dockerfile,创建 docker-compose.yaml 文件,使得可以使用 docker-compose 命令生成和启动容器的 Docker 图像。

流程

    1. 创建docker-compose.yaml文件

 

    1. 修改nginx和php-fpm的Dockerfile设置

 

    1. 使用docker-compose启动两个镜像

 

    1. 确认连接到容器

 

    停止并删除容器

创建 docker-compose.yaml 文件

$ pwd
$HOME/works/docker-sample/php-tcp
$ touch docker-compose.yaml
$ vim docker-compose.yaml
$ cat docker-compose.yaml

docker-compose.yaml 的配置内容如下。

version: '3'

services:
  php-sample:
    restart: always
    build:
      context: .
      dockerfile: ./php/Dockerfile

  nginx-sample:
    restart: always
    ports:
      - 80:80
    build:
      context: .
      dockerfile: ./nginx/Dockerfile

修改nginx和php-fpm的Dockerfile配置。

如果继续使用docker-compose命令创建容器,将在读取nginx和php-fpm镜像的配置文件时出现错误,因此需要对两个Dockerfile进行修改。

php-fpm的Dockerfile

在进行更改之前,制作原件的副本,并保证能够清楚地看出更改的内容。

$ cp php/Dockerfile php/Dockerfile.orig
$ vim php/Dockerfile
$ diff -uw php/Dockerfile.orig php/Dockerfile

下面是更改的内容。
(行首的(-)表示更改前的描述。行首的(+)表示更改后的描述)

--- php/Dockerfile.orig	2022-03-27 13:43:21.000000000 +0900
+++ php/Dockerfile	2022-03-27 13:43:50.000000000 +0900
@@ -1,5 +1,5 @@
 FROM php:8.1.4-fpm-alpine

 RUN cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini
-COPY settings/php.ini /usr/local/etc/php/conf.d/php.ini
-COPY src /usr/share/nginx/html
+COPY php/settings/php.ini /usr/local/etc/php/conf.d/php.ini
+COPY php/src /usr/share/nginx/html

当从 Dockerfile 引用相对路径时,已将其更改为从 docker-compose.yaml 引用的相对路径。

nginx 的 Dockerfile

$ cp nginx/Dockerfile nginx/Dockerfile.orig
$ vim nginx/Dockerfile
$ diff -uw nginx/Dockerfile.orig nginx/Dockerfile

nginx的Dockerfile更改如下所示。

$ diff -uw nginx/Dockerfile.orig nginx/Dockerfile
--- nginx/Dockerfile.orig	2022-03-27 13:44:42.000000000 +0900
+++ nginx/Dockerfile	2022-03-27 13:45:20.000000000 +0900
@@ -1,3 +1,3 @@
 FROM nginx:1.21.6-alpine

-COPY settings/default.conf /etc/nginx/conf.d/default.conf
+COPY nginx/settings/default.conf /etc/nginx/conf.d/default.conf

使用docker-compose启动两个镜像

$ docker-compose up -d --build
Creating network "php-tcp_default" with the default driver
Building php-sample
...
Creating php-tcp_nginx-sample_1 ... done
Creating php-tcp_php-sample_1   ... done

当使用docker-compose启动容器时,会执行”Creating network “php-tcp_default” with the default driver”命令,并自动为我们创建临时网络。

确认与容器的连接

确认容器的启动,并尝试连接到 Nginx。

$ docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS                NAMES
b4fc4a4e62ee   php-tcp_nginx-sample   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp   php-tcp_nginx-sample_1
1f6bbef6b036   php-tcp_php-sample     "docker-php-entrypoi…"   2 minutes ago   Up 2 minutes   9000/tcp             php-tcp_php-sample_1
$ curl -I -s localhost:80
HTTP/1.1 200 OK
Server: nginx/1.21.6
Date: Sun, 27 Mar 2022 08:27:17 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/8.1.4

通过WEB浏览器访问 http://localhost/ ,确认是否显示了 phpinfo() 的执行结果。

停止并删除容器

$ docker-compose down
Stopping php-tcp_nginx-sample_1 ... done
Stopping php-tcp_php-sample_1   ... done
Removing php-tcp_nginx-sample_1 ... done
Removing php-tcp_php-sample_1   ... done
Removing network php-tcp_default
$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
广告
将在 10 秒后关闭
bannerAds