えんじにあ雑記!

開発していて学んだことをまとめていきます!

Go + MySQL + Dockerで環境構築やってみた

f:id:flat-M_M:20200702153936j:plain

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サーバのコンテナ間通信などを解説する記事を書いていこうと思います。

1セメスターで50以上のゲームを開発したプロジェクトの話

f:id:flat-M_M:20200601204632j:plain

アメリカの大学で実施された「可能な限り早いプロトタイピングにより、できるだけ多くの新しいゲームプレイを発見する」ことを目的としたプロジェクト「How to Prototype a Game in Under 7 Days」

短期間でゲームを作り続けて見えてきた事実が興味深い内容だったので、論文を日本語訳してまとめてました。

続きを読む

Unityで端末の言語設定を取得する方法

f:id:flat-M_M:20200413224337j:plain

先日、「簡単操作でクセになる」ゲームを目指して開発したものを全世界に向けてリリースしました!

全世界でユーザを抱えるゲームを作ってみたいという思いから、4カ国語に対応したのですが、その際にそもそもゲームをプレイしている端末の言語設定を取得しないといけませんでした。

その時の実装方法をまとめます。

続きを読む