Docker コンテナでビルドされた Go プログラムを実行する方法

DockerBeginner
オンラインで実践に進む

はじめに

Docker は、開発者がアプリケーションを構築、パッケージ化、デプロイする方法を革新しました。このチュートリアルでは、Docker コンテナ内で Go プログラムを実行する方法を学び、一貫性があり信頼性の高い実行環境を確立します。

Docker の概要

Docker は、開発者がアプリケーションとその依存関係をすべて単一の、移植可能なコンテナにパッケージ化できる人気のコンテナ化プラットフォームです。このコンテナは、Docker がインストールされているシステムであれば、基盤となるオペレーティングシステムやインフラストラクチャに関係なく、簡単にデプロイおよび実行できます。

Docker とは?

Docker は、オープンソースのソフトウェアプラットフォームであり、ソフトウェアコンテナ内のアプリケーションのデプロイ、スケーリング、および管理を自動化します。コンテナは、アプリケーションを実行するために必要なコード、ランタイム、システムツール、ライブラリなど、すべてを含んだ軽量で独立した実行可能なソフトウェアパッケージです。

Docker を使用する理由

Docker は、開発者と IT 専門家にとって、いくつかの利点を提供します。

  1. 一貫性: Docker コンテナは、基盤となるインフラストラクチャに関係なく、アプリケーションが同じ方法で実行されることを保証します。
  2. 移植性: Docker コンテナは、開発、テスト、本番環境など、さまざまな環境間で簡単に移動できます。
  3. スケーラビリティ: Docker は、ワークロードに応じて、アプリケーションを容易にスケールアップまたはスケールダウンできます。
  4. 効率: 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 は以下の処理を行います。

  1. 公式の golang:1.18-alpine イメージをベースイメージとして使用します。
  2. 作業ディレクトリを /app に設定します。
  3. Go アプリケーションのコードをコンテナにコピーします。
  4. Go アプリケーションをビルドし、main という名前の実行可能ファイルを作成します。
  5. コンテナ起動時に 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

このコマンドは、以下の処理を行います。

  1. my-go-app Docker イメージを実行します。
  2. コンテナのポート 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 コマンドで確認できます。

まとめ

このチュートリアルでは、以下のことを学びました。

  1. シンプルな Go アプリケーションを作成する
  2. Go アプリケーションの Docker イメージを構築する
  3. Docker コンテナで Go アプリケーションを実行する
  4. Docker コンテナで実行中の Go アプリケーションにアクセスする

Docker を使用して Go アプリケーションをコンテナ化することで、さまざまな環境間で一貫性と信頼性を確保し、アプリケーションの開発、テスト、デプロイを容易にすることができます。

まとめ

このチュートリアルを終了すると、Docker コンテナ内で Go アプリケーションを構築し、実行する方法をしっかりと理解しているはずです。これにより、さまざまな環境でソフトウェアを配布およびデプロイすることが容易になります。Docker のコンテナ化技術は、開発およびデプロイプロセスを簡素化し、優れたコードの作成に集中できるよう支援します。