Docker イメージに基づいて Go プロジェクトをデプロイする方法と手順

Docker イメージに基づいて Go プロジェクトをデプロイする方法と手順

知識への依存

  • Go クロスコンパイルの基礎
  • Dockerの基礎
  • Dockerfileカスタムイメージの基本
  • Docker-compose オーケストレーション ファイル作成の基本

もちろん、何も知らなくても、これらの手順に従って展開を完了することもできます。ただし、途中で小さな問題が発生した場合、解決方法がわからない場合があります。もちろん、メッセージを残すこともできます。

私は Mac で開発とテストを行いました。Windows の場合は多少の違いがあるかもしれませんが、大きな問題にはならないはずです。

1. 環境への依存

  • ドッカー

2. GoLangウェブプログラムを書く

ここでは最も単純な hello world プログラムを記述します。リスニング ポートはポート 80 です。
次の内容を含む新しいmain.goファイルを作成します。

パッケージメイン
輸入 (
  「fmt」
  "ログ"
  「ネット/http」
)
sayHello関数(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "こんにちは世界")
}
関数main() {
  http.HandleFunc("/", sayHello)//URI パスと対応する処理関数を登録します log.Println("[既定のプロジェクト] サービスはポート 80 のリッスンを正常に開始しました")
  er := http.ListenAndServe("0.0.0.0:80", nil)
  er != nil の場合 {
    log.Fatal("ListenAndServe: ", er)
  }
}

3. Linuxでパッケージにコンパイルする

私はこれを Mac で開発し、go のクロスコンパイルを使用する必要がありました。クロスコンパイルに慣れていない場合は、ドキュメントを確認するか、以下のコマンドをコピーしてコンパイルしてください。
golangイメージに基づいてDockerで実行したいので、 i386プロセッサと互換性のあるプログラムにコンパイルする必要があります。

sudo env GOOS=linux GOARCH=386 ビルド main.go

コンパイルが完了すると、ローカルにmainプログラムが追加されます。今のところは無視して、バックアップとして保存してください。

4. Dockerfileを使用してgoプログラムのイメージをカスタマイズする

新しいフォルダーを作成し、その中に新しいDockerfileファイルを作成し、その中にappscriptという 2 つの新しいファイルを作成します。前の手順のmainプログラムをappフォルダーに配置し、 scriptbuild.shスクリプトファイルを作成します。ファイルの内容は今は無視してください。後で説明します。
具体的なファイル構造は以下のとおりです。

。
├── Dockerファイル
├── アプリ
│ └── メイン
└── スクリプト
  └──build.sh

以下はDockerfileファイルの内容を記述したものです。まずはコードを投稿します。

Golangから
メンテナー Qianyi WORKDIR /go/src/
コピー 。 。
エクスポーズ80
コマンド ["/bin/bash", "/go/src/script/build.sh"]

説明は次のとおりです。

FROMは統合元のイメージです。go プログラムはgolangイメージを公式に提供しており、これを直接使用できます。

MAINTAINERはメンテナンスの名称です。

WORKDIR作業ディレクトリ。

COPY 、すべてのローカル ファイルを作業ディレクトリにコピーするコピー コマンドです。

EXPOSE相手側が開発したポートです。デフォルトではポート80を開いていますが、実際の状況に応じて変更できます。

CMDパラメータ付きのコマンドを実行します。イメージの起動時にscript/build.shスクリプトが実行されるように、このように記述しました。このスクリプトには、go プログラムを起動するコマンドが含まれています。

内容をここに貼り付けます:

#!/usr/bin/env バッシュ
cd /go/src/app/ && ./main

この2行だけです。

5. 独自のイメージをコンパイルする

これはDocker知識に属するので、コマンドを貼り付けます。

docker build -t go-web を実行します。
  • このコマンドを実行すると、ローカルにgolangイメージがない場合、まず公式イメージライブラリにアクセスしてイメージをプルし、コンパイルします。あとは静かに待つだけです。
  • go-webパラメータは、コンパイルしたイメージの名前です。これは自由に変更でき、 go-web:v1のようにバージョン番号を追加することもできます。

