SAKURUG TECHBLOG

新卒がエンジニアブログ立ち上げました(EC2+Docker)

timestampauthor-name
Kota

はじめに

はじめまして!
今年の4月より、SAKURUGで新卒1年目のエンジニアとして在籍しているKotaです。

本日よりSAKURUGで使われている技術や活動について発信し、読者の皆様にとって有益な情報を提供できたらと思います。

初回のテーマは、このSAKURUG TECHBLOGが始まるまでの経緯と目的、構築にあたりハマったところについてお話します。

普段やっていること

本題に入る前に、簡単に僕の業務内容についてです。

  • インターン生との社内ツール開発(Laravel)
  • バックエンドサーバ構築(LAMP)
  • 社内基幹システムの移行業務(kintone・GAS)
  • 業務効率化(GAS)
  • 高校生インターン企画(エンジニアリングコンテンツ)
  • 社内勉強会の運用

社内業務をメインとする新卒エンジニアは僕が第1号ということで、色々な業務を振っていただいています。元々情報系の学生ではなかったため、基本的に全てが初めて触れる技術と業務で、毎日が新鮮です。

立ち上げの経緯

きっかけは、代表の遠藤からの「エンジニアブログ書いて!」という依頼でした。

手を挙げた人にチャンスが与えられるSAKURUGですが、このようにトップダウン的に生まれる業務も時々あります。

元々は、現在運用している社員ブログの1カテゴリとしての位置づけだったのですが、「今後の発展性を踏まえ、エンジニアリングユニットで運用していけるようなものにしたい」と提案したところ、その場でOKをいただけました。

目的

冒頭で「有益な情報を提供できたら」と書きましたが、厳密には

  1. エンジニアの採用
  2. 社内のナレッジ

この2つを目的としています。

現状、社内の開発体制はまだまだこれから、というフェーズにあります。

このブログが、エンジニアとしてSAKURUGに興味を持っていただけるきっかけとなるような場にしていけたらと思います。

開発環境

  • AWS EC2
  • Docker(20.10.7)
  • Docker-Compose(1.29.2)
  • WordPress(5.8.1)

少しハマったところ

ざっくりとですが、開発の流れです。

  1. EC2インスタンス起動
  2. Dockerインストール
  3. Docker-Composeインストール
  4. コンテナ起動
  5. WordPress設定
  6. DNS設定
  7. SSL発行

至る所で躓きましたが、今回は5のWordPress設定に進む際、DB接続エラーにハマってしまったので、そこについて少しお話したいと思います。Docker初心者によるDocker初心者向けの内容です。

まず、4でコンテナを起動するにはdocker-compose.ymlを設定し、docker-compose up コマンドを実行する必要があります。
1~4のymlファイル設定手順は主に下記の記事を参考にさせていただきました。


初めに、追加したymlの中身はこちらです。

version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpres
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:


で、結論から言うとココさえ押さえておけば、コンテナ起動~WordPress立ち上げで躓くことは無いかと思われます。

version: '3'

services:
   db:
     image: mysql:5.7
     volumes:                              // ※1
       - db_data:/var/lib/mysql            // ホストの作業フォルダ'db_data'とコンテナの'/var/lib/mysql'を同期する
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress  // (1) MySQlのrootパスワード
       MYSQL_DATABASE: wordpress           // (2) MySQlのDB名
       MYSQL_USER: wordpress               // (3) MySQlのユーザー名
       MYSQL_PASSWORD: wordpress           // (4) MySQlのパスワード

   wordpress:
     depends_on:
       - db                                // 'db'が起動することで'wordpress'が起動される
     image: wordpress:latest
     ports:
       - "8000:80"                         // ホストのブラウザで':8000'にアクセス→コンテナの'80'に接続→WordPressの画面が返ってくる
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306          // DBに'db'を使用する。ポート番号は3306(デフォルト)
       WORDPRESS_DB_USER: wordpress        // =(3) MySQlのユーザー名
       WORDPRESS_DB_PASSWORD: wordpress    // =(4) MySQlのパスワード
volumes:                                   // ※2
    db_data:                               // ホストOSに'db_data'というデータ保存領域を作成


僕はこれまで、Laravelでの開発時に既にポート番号8000番を使用していたので、まずports:のポート番号を任意の値に変更する必要がありました。

WORDPRESS_DB_USER等はセキュリティ上任意の文字列への変更がマストですが、MYSQL_USER等の環境変数と一致させる必要があります。

そして今回ハマったのがvolumesの設定です。

何を血迷ったか、ymlの設定を編集する過程でこのvolumesの部分を削除してコンテナを起動してしまったため、固定IP紐づけ時にEC2インスタンスを再起動したところdocker deamonが停止してしまいました。これによりvolumeが作成できなくなってしまうので、コンテナから作り直しです。

因みに、※1のようにservises内で定義されるvolumesは「バインドマウント」と呼ばれ、/var/lib/mysqlの中のデータが永続化されるとともに、db_dataからコンテナ内のファイルを編集できるようになります。

一方、※2のようにトップレベルで定義するvolumesが「ボリューム」という概念です。Dockerコンテナ内でデータを保持するための領域を確保することでデータが永続化されます。

今回はDockerの基礎知識が無いままに構築してしまい、想定していたより工数が掛かる結果となりました。しかし、こうした失敗談をブログというかたちでアウトプットすることで少しづつ理解を深めていけたらと思います。構築にあたり、ご協力していただいた先輩方に感謝です。

今後も、このようなエンジニアネタを中心にSAKURUG TECHBLOGを更新予定ですので、是非お楽しみに!

参考

https://matsuand.github.io/docs.docker.jp.onthefly/storage/bind-mounts/
https://qiita.com/tomokei5634/items/75d2501cfb968d0cfab5

記事をシェアする

ABOUT ME

author-image
Kota
新卒入社3年目。SAKURUG TECHBLOG管理者。社内業務システムやフロントエンド開発を行っています。

© SAKURUG co.,ltd.