My Note

自己理解のためのブログ

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 [ユーザ名]/コンテナ名

次にやること

yhidetoshi.hatenablog.com

上記の記事でGKEクラスタを作り、本記事Docker Hubに登録したイメージをGKEでコンテナ起動させてみる。