【Docker+Cloud Run勉強会】2. 使用Docker部署WordPress

这篇文章

最近我们举办了关于Docker和Cloud Run的研讨会。
本文将成为当时准备的资料。

    • 1. Dockerとは?

 

    3. Cloud RunにWordPressをデプロイする

油管

目标

重新解释,容器是什么?并同时解释

    • 代表的なコンテナエンジンであるDocker

 

    Google CloudのコンテナデプロイサービスであるCloud Run

我希望你们能学习关于这个话题。

尝试使用容器部署WordPress

我希望从这里开始使用一种名为WordPress的著名内容管理系统(CMS)作为教材。
WordPress利用数据库来管理内容。

在中文中,最佳实践是基本上采用“一个容器一个服务”的原则。

如果将一个容器分配给一个服务,那么关注的事项就会减少,一般来说,这是推荐的做法。

(文件)

因此,这次我们将WordPress和数据库分开运行。

以下是流程的概述

    1. 在本地部署WordPress和数据库的容器

 

    在Cloud Run上搭建WordPress网站

1、通過1、2步骤,需要使用Docker,并在第2步还需要使用gcloud。
如果在本地准备困难的情况下,也可以通过GC的控制台启动Cloud Shell来进行操作。

在本地部署WordPress和数据库的容器。

首先,在本地部署WordPress和数据库,然后尝试检查容器之间的通信情况。

構成方面如下:

Docker+Cloud Run-wp+db.drawio.png
    • コンテナ

wp : WordPressが稼働
db : MySQLが稼働

db_data (ボリューム) : データベースのデータを保存する領域
my_net (Dockerネットワーク) : Docker内のネットワーク

コンテナ間通信、コンテナ-ホスト間通信を実現

让我们按照上述的结构顺序进行构建。

我想立即运行一个容器,但首先需要创建在容器启动时所需的 “卷” 和 “Docker 网络”。

创建音量

「容器的特性:挥发性」被提到过,但是当容器被丢弃时,它会失去所有内容,因此无法作为数据库进行操作。

在这种情况下,通过在主机上创建一个”容器可以持久保存数据的地方”来解决问题,这被称为卷。

可以使用docker volume create命令来创建卷${卷名称}。

创建Docker网络

接下来创建Docker网络

命令是docker network create ${网络名称}。

「细节问题:
Docker 网络有几种类型,如果不指定的话,默认创建桥接网络。
桥接网络的特点是

    • 同じネットワークに所属しているコンテナ同士は通信が可能

 

    • 仮想ブリッジを通して、ホストと通信が可能

 

    • コンテナ名で名前解決が可能

ただし、初期から存在するブリッジ・ネットワーク「bridge」では名前解決不可能(ドキュメント)

部署数据库的容器

这次使用的MySQL容器将直接部署已经存在的Docker镜像,就像”hello-world”一样。具体的命令如下:

docker run -d --name db --net my_net -v db_data:/var/lib/mysql --env-file .env mysql:5.7

-d : コンテナをバックグラウンドで実行

–name db : コンテナに名前を付与

–net my_net : コンテナが所属するネットワークを指定

-v db_data:/var/lib/mysql : ボリュームの割り当て

${ボリューム名}:${コンテナ側のパス}
ちなみにホスト側のディレクトリをバインドさせることも可能

–env-file .env : 環境変数をファイルで指定

.envファイルについては後述してます

mysql:5.7 : Dockerイメージを指定

使用WordPress进行容器部署

关于WordPress,Docker镜像已经发布,直接部署该镜像也足够启动。
然而,这次故意多做一步骤,事先下载一个WordPress插件。

在这种情况下,首先需要创建原始的Docker镜像。用于创建Docker镜像的Dockerfile将在后面提到(使用先前介绍的RUN指令)。

用以下命令从这个Dockerfile创建Docker镜像。

docker build -t my_db:test .

-t my_db:test : Dockerイメージのリポジトリとタグを指定する(ドキュメント)

. : Dockerfileが存在するディレクトリを指定

※ 详细的交谈

    • Dockerfileのファイル名が「Dockerfile」以外の場合は、-fでファイル名を指定する必要があります

-tが無いとリポジトリ、タグ共にとなります

一応イメージIDを指定することでコンテナの起動は可能です

由于已经创建了Docker镜像”my_db:test”,现在只需部署容器即可。

docker run -d --name wp --net my_net -e WORDPRESS_DB_HOST=db:3306 --env-file .env -p 8000:80 my_wp:test

-e WORDPRESS_DB_HOST=db:3306 : このようにして環境変数を指定することも可能です

-p 8000:80 : ホストにおいて、localhostの8000番ポートにアクセスすると、コンテナの80番ポートに繋がります

厳密には ${IPアドレス}:${ホスト側のポート}:${コンテナ側のポート}という指定になります

命令和各种文件 (Command and various files)

