dockerでgoを導入する簡単なアプリケーション
1.まずgo言語を用いて基本httpサービスを実現する
echo標準ライブラリを使用して8080ポート出力helloworldのサービスを実現します.echo mygohttpをインストールします.go:
最後にコンパイルは問題なく実行できます.
2.dockerfile作成
dockerfileで作成したソースミラーはhub.docker.comはgolangが公式に提供しているソースミラーを見つけ、golang:latestを採用しています.
次のdockerfileを使用すると、2つのdockerfileが使用できることがわかります.
注意dockerfileファイル名はDockerfileで、そのファイルはエンジニアリングディレクトリの下にある必要があります.
3.dockerfileを実行し、dockerミラーを生成する
作成が完了すると、作成したミラーをdocker imagesで表示できます.
4.docker mygohttpを実行
これでdockerコンテナが起動します.私たちはhttp://localhost:9090/このサービスにアクセスします.出力:これでサービスが開通しました.これは、コンテナ内のログを次のコマンドで表示することもできます.
5.mygohttpサービスとミラーの停止と削除
6.goエンジニアリング起動時に変数パラメータを持ち込む方法
私たちはgoプロジェクトを実行するとき、動的変数を持ち込んで実行する必要があります.では、どうすればいいですか.私たちがシステム変数を採用する方法go言語に対応するライブラリはsyscallです.Getenvの修正コードは次のとおりです.
dockerfileは修正する必要がなく、dockerfileを再作成します.docker build -t hellomygohttp .
7.システムパラメータ付きgoエンジニアリング容器の運転
dockerランタイムバンド-eは、システム構成パラメータを追加できます.
そのうち:2019/10/28 09:26:23 Getenv abc true 2019/10/28 09:26:23 starting echoがログ出力
echo標準ライブラリを使用して8080ポート出力helloworldのサービスを実現します.echo mygohttpをインストールします.go:
import (
"github.com/labstack/echo"
"log"
"net/http"
)
func main() {
e := echo.New()
e.GET("/", handlerindex)
log.Println("starting echo")
err := e.Start(":8080")
if err != nil {
log.Fatal("echo", err)
}
}
func handlerindex(c echo.Context) error {
log.Println("hello world handlerindex")
return c.JSON(http.StatusOK, `{"hello":"world"}`)
}
最後にコンパイルは問題なく実行できます.
wang@wang:~/Desktop/mygohttp$ go build mygohttp.go
wang@wang:~/Desktop/mygohttp$ ls
Dockerfile mygohttp mygohttp.go package
wang@wang:~/Desktop/mygohttp$ ./mygohttp
2.dockerfile作成
dockerfileで作成したソースミラーはhub.docker.comはgolangが公式に提供しているソースミラーを見つけ、golang:latestを採用しています.
#
FROM golang:latest
#
MAINTAINER Vong "[email protected]"
#
WORKDIR $GOPATH/src/github.com/mygohttp
# go docker
ADD . $GOPATH/src/github.com/mygohttp
#go get copy , echo
COPY package/package_golang_org $GOPATH/src
# echo
RUN go get -u github.com/labstack/echo
#go
RUN go build .
#
EXPOSE 6064
# docker
ENTRYPOINT ["./mygohttp"]
次のdockerfileを使用すると、2つのdockerfileが使用できることがわかります.
#
FROM golang:latest
#
MAINTAINER Vong "[email protected]"
#WORKDIR $GOPATH/src/mygohttp
#workdir
# go docker
COPY mygohttp.go $GOPATH/src/mygohttp/
# mygohttp /, WORKDIR :
#Step 6/9 : WORKDIR $GOPATH/src/mygohttp
#Cannot mkdir: /go/src/mygohttp is not a directory
#
COPY package/package_golang_org $GOPATH/src
# echo
RUN go get -u github.com/labstack/echo
#go
WORKDIR $GOPATH/src/mygohttp
RUN go build .
#
EXPOSE 6064
# docker
ENTRYPOINT ["./mygohttp"]
wang@wang:~/Desktop/mygohttp$ tree -L 5
.
├── Dockerfile
├── mygohttp
├── mygohttp.go
└── package
└── package_golang_org
└── golang.org
└── x
├── crypto
├── net
├── sys
└── text
8 directories, 3 files
注意dockerfileファイル名はDockerfileで、そのファイルはエンジニアリングディレクトリの下にある必要があります.
3.dockerfileを実行し、dockerミラーを生成する
wang@wang:~/Desktop/mygohttp$ docker build -t hellomygohttp .
Sending build context to Docker daemon 93.11MB
Step 1/9 : FROM golang:latest
---> dc7582e06f8e
Step 2/9 : MAINTAINER Vong "[email protected]"
---> Using cache
---> eac484e76a9b
Step 3/9 : WORKDIR $GOPATH/src/github.com/mygohttp
---> Using cache
---> 3d13786d3164
Step 4/9 : ADD . $GOPATH/src/github.com/mygohttp
---> d5278249d1fc
Step 5/9 : COPY package/package_golang_org $GOPATH/src
---> 0fcd383c661b
Step 6/9 : RUN go get -u github.com/labstack/echo
---> Running in 5f628ca631b5
Removing intermediate container 5f628ca631b5
---> 52662b89355a
Step 7/9 : RUN go build .
---> Running in 8b5bf90f4d2c
Removing intermediate container 8b5bf90f4d2c
---> 6ee33dd9a5b1
Step 8/9 : EXPOSE 6064
---> Running in 59855e66a139
Removing intermediate container 59855e66a139
---> 9de288b63b60
Step 9/9 : ENTRYPOINT ["./mygohttp"]
---> Running in e9e544202997
Removing intermediate container e9e544202997
---> 81d7fc0aaf8f
Successfully built 81d7fc0aaf8f
Successfully tagged hellomygohttp:latest
作成が完了すると、作成したミラーをdocker imagesで表示できます.
wang@wang:~/go/src/github.com$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hellomygohttp latest 81d7fc0aaf8f 2 minutes ago 1.01GB
4.docker mygohttpを実行
wang@wang:~/1.0/scripts$ docker run --name mygohttp -p 9090:8080 -d hellomygohttp
9ff0d40f234dab6d0baf1274f11c0639f3cb099d3837c0d70ea8c9076c6706c3
これでdockerコンテナが起動します.私たちはhttp://localhost:9090/このサービスにアクセスします.出力:これでサービスが開通しました.これは、コンテナ内のログを次のコマンドで表示することもできます.
wang@wang:~/Desktop/mygohttp/package$ docker logs -f mygohttp
____ __
/ __/___/ / ___
/ _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.1.11
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
O\
⇨ http server started on [::]:8080
2019/10/28 08:57:39 starting echo
2019/10/28 09:13:19 hello world handlerindex
5.mygohttpサービスとミラーの停止と削除
#
docker stop mygohttp
# container
docker rm mygohttp
# container
docker rmi mygohttp
6.goエンジニアリング起動時に変数パラメータを持ち込む方法
私たちはgoプロジェクトを実行するとき、動的変数を持ち込んで実行する必要があります.では、どうすればいいですか.私たちがシステム変数を採用する方法go言語に対応するライブラリはsyscallです.Getenvの修正コードは次のとおりです.
package main
import (
"github.com/labstack/echo"
"log"
"net/http"
"syscall"
)
func main() {
v, ok := syscall.Getenv("TASKID")
log.Println("Getenv", v, ok)
e := echo.New()
e.GET("/", handlerindex)
log.Println("starting echo")
err := e.Start(":8080")
if err != nil {
log.Fatal("echo", err)
}
}
func handlerindex(c echo.Context) error {
log.Println("hello world handlerindex")
return c.JSON(http.StatusOK, `{"hello":"world"}`)
}
dockerfileは修正する必要がなく、dockerfileを再作成します.docker build -t hellomygohttp .
7.システムパラメータ付きgoエンジニアリング容器の運転
dockerランタイムバンド-eは、システム構成パラメータを追加できます.
wang@wang:~/Desktop/mygohttp$ docker run --name mygohttp2 -e TASKID=abc hellomygohttp
____ __
/ __/___/ / ___
/ _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.1.11
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
O\
2019/10/28 09:26:23 Getenv abc true
2019/10/28 09:26:23 starting echo
⇨ http server started on [::]:8080
そのうち:2019/10/28 09:26:23 Getenv abc true 2019/10/28 09:26:23 starting echoがログ出力