Docker イメージに基づいて Go プロジェクトをデプロイする (詳細な例)

WBOY
リリース: 2022-06-08 20:52:32
転載
4846 人が閲覧しました

この記事では、GoLang Web プログラムの作成や Linux でのパッケージのコンパイルに関する問題など、Docker イメージに基づいた Go プロジェクトのデプロイに関する関連知識を提供します。

Docker イメージに基づいて Go プロジェクトをデプロイする (詳細な例)

#依存関係の知識

    Go クロスコンパイルの基本
  • Docker の基本
  • Dockerfile カスタム イメージの基本
  • docker-compose オーケストレーション ファイル作成の基本
もちろん、まったく知らない場合でも、この手順に従ってデプロイメントを完了できます。途中で小さな問題が発生した場合は、解決方法がわかりません。もちろん、メッセージを残すこともできます。

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

1. 依存環境

    Docker
2. GoLang Web プログラムの作成

ここに書きます最も単純な hello world プログラムでは、リスニング ポートはポート 80 です。

次の内容を含む新しい
main.go ファイルを作成します:

package mainimport (
    "fmt"
    "log"
    "net/http")func sayHello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "hello world")}func main() {
    http.HandleFunc("/", sayHello)//注册URI路径与相应的处理函数
    log.Println("【默认项目】服务启动成功 监听端口 80")
    er := http.ListenAndServe("0.0.0.0:80", nil)
    if er != nil {
        log.Fatal("ListenAndServe: ", er)
    }}
ログイン後にコピー

3. Linux でプログラム パッケージにコンパイルします

Mac で開発しましたgo クロスコンパイルを使用する必要があります。クロスコンパイルに慣れていない場合は、ドキュメントを確認するか、以下のコマンドを直接コピーしてコンパイルできます。


Docker で実行したいと考えています。基本的な golang イメージが実行されているため、i386 プロセッサと互換性のあるプログラムにコンパイルする必要があります。 。

sudo env GOOS=linux GOARCH=386 go build main.go
ログイン後にコピー

このコンパイルが完了すると、ローカルに

main プログラムがもう 1 つ作成されます。当面はそのままにしておきます。

4.

Dockerfile を使用して Go プログラムのイメージをカスタマイズします

新しいフォルダーを作成し、その中に新しい

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

.
├── Dockerfile
├── app
│   └── main
└── script
    └── build.sh
ログイン後にコピー

次は、

Dockerfile

ファイルの内容です。最初に内容をコード化します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">FROM golang MAINTAINER 青羽 WORKDIR /go/src/COPY . .EXPOSE 80CMD [&quot;/bin/bash&quot;, &quot;/go/src/script/build.sh&quot;]</pre><div class="contentsignin">ログイン後にコピー</div></div>ここに説明があります:

    FROM
  • は統合元のイメージです。私たちの go プログラムは、直接使用できる golang のようなイメージを公式に提供しています。
  • MAINTAINER
  • はこの名前を維持します。
  • WORKDIR
  • 作業ディレクトリ。
  • COPY
  • これは、すべてのローカル ファイルを作業ディレクトリにコピーするコピー コマンドです。
  • EXPOSE
  • これは相手が開発したポートです。デフォルトではポート 80 を開きます。これは実際の状況に応じて変更できます。
  • CMD
  • でパラメータを実行する このように書いたコマンドは、イメージの開始時にスクリプト script/build.sh を実行するためのもので、このスクリプトには go プログラムを開始するコマンドが含まれています。 ここにコンテンツを貼り付けます:
    #!/usr/bin/env bash
    cd /go/src/app/ && ./main
    ログイン後にコピー
  • この 2 行だけです。

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

これは

Docker

の知識に属するため、コマンドを貼り付けます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">docker build -t go-web .</pre><div class="contentsignin">ログイン後にコピー</div></div>

このコマンドが実行されます。
    golang
  • イメージがローカルで利用できない場合は、まず公式のイメージ ライブラリに移動してイメージをプルし、次にコンパイルします。ただ静かに彼を待ってください。
  • go-web
  • このパラメータは、最後にコンパイルされたイメージの名前です。任意に変更することも、go-web:v1 のようにバージョン番号を追加することもできます。

Docker イメージに基づいて Go プロジェクトをデプロイする (詳細な例)上記の出力が表示されたら、コンパイルが成功し、ローカルに

go-web## という名前のファイルがあることを意味します。画像 #ミラー。

docker イメージを使用して次のクエリを実行できます。

6. Docker イメージに基づいて Go プロジェクトをデプロイする (詳細な例)docker-compose.yml

ファイル

## を作成します。 # to これは最後のステップです。go プログラムを実行するためにコンパイルしたばかりの go-web を使用する場合:

version: &#39;2&#39;networks:
  basic:services:
  world:
    container_name: world
    image: go-web
    ports:
      - "8099:80"
    volumes:
      - ./app/go/world:/go/src/app:rw
    networks:
      - basic
ログイン後にコピー

この時点で、オーケストレーション ファイルが作成されました。必要なだけ オーケストレーション ファイルを開始するには docker-compose を使用する必要があります。起動コマンドは次のとおりです:

docker-compose -f docker-compose.yml up -d world
ログイン後にコピー

以下のプロンプトが出力されれば、起動は成功です。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">Creating world ... done</pre><div class="contentsignin">ログイン後にコピー</div></div>起動が成功したら、

docker ps
ログイン後にコピー

を使用して起動が成功したかどうかを確認できます。

次に、

http://127.0.0.1:8099

にアクセスして、Go プログラムにアクセスします。

推奨される学習: 「docker ビデオ チュートリアル

以上がDocker イメージに基づいて Go プロジェクトをデプロイする (詳細な例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート