Docker

DockerでGo開発環境構築

こんにちは、イサムです!

これから何回かGo言語についてまとめていきます。
そのため、まずはGoの開発環境をローカルPCに構築していきます。
本記事では、Dockerを使用してGoの開発環境構築し、Goのプログラムの実行までを行います。

対象読者
  • Goの環境を簡単にローカルPCに構築したい!
  • Dockerの使い方を知りたい!
この記事でやること
  • Goプログラム作成
  • Dockerfileの作成
  • docker-compose.ymlの作成(今後複数コンテナの作成のため)
  • Dockerイメージの作成
  • 作成したイメージを基にコンテナの起動
  • Goプログラムの実行

ディレクトリ構成

ディレクトリ構成は、こちらに準拠します。
(公式ではありません。)

.
├── cmd
│ └── main.go
├── docker-compose.yml
├── Dockerfile.yml

Goプログラム作成

実行するプログラムを作成します。

package main

import "fmt"

func main() {
	fmt.Println("Hello world")
}

Docker関連の準備

Dockerfile

Goのベースイメージは、容量を小さくするために、alpineを使用します。

# image取得(容量が小さいalpineを選択)
FROM golang:1.17.6-alpine

# ホストのファイルをコンテナの作業ディレクトリにコピー
COPY . /go/src/app

# ワーキングディレクトリの設定
WORKDIR /go/src/app/cmd

docker-compose.yml

今後、複数コンテナを作成するためdocker-compose.ymlを作成する。

version: "3.7"

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: app
    ports:
      - "80:80"
    volumes:
      - .:/go/src/app
    tty: true #コンテナ常時起動

Dockerイメージのビルド

ターミナルで、docker-compose.ymlがあるフォルダに移動し、下記コマンドを実行することで、作成したDockerfile、docker-compose.ymlを基にイメージが作成されます。
(自分は普段、Makefileに実行するコマンドを定義し、makeコマンドで実行することが多いです。)

$ docker-compose build
・・・(結果省略)・・・
Successfully built 8acd2d14f2c3


下記コマンドを実行し、イメージが作成されていることが確認できれば、イメージの作成が完了します。

$ docker images
REPOSITORY                                             TAG              IMAGE ID       CREATED         SIZE 
app                                                    latest           8acd2d14f2c3   4 days ago      331MB

コンテナの起動と実行

作成したイメージを基にコンテナを起動します。

$ docker-compose up -d
Starting app ... done


起動したコンテナでGoのプログラムを実行します。
appは、docker-compose.ymlで指定したservice名。

$ docker-compose exec app go run main.go
Hello World!

コンテナの停止

使用しなくなったコンテナは停止します。

$ docker-compose down
Stopping app ... done
Removing app ... done
Removing network app

まとめ

この記事では、ローカルPCにDockerを使用してGo環境の構築をしました。

Go以外でも、PHPやRails等他の言語の環境構築する際にもDockerは非常に便利ですので、ぜひ使ってみてください。

もし「記事の内容が間違えている!」、「もっと良い方法がある!」、「この記事参考にしたけどうまくいかない!」等ありましたら、Twitterまたはお問い合わせフォームからご連絡いただければと思います。

DockerやGoについての基礎知識は他の記事でまとめていきたいと思います。

最後までご覧いただきありがとうございました。

参考サイト

Go言語開発時の基本的なディレクトリ構成