Docker で構築¶
このガイドでは、シンプルな Go 言語のプロジェクトと Dockerfile を含むリソースから始めます。このガイドの開始時点から、Docker でアプリケーションを構築する方法を改善するための、様々な方法を紹介します。
環境のセットアップ¶
以下のガイドを終えてください。
Docker Desktop か Docker Engine をインストールします。
GitHub 上からサンプルアプリケーションを クローン(複製)するか、新しいリポジトリを作成します。
アプリケーション¶
このガイドのサンプルプロジェクトは、架空の言語に対して翻訳したメッセージを送信するための、クライアント・サーバ型アプリケーションです。
こちらはプロジェクト内に含まれるファイルの一覧です。
.
├── Dockerfile
├── cmd
│ ├── client
│ │ ├── main.go
│ │ ├── request.go
│ │ └── ui.go
│ └── server
│ ├── main.go
│ └── translate.go
├── go.mod
└── go.sum
cmd/
ディレクトリに含まれるコードは、クライアントとサーバの2つのアプリケーション要素です。クライアントは、メッセージの書き込み、送信、受信のためのユーザインターフェイスです。サーバはクライアントからのメッセージを受け取り、それらを翻訳し、クライアントに送り返します。
Dockerifle¶
Dockerfile はテキスト形式のドキュメントであり、この中にアプリケーションの構築手順を定義します。 Dockerfile には Dockerfile
以下は、このガイドで使う現時点の Dockerfile です。
# syntax=docker/dockerfile:1
FROM golang:1.20-alpine
WORKDIR /src
COPY . .
RUN go mod download
RUN go build -o /bin/client ./cmd/client
RUN go build -o /bin/server ./cmd/server
ENTRYPOINT [ "/bin/server" ]
以下は、この Dockerfile が何かの説明です。
# syntax=docker/dockerfile:1
このコメント文は Dockerfile パーサ ディレクティブ です。これで使用する Dockerfile 構文のバージョンを指定します。このファイルはベストプラクティスである
dockerfile:1
構文を使います。つまり、最新の Docker 構築機能を必ず利用するようにします。
FROM golang:1.20-alpine
FROM
命令は、golang
公式イメージのバージョン1.20-alpine
を使います。
WORKDIR /src
コンテナ内に
作業ディレクトリ /src
を作成します。
COPY . .
構築コンテキスト 内のファイルを、コンテナ内の作業ディレクトリにコピーします。
RUN go mod download
必要な Go モジュールをコンテナにダウンロードします。Go モジュールとは Go プログラミング言語用の依存関係管理ツールであり、 JavaScript 用の
npm install
や Python 用のpip install
と似ています。
RUN go build -o /bin/client ./cmd/client
/bin
ディレクトリ内にclient
バイナリを構築し、これを翻訳されたメッセージの送信用に使います。
RUN go build -o /bin/server ./cmd/server
/bin
ディレクトリ内にserver
バイナリを構築し、これをクライアントが翻訳したリクエストの受信に使います。
ENTRYPOINT [ "/bin/server" ]
コンテナを起動時に実行するコマンドを指定します。サーバのプロセスを起動します。
イメージの構築¶
Dockerfile を使ってイメージを構築するには、 docker
コマンドラインツールを使います。イメージを構築するコマンドは docker build
です。
イメージを構築するには以下のコマンドを実行します。
$ docker build --tag=buildme .
この作成されたイメージには buildme
があります。イメージのタグがイメージ名にあたります。
コンテナの実行¶
今構築したイメージには2つのバイナリが入っています。1つはサーバで、もう1つはクライアントです。翻訳サービスが動作するの確認するには、サーバ部分をホスト(保持)するコンテナの起動と、次にクライアントを呼び出す別のコンテナを起動します。
コンテナを実行するには docker run
コマンドを使います。
コンテナをイメージから
デタッチドモード で起動します。$ docker run --name=buildme --rm --detach buildme
これは
buildme
という名前のコンテナを起動します。
この
buildme
コンテナ内で、クライアントバイナリを呼び出すための新しいコマンドを実行します。$ docker exec -it buildme /bin/client
翻訳用のバックエンド(サーバ)プロセスにメッセージを送信できる場所として、ターミナルのユーザインターフェイスを docker exec
コマンドで開きます。
$ docker stop buildme
まとめ¶
このセクションでは、本ガイドで使うサンプルアプリケーションの概要、Dockerfile と構築の導入を示しました。コンテナイメージを構築し、そのイメージからコンテナを作成するのに成功しました。
関連情報: