将在Docker上构建的项目部署到ECS直至完成【项目的Docker化】

    使用CodePipeline进行自动部署将PJ的docker化,并在ECS上运行映像。

本地将项目进行Docker化。
环境为

    • nginx

 

    • cakephp3

 

    php-fpm

安装Docker
https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81

こちらの記事を参考にインストールしました。
チュートリアルを一通りやれば最低限のDocker環境が整います。

ソースコードをclone

$ git clone {リポジトリURL}

将来我将在此项目路线上进行工作。

Dockerビルドに使用するファイルの作成

需要的是以下: shì

    • docker-compose.yml:ローカルでの起動設定を定義

 

    Dockerfile:ローカルのソースコードをコンテナにあげる処理を書きます。コンテナ毎に必要

创建docker-compose.yml文件

 

詳しい書き方は上記の方が非常にわかりやすかったのでおすすめ
今回はnginxとphp-fpmとmemcacheでそれぞれコンテナを作成しました。
個人的なポイントはsrc以下をマウントしたこと。

volumes:
        - {ローカルディレクトリ}:{コンテナ上のディレクトリ}

使用此方法可以将本地目录与容器中的目录进行同步。
稍后我们会使用docker-compose build命令将源代码上传到容器中,如果没有这个命令,每次更改都需要重新构建。

创建Dockerfile

每个容器都将创建。
目录结构看起来是这样的↓

PJルート - docker - nginx -- Dockerfile
                 |       |
                 |        -- その他のconfファイル
                 - php-fpm - Dockerfile
                           |
                            - その他のconfファイル

在这个文件中,我们将执行向容器下载库文件,复制源代码等操作。以nginx的Dockerfile为例,具体命令请参考参考文献。

# docker/nginx/Dockerfile
FROM openresty/openresty:1.19.3.1-1-alpine

RUN apk --update add tzdata gettext && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
    apk del tzdata

ADD ./docker/nginx/nginx.conf /etc/nginx/nginx.conf

RUN mkdir -p /app
WORKDIR /app
RUN mkdir -p /webroot
ADD ./webroot/ /app/webroot

经常使用的命令如下:
FROM:基于哪个镜像(请填写Docker Hub的仓库名)
RUN:在容器上执行后续编写的命令
ADD:将本地文件/目录复制到容器中
WORKDIR:切换容器上的当前目录

我之前没在上述的nginx代码中添加源代码(src),这与nginx的运行无关。
(php-fpm的代码已经添加了。)
每个容器只添加了“该库所需的必要组件”。

创建composer.json文件

请问如何在cake中安装,虽然不是docker文件。
您可以创建composer.json↓,在Docker文件中添加RUN composer install。

"require": {
        "php": ">=5.6",
        "cakephp/cakephp": "3.6.*",
        "cakephp/migrations": "^2.0.0",
        "cakephp/plugin-installer": "^1.0",
        "electrolinux/phpquery": "^0.9.6",
        "intervention/image": "^2.5",
        "josegonzalez/dotenv": "3.*",
        "league/csv": "^9.6",
        "mobiledetect/mobiledetectlib": "2.*",
        "aws/aws-sdk-php": "3.*"
    },

确认行动

暂且这样写应该可以了。
首次需要进行构建。
在PJ根目录下。

docker-compose build

执行后开始构建。
结束后,

docker-compose up

在容器中运行。
应该能够通过 http://localhost:{docker-compose.yml中指定的端口号} 访问。

创建.env文件

今回の構成の場合、git管理されているファイルはローカルも検証環境も本番環境も全て同じコードになります。
なので環境に依存する変数は.envファイルに書き、コードで使う際にはそこから読み出すように変更します。

#mode
IS_DEBUG=true

如果这样写,那么该环境变量的”IS_DEBUG”键将包含字符串”true”。
然后根据不同的语言规范来调用它。
在PHP的情况下,可以使用getenv(‘IS_DEBUG’)。
https://www.php.net/manual/ja/function.getenv.php

這樣寫的話,該環境變數的”IS_DEBUG”鍵將包含串”true”。
然後根據不同語言的規範來呼叫它。
在PHP的情況下,可以使用getenv(‘IS_DEBUG’)。
https://www.php.net/manual/ja/function.getenv.php

小咖啡馆

想要登录本地容器时

在容器启动中,位于项目根目录中。

docker-compose exec {コンテナ名} /bin/sh

可以用登录。

当容器上的存储空间不足时

在进行ADD等操作时

failed to copy files: copy file range failed: no space left on device

有时候会被怒骂,出现这种错误是因为存储空间耗尽,与消息所述一致。
Docker构建时的缓存和镜像会保留,如果不处理,会占用存储空间,并出现此类错误。
因此,只需将它们删除即可。

仅提供一个选项,以下是对原文进行中文本地化的改写:
参考一下

 

在任意的目录中

docker system df

在我现在的环境中敲击它,可以知道其中哪一个被填充了。

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          64        5         50.92GB   50.32GB (98%)
Containers      5         0         2.449kB   2.449kB (100%)
Local Volumes   1         1         10.32MB   0B (0%)
Build Cache     475       0         6.618GB   6.618GB

只要删除图像和缓存就可以解决这个问题。

删除图像(不删除正在使用的图像)

docker rmi $(docker images -q)

清除缓存

docker builder prune

所以,最后的结果是

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          8         4         2.833GB   2.262GB (79%)
Containers      4         0         1.356kB   1.356kB (100%)
Local Volumes   1         1         10.32MB   0B (0%)
Build Cache     68        0         0B        0B

总结

如果按照上述步骤逐一修正错误,应该能够使其暂时正常运行。
需要注意的是,

    • 元々あったライブラリをもれなくインストールする

Dockerfileで明示的に書かないと入らないので結構忘れる

環境依存変数の入れ忘れに注意

大概是多久呢?

bannerAds