2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

分析屋が異世界転生してエンジニアになったAdvent Calendar 2022

Day 14

DockerでGo+MySQLの開発環境をつくりたい

Last updated at Posted at 2022-12-13

はじめに

Dockerで開発環境を作るアウトプットとして簡単にまとめてみます
goの始め方もまとめていますが、公式ドキュメントを参考にしてください

ファイル構成

image.png

.envはdbの環境変数、my.cnfはdbの設定項目に関するファイルになります

やりかた

以下のファイルを作成して、上画像のファイル構成にします

FROM golang:1.18.0
RUN apt-get update && apt-get install -y build-essential make

# vscodeの拡張機能のためにインストール
RUN go install golang.org/x/tools/gopls@latest
RUN go install github.com/ramya-rao-a/go-outline@latest
RUN go install github.com/cosmtrek/air@latest
RUN wget -O ~/vsls-reqs https://aka.ms/vsls-linux-prereq-script && chmod +x ~/vsls-reqs && ~/vsls-reqs

WORKDIR /go/src
docker-compose.yml
version: "3"
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_USER: ${ROOTUSER}
      MYSQL_ROOT_PASSWORD: ${ROOTPASS}
      MYSQL_DATABASE: ${DATABASE}
      MYSQL_USER: ${USERNAME}
      MYSQL_PASSWORD: ${USERPASS}
      TZ: "Asia/Tokyo"
    volumes:
      - ./my.cnf:/etc/mysql/conf.d/my.cnf
    env_file:
      - .env
    container_name: sample_db
    ports:
      - 3306:3306

  go:
    build: ./
    volumes:
      - ./go/src:/go/src
    container_name: sample_go
    tty: true
    ports:
      - "8000:8000"
    depends_on:
      - db
.env
ROOTUSER=root
ROOTPASS=password
DATABASE=db
USERNAME=docker
USERPASS=docker
my.cnf
[mysqld]
character-set-server = utf8

[client]
default-character-set=utf8

Dockerイメージの作成とコンテナの起動を行います

$ docker-compose build
$ docker-compose up

Dockerfileでgo/srcをワーキングディレクトリにしているのでsrcファイルを含むgoフォルダが作成されます

まずdbのコンテナに入り、db接続を確認します

$ docker exec -it sample_db sh
// passwordはpassword(.envのROOTPASS)
$ mysql -u root -p

次にgoのコンテナに入ります

$ docker exec -it sample_go sh

go.modファイルを作成するために以下を実行します

// sample_goというモジュール名で作成
# go mod init sample_go

go/srcにmain.goファイルを以下の内容で作成します

main.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

以下を実行し、コンソール上にHello, World!が表示されたらOK

# go run main.go

おわりに

開発環境をつくる際に同じことを調べたりすることがあったので、まとめました。
今後誰かに教える際にも使えるので、その際はこの記事が役立てば良いなと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?