やりたいこと
docker を使って go の開発環境を作る
ローカル環境で go の開発、実行ができるように docker で環境構築を行なっていきます。
作るもの
docker, docker-compose を使った go の開発環境
以下の環境をつくっていきます。
・ docker コンテナで go が動く
・ docker コンテナで mysql が動く
・ docker コンテナで phpadmin が動く(おまけ)
やってき
今回作っていくものは以下の通りです。
../
└── go-template
├── Dockerfile
├── docker-compose.yml
└── main.go
1.Dockerfile の作成
go の動作環境を作るための Dockerfile です
# ベースになる docker イメージを指定
FROM golang:1.17.1-alpine
# 作業ディレクトリの作成
RUN mkdir /go/src/app
# 作業ディレクトリの設定
WORKDIR /go/src/app
# ホストのファイルをコンテナの作業ディレクトリにコピー
ADD . /go/src/app
2.docker-compose.yml の作成
mysql, phpadmin はめんどうとりあえず最低限の設定のみとするので、
Dockerfile は作らずに、 docker-compose.yml で最低限の記述のみとしています。
version: '3'
services:
go-app: # サービス名
container_name: app # コンテナ名
build: . # ビルドに使う docker ファイルの場所
tty: true # コンテナの永続化
ports:
- 80:8080 # api 立てた時に使えるように
volumes:
- .:/go/src/app # マウントディレクトリ
mysql:
image: mysql:5.7
container_name: mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: docker
MYSQL_USER: docker
MYSQL_PASSWORD: docker
TZ: 'Asia/Tokyo'
phpadmin:
image: phpmyadmin/phpmyadmin
container_name: phpadmin
depends_on:
- mysql
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=mysql
- PMA_USER=docker
- PMA_PASSWORD=docker
ports:
- 3000:80
3.main.go の作成
シンプルに hello world
package main
func main() {
print("Hello World!")
}
動作確認
docker-compose でコンテナを起動します。
# コンテナを起動
% docker-compose up -d
# 起動確認
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
322d31850870 phpmyadmin/phpmyadmin "/docker-entrypoint.…" 55 seconds ago Up 54 seconds 0.0.0.0:3000->80/tcp phpadmin
343fb73f905a mysql:5.7 "docker-entrypoint.s…" 57 seconds ago Up 55 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
4d1e2248e0f8 go-template_go-app "/bin/sh" 57 seconds ago Up 55 seconds 0.0.0.0:80->8080/tcp app
無事に起動してますね
phpadmin と mysql の確認をしていきます
下記の URL に接続します。
http://localhost:3000/
こんな感じの画面が表示されれば OK です。
画面左に「docker」もされており、DBへの接続も問題なさそうですね。
⇨ 以下で指定した DB に接続できているので
mysql:
image: mysql:5.7
container_name: mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: docker
MYSQL_USER: docker
MYSQL_PASSWORD: docker
続いて、 main.go の hello world です。
以下のコマンドで実行、確認します。
% docker exec app go run main.go
Hello World!
無事、Hello World! が出力されました。
今回の作業はこれで以上です。
今後はこれをベースに開発していきます💪
最後に
今回作ったものは以下のリポジトリに配置しています。
https://github.com/Ixy-194/go-template