上記の出力を見ると、コンパイルが成功し、ローカル イメージにgo-webという名前のイメージがあることがわかります。 docker imagesを使用してクエリを実行できます。

6. docker-compose.ymlファイルを書く

これが最後のステップです。先ほどコンパイルしたgo-webを使用して go プログラムを実行すると、次のようになります。

バージョン: '2'
ネットワーク:
 基本:
サービス:
 世界:
  コンテナ名: ワールド
  画像: go-web
  ポート:
   - 「8099:80」
  ボリューム:
   - ./app/go/world:/go/src/app:rw
  ネットワーク:
   - 基本

この時点で、オーケストレーション ファイルが書き込まれました。次に、 docker-composeを使用してオーケストレーション ファイルを起動します。起動コマンドは次のとおりです。

docker-compose -f docker-compose.yml アップ -d ワールド

次のプロンプトが出力された場合、起動は成功したことを意味します。

世界を作成中...完了

起動に成功したら、

ドッカーps

起動が成功したか確認してみましょう。

これで、 http://127.0.0.1:8099にアクセスして go プログラムにアクセスできるようになりました。

Docker イメージをベースにした Go プロジェクトをデプロイする手順については、これで終わりです。Docker イメージを使用した Go プロジェクトのデプロイの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • GoのDockerデプロイメント用の基本イメージ2つの実装

<<:  Linux で MySQL データベースのデータ ファイル パスを変更する手順

>>:  ネイティブ js が携帯電話のプルダウン更新を模倣

推薦する

MySQL で重複行を見つけて削除する方法

目次1. 重複行を見つける方法2. 重複行を削除する方法3. 複数の列で重複を見つける方法4. クエ...

ウェブページ HTML 特殊記号 HTML 特殊文字比較表

特殊記号名前付きエンティティ10進数エンコード特殊記号名前付きエンティティ10進数エンコードアルファ...

JavaScript のマクロタスクとマイクロタスクの詳細

目次1. マイクロタスクとは何ですか? 2. マクロタスクとは何ですか? 3. 事例3.1 結論4....

Linuxシステムにおける重要なサブディレクトリの問題について話す

/etc/fstabパーティション/ディスクを自動的にマウントし、マウントするパーティション/デバイ...

MySQL マスタースレーブレプリケーションの実装手順

目次mysql マスタースレーブレプリケーションMySQL マスタースレーブレプリケーション方式My...

sqlite3 から mysql に移行するときに起こりうる問題のコレクション

簡単な説明適切な読者: モバイル開発sqlite3 データを mysql に移行する場合、多くの構文...

HTML でナンバープレート番号と州の略語を入力するためのサンプルコード

原理としては、まずボタン付きの div を記述し、次に画面のサイズに応じて自動的に適応してキーボード...

Vue.jsはアイコンをクリックしてズームインし、

前回の記事では、Vue で画像の切り抜きや拡大・縮小、回転を実現する方法を紹介しました。今回は、アイ...

CSS3 transition-delay属性のデフォルト値が単位なしの0であり無効である問題を解決します

今日は、CSS3 の transition-delay 属性のデフォルト値 0 に単位がないのは無効...

最小限の展開で CentOS8 に OpenStack Ussuri をインストールする方法の詳細なチュートリアル

CentOS8 に最小限のデプロイメントで OpenStack Ussuri をインストールするため...

MySQL マスタースレーブレプリケーションスレッドの状態遷移に関する詳細な理解

序文MySQL マスター スレーブ レプリケーションの基本原理は、スレーブ データベースがマスター ...

Ajax responseText による JSON データの解析のケース スタディ

ajax 処理後にサーバーから返される responseText が JSON データであるという問...

MySQL フェイルオーバー ノート: アプリケーション対応設計の詳細な説明

1. はじめに周知のように、データベース ミドルウェアの読み取り/書き込み分離のアプリケーション シ...

Windows で削除された MySQL 8.0.17 のルート アカウントとパスワードを回復する方法

少し前にSQLの独学を終え、MySQL 8.0.17をダウンロードしました。インストールして設定した...

MySQLのconcat関連関数の詳細な説明

1. concat() 関数機能: 複数の文字列を 1 つの文字列に連結する構文: concat(s...