ホームページ >運用・保守 >Docker >Docker イメージに基づいて Go プロジェクトをデプロイする (詳細な例)

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

WBOY
WBOY転載
2022-02-10 17:54:044871ブラウズ

この記事では、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

ファイルの内容です。最初に内容をコード化します: <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>ここに説明があります:

    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

の知識に属するため、コマンドを貼り付けます。 <pre class="brush:sql;toolbar:false;">docker build -t go-web .</pre>

このコマンドが実行されます。
    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

以下のプロンプトが出力されれば、起動は成功です。 <pre class="brush:sql;toolbar:false;">Creating world ... done</pre>起動が成功したら、

docker ps

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

次に、

http://127.0.0.1:8099

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

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

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

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。