Go + MySQL + Dockerを使って、環境構築をやってみた際に作成したDockerfileやdocker-compose.ymlの解説です。
はじめに
オリジナルゲームの開発を始めて、サーバサイドの環境構築にdockerを用いたので、その時の方法を説明していきます。
環境
ディレクトリ構成
プロジェクトのディレクトリ構成は現状このように構成しています。
. ├── README.md ├── api │ ├── Dockerfile │ └── src ├── db │ ├── Dockerfile │ └── sql ├── docker-compose.yml └── my.cnf
api
apiディレクトリ以下には、Golangで実装されているサーバサイド プログラムがあります。
db
dbディレクトリ以下には、MySQLコンテナ起動のためのDockerfileと初期化時に実行するSQLを保管しておくsqlディレクトリがあります。
docker-compose.yml
GolangサーバのDockerコンテナと、MySQLコンテナを起動するためのdocker-composeファイルになります。
my.cnf
MySQLサーバにアクセスする際の機密情報や、環境設定を記したファイルになります。
GolangサーバのDockerfile
FROM golang:1.13 AS builder # 作業ディレクトリを作成する RUN mkdir /go/src/github.com && mkdir /go/src/github.com/<アカウント名> && mkdir /go/src/github.com/<アカウント名>/<プロジェクト名> # Move all files and dirs to workdir COPY ./src/ /go/src/github.com/<アカウント名>/<プロジェクト名>/ WORKDIR /go/src/github.com/<アカウント名>/<プロジェクト名>/ ENV GO111MODULE=on RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o /main . FROM alpine:latest RUN apk --no-cache add ca-certificates COPY --from=builder /main ./ RUN chmod +x ./main EXPOSE 1323 ENTRYPOINT ["./main"]
MySQLのDockerfile
FROM mysql:latest COPY sql /docker-entrypoint-initdb.d RUN apt-get update RUN apt-get install -y locales RUN rm -rf /var/lib/apt/lists/* RUN echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen RUN locale-gen ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8 CMD ["mysqld"]
MySQLコンテナを立ち上げた時に、初期化として実行したいSQLがある場合は
docker-entrypoint-initdb.d
以下にsqlコマンドを記入したファイルをコピーすることで、実行してくれます。
今回もsqlディレクトリ以下のファイルを全てコピーしてコンテナ起動時にSQLを実行するようにしています。
docker-compose.yml
version: '3' services: db: container_name: <DBコンテナ名> build: context: db volumes: - <DBボリューム名>:/var/lib/mysql - ./db/sql/:/docker-entrypont-initdb.d - ./my.cnf:/etc/mysql/conf.d/my.cnf ports: - "3306:3306" restart: always tty: true environment: - MYSQL_ROOT_PASSWORD - TZ web: container_name:<APIサーバコンテナ名> build: context: api privileged: true ports: - "1323:1323" links: - db depends_on: - db volumes: - ./src:/go/src/github.com/<アカウント名>/<プロジェクト名>/api/src restart: always tty: true volumes: <DBボリューム名>:
さいごに
Go + MySQL + Dockerの環境構築メモのような記事ですが、ひとまず自分の手元の環境に合わせてアカウント名やプロジェクト名、ポート番号などを書き換えていただければ動作すると思います。
今後は、dockerコンテナとして起動したGolangサーバと、MySQLサーバのコンテナ間通信などを解説する記事を書いていこうと思います。