DockerでGoの開発環境を構築する

Go言語の勉強を始めたので備忘録がてら書いてみます。

今回は環境構築のみですが、Go言語でのAPIサーバーの開発編を続編で書けたらいいなと思ってます。


なぜDockerで?

Dockerでの環境構築は、様々なメリットが存在します。


  1. どのOSでも簡単に環境構築が出来る

  2. ホストOSと開発アプリが隔離されるので安全

  3. デプロイやテストが楽になる

  4. ホストOSにインストールするソフトウェアが減る

Dockerは最高です。


そもそもDockerとは?

コンテナ型の仮想環境を扱うためのプラットフォームです。

コンテナと呼ばれる軽量、高速に動作する仮想マシンのようなものを作成、配布、実行することができます。

詳細についてはさくらナレッジの記事がわかりやすいのでそちらをご覧ください。


さくらナレッジ

Docker入門(第一回)~Dockerとは何か、何が良いのか~



Dockerのインストール

Windows と Mac は docker hub の公式ページでインストーラーがダウンロードできます。

Linux系はapt-getyumを使用し、インストール出来ます。

詳細については、以下の記事が参考になります。




環境構築

はじめに、端末で作業ディレクトリを作成し、そこに移動します。

mkdir work # workディレクトリ作成

cd work # 作成したworkディレクトリに移動


Dockerコンテナの設定を書く

Dockerは、docker hubで配布されているDockerイメージをもとに、コンテナのインスタンスを作成することが出来ます。

今回は、配布されているDockerイメージをそのまま使うのではなく、Dockerfileを駆使してカスタマイズしたイメージを作成します。

また、docker-composeというツールを使用することで、コンテナのビルドから連携までの設定をyml形式のファイルベース(docker-compose.yml)に記述し、自動化できます。

作業ディレクトリにDockerfiledocker-compose.ymlを作成します。

作成したファイルをお好きなエディタで開き、編集していきます。


Dockerfile

# ベースとなるDockerイメージ指定

FROM golang:latest
# コンテナ内に作業ディレクトリを作成
RUN mkdir /go/src/work
# コンテナログイン時のディレクトリ指定
WORKDIR /go/src/work
# ホストのファイルをコンテナの作業ディレクトリに移行
ADD . /go/src/work


docker-compose.yml

version: '3' # composeファイルのバーション指定

services:
app: # service名
build: . # ビルドに使用するDockerfileがあるディレクトリ指定
tty: true # コンテナの起動永続化
volumes:
- .:/go/src/work # マウントディレクトリ指定

Dockerfiledocker-compose.ymlはもっと色々遊べるので、調べてみてください!


buildする

docker-composeのコマンドを使用して、コンテナを作成します。


Docker Compose - docker-compose.yml リファレンス @zembutsu


Dockerfiledocker-composeがある作業ディレクトリで

docker-compose build

を実行。

するとdocker-composeによるDockerfileで構成したDockerイメージの作成が始まります。

正常に終了するとイメージファイルが用意され、Dockerコンテナの立ち上げが可能になります。

下記のコマンドで、用意されているイメージファイルを確認できます。

docker-compose images


Dockerコンテナ起動

同じディレクトリで

docker-compose up -d

を実行するとdockerが起動します。

-dオプションをつけることでバックグラウンドでの起動となります。

コンテナの状態確認は、以下のコマンドで出来ます。

docker-compose ps


開発してみる

Goで Hello, World! を書いて実際に動かしてみます。

ホストのworkの中にmain.goファイルを作成し、以下のコードを書きます。


main.go

package main

import "fmt"

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


ホストのworkディレクトリはコンテナのworkディレクトリにマウントされているので、作成したmain.goはコンテナからもアクセスが出来ます。

以下のコマンドで、main.goをコンテナの環境で実行できます。

docker-compose exec app go run main.go

# docker-compose exec サービス名 コマンド

Herro, World!

できましたか?

コンテナのシェルに入って実行することも可能です。

docker-compose exec app /bin/bash # コンテナのシェル起動

go run main.go

これで環境構築は完了です!

作業ディレクトリをそのままGithubでソース共有すれば、Dockerさえあれば誰でも簡単に環境が構築できてしまうのです...!