命令

# ボリューム及びネットワークの作成
~/wordpress$ docker volume create db_data
~/wordpress$ docker network create my_net

# データベース用コンテナのデプロイ
~/wordpress$ cd db
~/wordpress/db$ ls -a
.  ..  .env
~/wordpress/db$ docker run -d --name db --net my_net -v db_data:/var/lib/mysql --env-file .env mysql:5.7

# WordPress用コンテナのデプロイ
~/wordpress/db$ cd ../wp/
~/wordpress/wp$ ls -a
.  ..  .dockerignore  .env  Dockerfile
~/wordpress/wp$ docker build -t my_wp:test .
~/wordpress/wp$ docker run -d --name wp --net my_net -e WORDPRESS_DB_HOST=db:3306 --env-file .env -p 8000:80 my_wp:test

Dockerfile (用于构建 Docker 镜像的文件)

FROM wordpress:latest
RUN apt-get update -y && apt-get install -y unzip
RUN curl -o /tmp/custom-post-type-ui.1.12.1.zip -L https://downloads.wordpress.org/plugin/custom-post-type-ui.1.12.1.zip \
  && unzip /tmp/custom-post-type-ui.1.12.1.zip -d /tmp/ \
  && mv /tmp/custom-post-type-ui /usr/src/wordpress/wp-content/plugins/

.env配置文件
用于数据库

MYSQL_ROOT_PASSWORD=${MySQL管理者ユーザ「root」用パスワード}
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=${MySQLユーザ「wordpress」用パスワード}

以下是中文本地化的解释:WordPress是一个使用的内容管理系统。

WORDPRESS_DB_USER=wordpress
WORDPRESS_DB_PASSWORD=${MySQLユーザ「wordpress」用パスワード}

环境变量

wordpress

WORDPRESS_DB_HOST : データベースのホスト名
WORDPRESS_DB_USER : データベースのユーザ名
WORDPRESS_DB_PASSWORD : 「WORDPRESS_DB_USER」で指定したユーザのパスワード
WORDPRESS_DB_NAME : 使用するデータベース

mysql

MYSQL_ROOT_PASSWORD : MySQL管理者ユーザ「root」用パスワード
MYSQL_DATABASE : 起動時点で作成するデータベース
MYSQL_USER : 起動時点で作成するユーザ
MYSQL_PASSWORD : 「MYSQL_USER」で指定したユーザのパスワード

docker exec命令

尽管我已经介绍了一个Dockerfile的例子,但当我们真正要自己创建一个的时候

    • ベースイメージにはどんなパッケージが入っているのか確かめたい

 

    思ったように動作せず、トラブルシューティングがしたい

我认为会有类似的想法出现。

在这种情况下,使用docker exec命令非常方便。通过使用它,您可以在运行中的容器内执行命令。

基本上,您可以按照以下方式进行输入。

docker exec -it ${コンテナ名} ${コンテナで実行したいコマンド}

关于it有点复杂,但如果没有这个选项,标准输入和标准输出将无法正确进行。建议一开始先启用此选项,等到对Docker有一定理解后再进行详细学习。

使用这个命令后,您也可以在容器的shell中进行操作。

$ docker exec -it wp bash
root@7b979b065660:/var/www/html# ps x
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 apache2 -DFOREGROUND
   28 pts/0    Ss     0:00 bash
   38 pts/0    R+     0:00 ps x
root@7b979b065660:/var/www/html#

Docker Compose:集成式容器编排工具。

在之前,我們一直通過每次運行命令來創建卷、網絡和容器。
但是,像docker run這樣的命令需要很多必要的選項,每次都要記錄下來是很麻煩的。
而且還需要考慮創建的順序(例如,在創建WordPress之前需要先創建數據庫)。

Docker Compose是一项能够轻松管理Docker的工具。

在Docker Compose中,可以使用”docker-compose.yml”文件来定义配置。对于本例,它将如下所示。

version: '3'
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - my_net
    env_file: ./db/.env
    restart: always
  wordpress:
    depends_on:
      - db
    build: ./wp/
    networks:
      - my_net
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
    env_file: ./wp/.env
    restart: always
volumes:
  db_data:
networks:
  my_net:

restart: always : コンテナ終了時、常に再起動を行う(明示的な停止は例外)

目录结构

wordpress/
├── db
│   └── .env
├── docker-compose.yml
└── wp
    ├── .dockerignore
    ├── .env
    └── Dockerfile

在准备好类似上述的文件之后

docker-compose up -d --build

执行此操作后,可以创建与之前所创建的相同环境。

请引用、参考以下内容。

    • コンテナー内での複数サービス起動

 

    • Docker コンテナ・ネットワークの理解

 

    • Use bridge networks

 

    • リポジトリ

 

    • wordpress

 

    mysql
广告
将在 10 秒后关闭
bannerAds