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 が携帯電話のプルダウン更新を模倣

推薦する

Linux ディレクトリ切り替え実装コード例

ファイルの切り替えは Linux でよく行われる操作です。Linux を初めて学ぶときに最初に触れる...

CSS スタイルの優先順位とカスケード順序に関する議論

一般的に: [重要なフラグ1つ] > [特別なフラグ4つ] > 宣言順!importan...

npmとcnpmを混在させる際の落とし穴の詳細な説明

目次原因理由NPM の紹介: CNPM の紹介:より良い方法方法の改善npm と cnpm を一緒に...

CSS は Alibaba ベクター ライブラリを使用して、対応する位置に見栄えの良いアイコン効果をすばやく追加します (サンプル コード)

Alibaba ベクターアイコンライブラリにアクセスAlibaba ベクターアイコンライブラリ好き...

OpenSSL は双方向認証のチュートリアルを実装します (サーバーとクライアントのコード付き)

1. 背景1.1 問題点最近の製品テスト レポートでは、PKI ベースの認証方法の使用が推奨されて...

Docker で複数のアプリケーション サイトをプロキシするために Nginx を使用する方法

序文エージェントの役割は何ですか? - 複数のドメイン名が同じサーバーに解決される- 1つのサーバー...

Vue+Openlayer で select を使用して要素を選択する実装コード

効果画像: 実装コード: <テンプレート> <div id="map&q...

TypeScript インターフェースの紹介

目次1. インターフェース定義2. 属性2.1 オプション属性2.2 読み取り専用プロパティ3. ク...

MySQL での Join の使用に関する詳細な説明

前の章では、1 つのテーブルからデータを読み取る方法を学習しました。これは比較的簡単ですが、実際のア...

Win10 VM 仮想マシンに Mac OS10.14 を完璧にインストールする (グラフィック チュートリアル)

最近、Apple の記者会見を見てとても興奮したので、Mac システムを体験して Apple の素晴...

Vue 開発ガイドの重要な知識の要約

目次概要0. JavaScriptとWeb開発の基礎1. Vueの基本概念Vue コア機能コンポーネ...

MySQL の一般的な日付比較および計算関数

MySql での時間比較の実装unix_timestamp() unix_timestamp 関数は...

MySQL データベースの必須条件クエリ ステートメント

目次1. 基本的な文法2. 条件式によるフィルタリング3. 論理式によるフィルタリング4. あいまい...

JavaScript でフロントエンドのカウントダウン効果を実装する

この記事では、フロントエンドのカウントダウン効果を実現するためのJavaScriptの具体的なコード...

Vue のトランジション効果とアニメーショントランジションの使用例の詳細な説明

目次遷移フック関数カスタム遷移クラス名遷移グループの使用まとめまずは例を見てみましょうコードは次のと...