前提
main.goファイル、go.mod , go.sumファイルが同階層にある前提です。
以下を実施した後だとやりやすいです。
Dockerfile 作成
main.goと同じ階層に作成しています。
# FROM --> DocketHubからpullしてくるベースなるイメージの指定
# WORKDIR --> コンテナ起動後の作業ディレクトリ
# CMD --> CMDに記述した内容はコンテナを起動させた時に実行される
# goバージョン
FROM golang:1.22.1-alpine
# アップデートとgitのインストール
RUN apk update && apk add git
# ワーキングディレクトリの設定
WORKDIR /go/src/github.com/boiler-plate
# ホストのファイルをコンテナの作業ディレクトリに移行
COPY . .
# 依存関係のインストール
RUN go mod download
# goimports のインストール
RUN go install golang.org/x/tools/cmd/goimports@latest
# アプリケーションのビルド
RUN go build -o main .
# ポートを公開
EXPOSE 1323
# アプリケーションの実行
CMD ["./main"]
少しハマったのでメモ。
# アプリケーションのビルド
RUN go build -o main .
で終わり、ではダメで、
# ポートを公開
EXPOSE 1323
# アプリケーションの実行
CMD ["./main"]
もちゃんと書く必要があるらしいです。
image作成
Dockerファイルを元にイメージを作成します。
docker build -t sample-piyo-image-go:latest .
たまにtimeoutで失敗しますが、再実行するとなおることも。
※ -t ... イメージに名前とタグをつけるオプション
イメージが作成されていることを確認するには以下のコマンドで。
docker image ls
コンテナ起動
Dockerコンテナを起動します。
docker run -di -p 1323:1323 --name=[CONTAINER_NAME] [IMAGE_NAME]
ex docker run -di -p 1323:1323 --name=test-go-piyo sample-piyo-image-go
※このport(1323:1323)はmainのportと同じ値である必要があります。
mainでリスナーとして定義したportと、立ち上げたコンテナのportは別で動くため一致させる必要がある、ということです。
コンテナの起動確認は以下のコマンドで行います。
docker ps -a
※もし立ち上がらない場合は以下のコマンドでログを確認できます。
docker logs [CONTAINER_NAME]
API実行
curl http://localhost:1323/
を打鍵してみます。※ポート番号は任意
想定通りのレスポンス(今回はHello,World!
)が返されればOK。
ログは
docker logs [CONTAINER_NAME]
から確認できます。
コンテナの中に入る
Dockerコンテナの中へ入るには以下のコマンドで実行します。
docker exec -it [CONTAINER_NAME] /bin/sh
※exitで出られます。
その他
port確認は以下のコマンドから。
docker container ls
参考