GKEで実行するコンテナ ( Nginx-Proxy + Go ) を作成する
GKEで動かすコンテナ環境を用意する
■ Nginx-Proxy + Golang のコンテナを作成する
■ ローカルディレクトリ構成
tree . . ├── docker-compose.yml ├── golang │ ├── Dockerfile │ └── main.go ├── log │ └── nginx │ ├── access.log │ └── error.log └── nginx ├── Dockerfile └── default.conf
■ docker-compose.yml
version: "3" services: nginx: environment: TZ: Asia/Tokyo build: ./nginx links: - echo hostname: nginx restart: always ports: - 8000:80 echo: build: ./golang ports: - 8080:8080 restart: always
■ ./nginx/Dockerfile
FROM nginx COPY default.conf /etc/nginx/conf.d/default.conf
■ nginx/config/default.conf
upstream backend-test { server localhost:8080 max_fails=3 fail_timeout=10s; } server { listen 80; server_name _; keepalive_timeout 300; client_max_body_size 50M; proxy_read_timeout 600; proxy_pass_header Server; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #server_tokens off; location / { proxy_pass http://backend-test; break; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
■ golang/Dockerfile
FROM golang:1.9 RUN mkdir /echo COPY main.go /echo CMD ["go", "run", "/echo/main.go"]
■ golang/main.go
package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { log.Println("received request") fmt.Fprintf(w, "Hello Docker!!") }) log.Println("start server") server := &http.Server{Addr: ":8080"} if err := server.ListenAndServe(); err != nil { log.Println(err) } }
コンテナを作成して起動する
■ $ docker-compose up -d
Creating network "docker_golang_default" with the default driver Creating docker_golang_echo_1 ... done Creating docker_golang_nginx_1 ... done
■ $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c4e89f6cfd40 docker_golang_nginx "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:8000->80/tcp docker_golang_nginx_1 54ef20ac0d98 docker_golang_echo "go run /echo/main.go" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp docker_golang_echo_1
■ $ curl localhost:8000
Hello Docker!!
DockerHubに登録する
$ docker login
$ docker tag [コンテナID] [ユーザ名]/コンテナ名
$ docker push [ユーザ名]/コンテナ名
次にやること
上記の記事でGKEクラスタを作り、本記事Docker Hubに登録したイメージをGKEでコンテナ起動させてみる。