新しい言語について学ぶ前ににわかDocker知識をマシにする(中編)

元々Go言語について学びたかったため、Go言語が動く環境を作成する。

最も簡単で単純な環境を構築する方法は、Go言語イメージ公式ページに記載されているコマンドを実行することだ。

 docker pull golang

https://hub.docker.com/_/golang?tab=description

 

PowerShellで上記コマンドを実行すると、下記のような表示になる。

これでGo言語環境のイメージを保存できたはずなので、コマンドで確認する

docker images

すると上記表示になる。

Go言語環境のイメージが保存できていることが確認できた。

 

次に、下記コマンドでコンテナを作成する。

docker run -it {IMAGE ID}

IMAGE IDの部分には先ほど保存したイメージのIMAGE IDを使用する。

すると、上記表示になる。

これはコンテナが作成され、コンテナ内に入っている状態であることを示している。

実際に、Goのコマンドを打って確かめてみる。

言語のバージョンが表示され、Go言語が動くことを確認できた。

runコマンドのオプションについては公式ドキュメントを参照。

https://docs.docker.jp/v19.03/engine/reference/commandline/run.html

 

これだけでは応用もできないため、Dockerfileの作成を行う。

Go言語イメージ公式ページの下部に

クイックリファレンス(続き)

という項があり、さらにその中に

アプリでGoインスタンスを開始します

という項目がある。

そこにDockerfileの例が載っているため、そちらを使用する。

# Go言語公式イメージの「1.18」タグが付いているものを使用※
FROM golang:1.18
# この行以降で実行するコマンドはWORKDIRに指定したパスで実行する WORKDIR /usr/src/app # pre-copy/cache go.mod for pre-downloading dependencies and only redownloading them in subsequent builds if they change COPY go.mod go.sum ./ RUN go mod download && go mod verify COPY . .

# Goのソースをビルド RUN go build -v -o /usr/local/bin/app ./...
# docker run時に実行 CMD ["app"]

※タグはイメージにつけられるもので、上記では言語のバージョンを表す。

他にもディストリビューションごとに作成されていたりする。

イメージのOS等も載っているので確認できる

https://hub.docker.com/layers/golang/library/golang/1.18/images/sha256-5b75b529da0f2196ee8561a90e5b99aceee56e125c6ef09a3da4e32cf3cc6c20?context=explore

Dockerfileに記載できる他のコマンドについては下記参照

Dockerfile リファレンス — Docker-docs-ja 20.10 ドキュメント

 

Dockerfileには拡張子は必要なく、エディタで拡張子なしのファイルを作成する。

その後は、Dockerfileを置いたディレクトリに移動し下記コマンドを実行するとビルドが行われる

docker build .

上記では失敗しているがこのような表示になる

Dockerfile内で既にプロジェクトを作成している想定なので失敗している

WORKDIRを設定したところまでDockerfile内の記述を削除し再度実行すると、今度は成功した

docker imagesコマンドで確認すると、作成できていることがわかる

先ほどと同じようにdocker runコマンドを実行しバージョン確認を行う

上手くいっていることがわかる

 

次回はdocker-composeを使用しローカルのファイルをDockerコンテナ内で実行する、よく見る環境を作成予定。