Go言語の勉強を始めたので備忘録がてら書いてみます。
今回は環境構築のみですが、Go言語でのAPIサーバーの開発編を続編で書けたらいいなと思ってます。
なぜDockerで?
Dockerでの環境構築は、様々なメリットが存在します。
- どのOSでも簡単に環境構築が出来る
- ホストOSと開発アプリが隔離されるので安全
- デプロイやテストが楽になる
- ホストOSにインストールするソフトウェアが減る
Dockerは最高です。
そもそもDockerとは?
コンテナ型の仮想環境を扱うためのプラットフォームです。
コンテナと呼ばれる軽量、高速に動作する仮想マシンのようなものを作成、配布、実行することができます。
詳細についてはさくらナレッジの記事がわかりやすいのでそちらをご覧ください。
Dockerのインストール
Windows と Mac は docker hub の公式ページでインストーラーがダウンロードできます。
Linux系はapt-get
やyum
を使用し、インストール出来ます。
詳細については、以下の記事が参考になります。
環境構築
はじめに、端末で作業ディレクトリを作成し、そこに移動します。
mkdir work # workディレクトリ作成
cd work # 作成したworkディレクトリに移動
Dockerコンテナの設定を書く
Dockerは、docker hubで配布されているDockerイメージをもとに、コンテナのインスタンスを作成することが出来ます。
今回は、配布されているDockerイメージをそのまま使うのではなく、Dockerfile
を駆使してカスタマイズしたイメージを作成します。
また、docker-composeというツールを使用することで、コンテナのビルドから連携までの設定をyml形式のファイルベース(docker-compose.yml
)に記述し、自動化できます。
作業ディレクトリにDockerfile
とdocker-compose.yml
を作成します。
作成したファイルをお好きなエディタで開き、編集していきます。
# ベースとなるDockerイメージ指定
FROM golang:latest
# コンテナ内に作業ディレクトリを作成
RUN mkdir /go/src/work
# コンテナログイン時のディレクトリ指定
WORKDIR /go/src/work
# ホストのファイルをコンテナの作業ディレクトリに移行
ADD . /go/src/work
version: '3' # composeファイルのバーション指定
services:
app: # service名
build: . # ビルドに使用するDockerfileがあるディレクトリ指定
tty: true # コンテナの起動永続化
volumes:
- .:/go/src/work # マウントディレクトリ指定
Dockerfile
、docker-compose.yml
はもっと色々遊べるので、調べてみてください!
buildする
docker-composeのコマンドを使用して、コンテナを作成します。
Dockerfile
、docker-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
ファイルを作成し、以下のコードを書きます。
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さえあれば誰でも簡単に環境が構築できてしまうのです...!