はじめに
Googleが開発したプログラミング言語「Go」を学ぶために、Dockerを活用して「Hello, World!」を実行する手順を記録として記事にまとめました。
「Hello, World!」の出力やDockerファイルの作成といった基本的な操作をマスターしたいと考え、この機会に学びを整理し、備忘録として記録しています。
今回の記事では、Go言語については main.go
ファイルの中でのみ触れていますが、この内容がどなたかの技術学習の支えになれば幸いです。
書こうと思ったきっかけ
以前からGo言語に興味があり、学んでみたいと思っていました。しかし、他の技術習得を優先していたため、なかなか手をつけられないでいました...。
しかし、時間的に余裕ができたこの機会に、次はGo言語をキャッチアップしようと決めました。
普段はクラウド領域を専門としており、Lambda関数でのPythonや、TerraformのHashiCorp Configuration Language (HCL)、CloudFormationでのYAMLやJSONなどを中心に扱っています。
一方で、技術領域は広ければ広いほど応用が効くと考えています。そのため、興味を持った技術は、『実践的なハンズオンと記事のアウトプット』を組み合わせ、効率よく習得することを心がけています。
また、前回の記事では、Linux、Mac、Windowsそれぞれの環境でのGo言語のインストールと設定についてガイドをまとめました。詳細はこちらをご覧ください。
Go言語とDockerの知識整理
※未来の自分への備忘録として、Go言語とDockerについて改めて知識を整理します。
Go言語について
Go言語(Golang)は、Googleが開発したオープンソースのプログラミング言語です。
特徴
-
軽量性と高速性
コンパイルが速く、実行時のパフォーマンスも高い。 -
並行処理の強力なサポート
GoroutinesとChannelで効率的な並行処理を実現。 -
標準ライブラリが充実
ネットワーク、ファイル操作、JSON処理など、便利な機能を提供。
主な用途
- サーバーサイドアプリケーション
- クラウドツール(例: Docker、Kubernetes)
- ネットワークプログラミング
Dockerについて
Dockerは、コンテナ技術を利用してアプリケーションの開発・デプロイを効率化するプラットフォームです。
特徴
-
軽量な仮想環境
コンテナを使用してアプリケーションと依存関係をパッケージ化。 -
高い移植性
異なる環境(開発、テスト、本番)間で一貫した動作を保証。 -
迅速なデプロイ
環境の準備やリリースが短時間で可能。
主な用途
- 開発環境の構築
- マイクロサービスの実現
- CI/CD(継続的インテグレーション・継続的デリバリー)環境の構築
実際に「Hello, World!」やってみた
Dockerを使ってGoプログラムをセットアップし、実行する手順をご紹介します。
以下は簡単なGoアプリケーションをDockerで動かす方法です。
ディレクトリ構造
以下のようなディレクトリ構造を用意します。
my-go-app/
├── main.go
├── Dockerfile
├── docker-compose.yml
1. main.go
ファイルの内容
以下のコードを main.go
に保存します。
package main
import (
"fmt"
"net/http"
)
// リクエストを処理するハンドラ関数
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, World!")
}
func main() {
// ハンドラ関数をルートパスに登録
http.HandleFunc("/", handler)
// サーバーをポート8080で起動
fmt.Println("Server is running on port 8080...")
http.ListenAndServe(":8080", nil)
}
2. Dockerfile の内容
以下の内容を Dockerfile
に保存します。
# Goの公式イメージを使用
FROM golang:1.20
# 作業ディレクトリを設定
WORKDIR /app
# Goアプリケーションのソースコードをコピー
COPY . .
# Goモジュールを初期化し、依存関係を解決
RUN go mod init my-go-app && go mod tidy
# アプリケーションをビルド
RUN go build -o main .
# コンテナが起動時に実行するコマンド
CMD ["./main"]
# ポート8080を開放
EXPOSE 8080
3. docker-compose.yml の内容
以下の内容を docker-compose.yml
に保存します。
version: "3.8"
services:
app:
build:
context: .
ports:
- "8080:8080"
container_name: go_app
4. セットアップと起動
以下の手順でDockerコンテナを構築して実行します。ターミナルで my-go-app ディレクトリに移動します。
cd my-go-app
Dockerイメージをビルドします。
docker compose build
コンテナを起動します。
docker compose up
コンテナを停止したい場合は、以下のコマンドを実行します。
docker compose down
ブラウザでアクセスしてみた
ブラウザで http://localhost:8080
にアクセスすると、Hello, World!
と表示されます。
また、ターミナル上では以下のように、go_app | Server is running on port 8080...
と出力され、正常に起動していることが確認できます。
これで、docker compose
コマンドを使用したGoアプリケーションのセットアップと実行が完了しました!
まとめ
ここまでお読みいただきありがとうございました。今回は、Docker上でGoアプリケーションを動かす基本的な技術検証を行い、想定通り「Hello, World!」を表示させることができました。
少し触った印象として、Pythonよりもかなり速い速度でコンテナが立ち上がったように感じました。
この速度は、Goの特徴である「軽量性」と「高速性」によるものではないかと個人的に思います(間違っていたら、ごめんなさい)。
次回は、自宅環境にあるMySQLデータベースと接続する技術検証を試してみたいと考えています。