GoプログラムでDockerコンテナーを作成して実行するようにDockerfileを構成する

Goでプログラム(マイクロサービス)を作成し、Dockerコンテナーにデプロイしたいですか?

この短い記事では、初心者向けにこのプロセスをできるだけコンパクトで実用的なものにしようとしています。



Dockerについて簡単に言うと、仮想オペレーティングシステムとその中にあるアプリケーションでコンテナーを実行できます。 また、疲れたときは、このコンテナを完全に削除してください。アプリケーションがどこかにシステムを密かに乱雑にしていることを気にしないでください。

ここでは、実際には、初心者向けにdockerコンテナを使用することのすべての利点:)



この記事では、まず、アセンブリの段階で、イメージ内でプログラムをコンパイルする方法を検討します。 これは初心者にとって最も明白な方法です。 次に、イメージの作成と、プリコンパイルされたプログラムファイルからのコンテナの起動が考慮されます。


Dockerの機能についてさらに少し説明します。 コンテナのイメージを保存します。これに基づいて、これらのコンテナのインスタンスを必要な数だけ実行し、ネットワーク経由でルーティングするように構成できます(着信ポートのマッピングなど)。 画像は、dockerリポジトリで公開されている他の画像(画像の継承があると言うことができます)に基づいて収集されます。 Goプログラムの場合、golang:latest(debianベース)およびgolang:alpine(alpine linuxベース)が最適です。 他の画像名はこちらにあります: hub.docker.com / _ / golang



Dockerイメージ内のソースからプログラムを構築する



たとえば、主軸がウィンドウまたはmacosで、Linux用のコンテナを構築する場合に、このオプションを使用します。 マシン上の他のプラットフォーム用にgoコンパイラを再構築しないために、ターゲットDockerイメージのソースをコンパイルします。

イメージをアセンブルするには、プログラムのソースフォルダーに、拡張子なしで、次の内容のDockerfileテキストファイルを作成する必要があります。



#   FROM golang:latest # ,     RUN mkdir -p /go/src/app #   WORKDIR /go/src/app #        Docker         COPY . /go/src/app #    ,    docker RUN go-wrapper download #      RUN go-wrapper install #      ,        #-web -  ,     ,       #go-wrapper  set -x  ,    stderr         CMD ["go-wrapper", "run", "-web"] #      EXPOSE 8000
      
      





Go向けのこのファイルの機能は、golangベースイメージに特別なgo-wrapperスクリプトが存在することです。これにより、コンパイルが簡単になり、パスやファイル名について考える必要がなくなります。

このファイルとソースがあるフォルダーで、次のコマンドを実行します。

 docker build -t my-golang-app .
      
      





最後のポイントは、Dockerファイルがある現在のディレクトリです。指定することを忘れないでください。

my-golang-app-これは、プログラムがコンパイルされるイメージの名前になります。

このコマンドを実行した後、コマンドによって正常に収集されたイメージの存在を確認できます

 docker images docker ps -a
      
      





次のように、組み立てられたイメージに基づいてコンテナを作成および実行できます。

 docker run -d --rm --name my-running-app my-golang-app
      
      





my-running-app-これは、my-golang-appイメージに基づいて作成されるコンテナーの名前になります。

ここでキーを使用することもできます。

-d | --detach - id . ( == false)

-i | --interactive - ( STDIN , )

-t | --tty - , -i

-p | --publish=[] - . : ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort

-e | --env=[] - .

-v | --volume=[] -






Docker起動キーとDockerfileの構成の詳細については、 こちらこちらをご覧ください。



Dockerコンテナでコンパイルされたプログラムバイナリを実行する



コンテナに配置する前に、ファイルを目的のイメージとアーキテクチャ用に正しくコンパイルする必要があることに注意してください。



バイナリを使用してコンテナを作成して実行します。

 #!/bin/bash #  CGO    alpine docker run --rm -v "$PWD":/go/src/myapp -w /go/src/myapp golang:alpine /bin/sh -c "apk add --update gcc musl-dev; go build -ldflags \"-s -w\" -a -o myapp_bin_name"
      
      





別の方法は、コンテナにパックすることです:

 # -*- Dockerfile -*- FROM alpine COPY myapp_bin_name /app/ RUN apk add --update tzdata openssl musl-dev ca-certificates && \ rm -rf /var/cache/apk/* && \ cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime && \ echo "Europe/Moscow" > /etc/timezone && \ chmod +x /app/myapp_bin_name && \ mkdir -p /data WORKDIR /app VOLUME /data CMD /app/myapp_bin_name EXPOSE 8085
      
      





画像を作成します。

 docker build -t mymegapp .
      
      





以下を開始します。

 docker run -d --rm --name my-running-app my-golang-app
      
      






All Articles