はじめに
Docker は、開発者がアプリケーションを構築、パッケージ化、デプロイする方法を革新しました。このチュートリアルでは、Docker コンテナ内で Go プログラムを実行する方法を学び、一貫性があり信頼性の高い実行環境を確立します。
Docker の概要
Docker は、開発者がアプリケーションとその依存関係をすべて単一の、移植可能なコンテナにパッケージ化できる人気のコンテナ化プラットフォームです。このコンテナは、Docker がインストールされているシステムであれば、基盤となるオペレーティングシステムやインフラストラクチャに関係なく、簡単にデプロイおよび実行できます。
Docker とは?
Docker は、オープンソースのソフトウェアプラットフォームであり、ソフトウェアコンテナ内のアプリケーションのデプロイ、スケーリング、および管理を自動化します。コンテナは、アプリケーションを実行するために必要なコード、ランタイム、システムツール、ライブラリなど、すべてを含んだ軽量で独立した実行可能なソフトウェアパッケージです。
Docker を使用する理由
Docker は、開発者と IT 専門家にとって、いくつかの利点を提供します。
- 一貫性: Docker コンテナは、基盤となるインフラストラクチャに関係なく、アプリケーションが同じ方法で実行されることを保証します。
- 移植性: Docker コンテナは、開発、テスト、本番環境など、さまざまな環境間で簡単に移動できます。
- スケーラビリティ: Docker は、ワークロードに応じて、アプリケーションを容易にスケールアップまたはスケールダウンできます。
- 効率: Docker コンテナは軽量であり、従来の仮想マシンよりも少ないリソースを使用するため、実行効率が向上します。
Docker の開始
Docker を開始するには、システムに Docker エンジンをインストールする必要があります。Docker は、公式 Docker ウェブサイト (https://www.docker.com/get-started) からダウンロードしてインストールできます。Docker をインストールしたら、Docker コンテナの作成と実行を開始できます。
graph TD
A[Docker のインストール] --> B[Docker イメージの作成]
B --> C[Docker コンテナの実行]
C --> D[アプリケーションのデプロイ]
表 1: Docker CLI コマンド
| コマンド | 説明 |
|---|---|
docker build |
Dockerfile から Docker イメージをビルド |
docker run |
Docker コンテナを実行 |
docker ps |
実行中の Docker コンテナの一覧表示 |
docker images |
Docker イメージの一覧表示 |
docker push |
Docker イメージをレジストリにプッシュ |
docker pull |
Docker イメージをレジストリからプル |
Docker の基本的な理解ができたところで、Docker コンテナ内で Go アプリケーションを構築する方法に進みましょう。
Docker で Go アプリケーションを構築する
Go アプリケーションの作成
まず、シンプルな Go アプリケーションを作成します。main.go という名前の新規ファイルを作成し、以下の内容を記述します。
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, LabEx!")
})
fmt.Println("Starting server on :8080")
http.ListenAndServe(":8080", nil)
}
この Go アプリケーションはポート 8080 でリスンし、ルート URL (/) にリクエストがあった場合、"Hello, LabEx!" というメッセージを返します。
Docker イメージの構築
この Go アプリケーションを Docker コンテナで実行するために、Docker イメージを作成する必要があります。Dockerfile という名前の新規ファイルを作成し、以下の内容を記述します。
FROM golang:1.18-alpine
WORKDIR /app
COPY . .
RUN go build -o main .
CMD ["./main"]
この Dockerfile は以下の処理を行います。
- 公式の
golang:1.18-alpineイメージをベースイメージとして使用します。 - 作業ディレクトリを
/appに設定します。 - Go アプリケーションのコードをコンテナにコピーします。
- Go アプリケーションをビルドし、
mainという名前の実行可能ファイルを作成します。 - コンテナ起動時に
main実行可能ファイルを実行するコマンドを設定します。
Docker イメージのビルド
Docker イメージをビルドするには、Dockerfile と同じディレクトリで以下のコマンドを実行します。
docker build -t my-go-app .
このコマンドは、タグ my-go-app を持つ Docker イメージをビルドします。
Docker イメージの確認
システム上の利用可能な Docker イメージを一覧表示するには、以下のコマンドを実行します。
docker images
my-go-app イメージがリストに表示されるはずです。
これで、Go アプリケーションの Docker イメージができましたので、Docker コンテナで実行してみましょう。
Docker で Go アプリケーションを実行する
Docker コンテナの実行
Go アプリケーションを Docker コンテナで実行するには、以下のコマンドを使用します。
docker run -p 8080:8080 my-go-app
このコマンドは、以下の処理を行います。
my-go-appDocker イメージを実行します。- コンテナのポート 8080 をホストのポート 8080 にマッピングします。これにより、ローカルマシンからアプリケーションにアクセスできるようになります。
graph TD
A[Docker ホスト] --> B[Docker コンテナ]
B --> C[Go アプリケーション]
A --"HTTP 8080"--> B
実行中のコンテナの確認
実行中の Docker コンテナの一覧を表示するには、以下のコマンドを実行します。
docker ps
my-go-app コンテナがリストに表示されるはずです。
Go アプリケーションへのアクセス
Docker コンテナで実行中の Go アプリケーションにアクセスするには、ウェブブラウザを開き、http://localhost:8080 にアクセスします。すると、"Hello, LabEx!" というメッセージが表示されるはずです。
Docker コンテナの停止
実行中の Docker コンテナを停止するには、以下のコマンドを使用します。
docker stop <container_id>
<container_id> を実行中のコンテナの ID に置き換えます。コンテナ ID は docker ps コマンドで確認できます。
まとめ
このチュートリアルでは、以下のことを学びました。
- シンプルな Go アプリケーションを作成する
- Go アプリケーションの Docker イメージを構築する
- Docker コンテナで Go アプリケーションを実行する
- Docker コンテナで実行中の Go アプリケーションにアクセスする
Docker を使用して Go アプリケーションをコンテナ化することで、さまざまな環境間で一貫性と信頼性を確保し、アプリケーションの開発、テスト、デプロイを容易にすることができます。
まとめ
このチュートリアルを終了すると、Docker コンテナ内で Go アプリケーションを構築し、実行する方法をしっかりと理解しているはずです。これにより、さまざまな環境でソフトウェアを配布およびデプロイすることが容易になります。Docker のコンテナ化技術は、開発およびデプロイプロセスを簡素化し、優れたコードの作成に集中できるよう支援します。



