はじめまして!
今年の4月より、SAKURUGで新卒1年目のエンジニアとして在籍しているKotaです。
本日よりSAKURUGで使われている技術や活動について発信し、読者の皆様にとって有益な情報を提供できたらと思います。
初回のテーマは、このSAKURUG TECHBLOGが始まるまでの経緯と目的、構築にあたりハマったところについてお話します。
本題に入る前に、簡単に僕の業務内容についてです。
社内業務をメインとする新卒エンジニアは僕が第1号ということで、色々な業務を振っていただいています。元々情報系の学生ではなかったため、基本的に全てが初めて触れる技術と業務で、毎日が新鮮です。
きっかけは、代表の遠藤からの「エンジニアブログ書いて!」という依頼でした。
手を挙げた人にチャンスが与えられるSAKURUGですが、このようにトップダウン的に生まれる業務も時々あります。
元々は、現在運用している社員ブログの1カテゴリとしての位置づけだったのですが、「今後の発展性を踏まえ、エンジニアリングユニットで運用していけるようなものにしたい」と提案したところ、その場でOKをいただけました。
冒頭で「有益な情報を提供できたら」と書きましたが、厳密には
この2つを目的としています。
現状、社内の開発体制はまだまだこれから、というフェーズにあります。
このブログが、エンジニアとしてSAKURUGに興味を持っていただけるきっかけとなるような場にしていけたらと思います。
ざっくりとですが、開発の流れです。
至る所で躓きましたが、今回は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/