
DockerComposeでGoのGinとMySqlの環境を作ってみた-第1弾
1. はじめに
こんにちは!
K8Sが流行っている世の中ですが、 今回は 昔作ったGoのHTTP Web Frame WorkであるGinと、My Sqlの環境をDocker Compose で簡単に立ち上げるための構成-第1弾という事で紹介していこうと思います。
2. DockerComposeとは
複数のDockerコンテナから出来たサービスを構築、実行する手順を自動化し、管理を容易にするモノです。
Dockerファイル以外にcomposeファイルを作成しておき、このcomposeファイルの設定内容でコンテナを起動したりできます。
3. 必要なツール
4. 今回の構成
今回の構成は下記のようになっています。

1.ディレクトリ
docker: GoとMySqlのDockerFileや、envが入っています
src/api: goのファイルが入っています。
2.ファイル
docker-compose.yml: こちらがcomposeファイルです。下記のような設定を記載します。
- ・Dockerイメージをビルドするための情報(使用するDockerfile、イメージ名など)
- ・コンテナ起動するための情報(ホストとの共有ディレクトリ設定やポートフォワードなどの起動オプションなど)
- ・使用するDockerネットワーク
makefile: コマンドを叩くのが面倒なのでこちらに必要なコマンドを入れて[make]コマンドで使えるようにしています。
5. ファイルの中を見てみよう
今回は大事な所であるDockerとDocker Composeの説明をしていきます。
▼GoのDocker周り
FROM golang:1.10.3-alpine3.8
COPY src/api /go/src/api/
WORKDIR /go/src/api/
RUN apk update \
&& apk add --no-cache git \
&& go get github.com/gin-gonic/gin \
&& go get github.com/jinzhu/gorm \
&& go get github.com/go-sql-driver/mysql
EXPOSE 8080
今回はGoのAlpineOSを使ったDockerイメージを使います。
RUNではginフレームワークと、MySqlが使いたいのでMySqlのドライバーとGorm(GoのORM)を先に入れています。
▼MySqlのDocker周り
FROM mysql:5.7
RUN chown -R mysql /var/lib/mysql && \
chgrp -R mysql /var/lib/mysql
MySqlのDockerファイルは オーナーパーミッション変更と、グループの変更を行うのみです。
TZ=Asia/Tokyo
MYSQL_DATABASE={DbName}
MYSQL_USER={UserName}
MYSQL_PASSWORD={Password}
MYSQL_ALLOW_EMPTY_PASSWORD=yes
#MYSQL_ROOT_PASSWORD:
MySql用のenvファイルですが、こちらはMySqlの設定が入っています。
MYSQL_DATABASE・MYSQL_USER・MYSQL_PASSWORDを自分の好きな物に変更すればそのまま使えます。
▼docker-composeファイル
version: '3'
services:
api:
container_name: api
build: docker/go/Dockerfile
ports:
- 3000:3000
links:
- mysql
tty:
true
volumes:
- ./src/api:/go/src/api
mysql:
container_name: mysql
build: ./docker/mysql/Dockerfile
hostname: mysql
ports:
- "3306:3306"
env_file:
- ./docker/mysql/env
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --skip-character-set-client-handshake
volumes:
- "./mysql_data/mysql:/var/lib/mysql"
- "./docker/mysql/my.conf:/etc/mysql/my.conf"
- "./docker/mysql/init/:/docker-entrypoint-initdb.d"
やっとdocker-composeファイルです。
まず、こちらのserviceですが、この中にコンテナを指定してあげるイメージで、「api」がGoのWebサーバー、「mysql」はそのままMySqlのDBという感じです。
これら二つの中に設定を記載していきます。これらの中の設定は下記のようになっています。
- ・version: DockerComposeのバージョンの指定です。バージョンによって書き方が変わるので注意が必要です。
- ・container_name: コンテナ名の明示。
- ・build: Dockerfile のあるディレクトリのパスを指定します。
- ・hostname: そのままホストネームです。 単一の値を持ちます。
- ・ports: ポートを公開(expose)します。ホストとポートを指定(
ホスト: コンテナ
) - ・env_file: ファイルから環境変数を追加します。
- ・command: デフォルトのコマンドを上書きします。
- ・links: コンテナを他のサービスにリンクします。 今回はGoのコンテナとMy Sqlのコンテナを紐づけています。
- ・volumes: パスをボリュームとしてマウントします。
- ・tty: Docker Composeを使い、コンテナを起動させた際にコンテナが終了してしまうのを防げます。
6. まとめ
今回はDocker Composeの構成紹介をしてみました。
基本的には建てたいコンテナのDockerfileを作成し、このファイルを使ってdocker-compose.ymlでコンテナの起動やネットワーク周りを簡単に設定することができます。
1回作ってしまえば、後は簡単に同じコンテナを起動したり停止したりする事ができるので、是非構築した事がない方は作ってみてください!
次回は今回のファイルを使用して、Docker Composeを使った立ち上げなどを実施していきます!