0
1

Dockerで簡単なAPIサーバ(Go)を立てる

Last updated at Posted at 2024-06-13

前提

main.goファイル、go.mod , go.sumファイルが同階層にある前提です。
image.png

以下を実施した後だとやりやすいです。

Dockerfile 作成

image.png

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

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1