본문 바로가기

Docker

Go Echo Framework Docker 이미지 만들기

Go Echo Framework Default Docker 이미지 만들기

기본 Echo 코드 작성

package main

import (
  "net/http"
  "github.com/labstack/echo"
  "github.com/labstack/echo/middleware"
)

func main() {
  // Echo instance
  e := echo.New()

  // Middleware
  e.Use(middleware.Logger())
  e.Use(middleware.Recover())

  // Routes
  e.GET("/", hello)

  // Start server
  e.Logger.Fatal(e.Start(":1323"))
}

// Handler
func hello(c echo.Context) error {
  return c.String(http.StatusOK, "Hello, World!")
}

Go app image 만들기

https://hub.docker.com/_/golang

Dockerfile 작성


    FROM golang:1.13-alpine

    ENV GO111MODULE=on

    WORKDIR /src

    COPY . /src

    RUN go build -o Go_Echo_Default

    EXPOSE 1323
    CMD ["./Go_Echo_Default"]

Docker build

KDS-2:main kimdaesung$ docker build -t go_echo:1.0.5 .
Sending build context to Docker daemon  17.41kB
Step 1/7 : FROM golang:1.13-alpine
1.13-alpine: Pulling from library/golang
c9b1b535fdd9: Already exists 
cbb0d8da1b30: Already exists 
d909eff28200: Already exists 
568dff2a5e9e: Already exists 
0aed2559ef8d: Already exists 
Digest: sha256:1ff752199f17b70e5f4dc2ad7f3e7843c456eb7e1407ed158ed8c237dbf1476a
Status: Downloaded newer image for golang:1.13-alpine
 ---> e1fd9820be16
Step 2/7 : ENV GO111MODULE=on
 ---> Running in ae9698c21f23
Removing intermediate container ae9698c21f23
 ---> a3d2dce9f3b5
Step 3/7 : WORKDIR /src
 ---> Running in 1a0621ba90d3
Removing intermediate container 1a0621ba90d3
 ---> 76effcd3a009
Step 4/7 : COPY . /src
 ---> bbbf2b9ac054
Step 5/7 : RUN go build -o Go_Echo_Default
 ---> Running in 62c5b976a374
go: downloading github.com/labstack/echo v3.3.10+incompatible
go: extracting github.com/labstack/echo v3.3.10+incompatible
go: downloading github.com/labstack/gommon v0.3.0
go: downloading github.com/dgrijalva/jwt-go v3.2.0+incompatible
go: downloading github.com/valyala/fasttemplate v1.1.0
go: downloading golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073
go: extracting github.com/labstack/gommon v0.3.0
go: extracting github.com/valyala/fasttemplate v1.1.0
go: downloading github.com/mattn/go-colorable v0.1.2
go: downloading github.com/mattn/go-isatty v0.0.9
go: downloading github.com/valyala/bytebufferpool v1.0.0
go: extracting github.com/dgrijalva/jwt-go v3.2.0+incompatible
go: extracting github.com/mattn/go-colorable v0.1.2
go: extracting github.com/valyala/bytebufferpool v1.0.0
go: extracting github.com/mattn/go-isatty v0.0.9
go: downloading golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a
go: extracting golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073
go: downloading golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3
go: extracting golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3
go: downloading golang.org/x/text v0.3.0
go: extracting golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a
go: extracting golang.org/x/text v0.3.0
go: finding github.com/labstack/echo v3.3.10+incompatible
go: finding github.com/labstack/gommon v0.3.0
go: finding github.com/dgrijalva/jwt-go v3.2.0+incompatible
go: finding github.com/valyala/fasttemplate v1.1.0
go: finding github.com/mattn/go-colorable v0.1.2
go: finding github.com/mattn/go-isatty v0.0.9
go: finding github.com/valyala/bytebufferpool v1.0.0
go: finding golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a
go: finding golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073
go: finding golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3
go: finding golang.org/x/text v0.3.0
Removing intermediate container 62c5b976a374
 ---> e709005ab453
Step 6/7 : EXPOSE 1323
 ---> Running in cb7ff805286c
Removing intermediate container cb7ff805286c
 ---> d2f951647398
Step 7/7 : CMD ["./Go_Echo_Default"]
 ---> Running in 00d8904a6c43
Removing intermediate container 00d8904a6c43
 ---> 04ab29c65b20
Successfully built 04ab29c65b20
Successfully tagged go_echo:1.0.5

Docker images 검증

KDS-2:main kimdaesung$ docker image inspect go_echo:1.0.5
[
    {
        "Id": "sha256:04ab29c65b202863c99c3598238c24d6110aceed26b16a2ea1ced039eff0b2ff",
        "RepoTags": [
            "go_echo:1.0.5"
        ],
        "RepoDigests": [],
        "Parent": "sha256:d2f95164739848f6494d1c2c0e8d9db3f5be46c5661c0f3d453a12cbf4740b23",
        "Comment": "",
        "Created": "2020-03-12T10:51:19.0701854Z",
        "Container": "00d8904a6c43e95399fa7c06807c8b96f423fe3e482ef6c82a93883b5e07547e",
        "ContainerConfig": {
            "Hostname": "00d8904a6c43",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "1323/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOLANG_VERSION=1.13.8",
                "GOPATH=/go",
                "GO111MODULE=on"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"./Go_Echo_Default\"]"
            ],
            "Image": "sha256:d2f95164739848f6494d1c2c0e8d9db3f5be46c5661c0f3d453a12cbf4740b23",
            "Volumes": null,
            "WorkingDir": "/src",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "19.03.5",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "1323/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOLANG_VERSION=1.13.8",
                "GOPATH=/go",
                "GO111MODULE=on"
            ],
            "Cmd": [
                "./Go_Echo_Default"
            ],
            "Image": "sha256:d2f95164739848f6494d1c2c0e8d9db3f5be46c5661c0f3d453a12cbf4740b23",
            "Volumes": null,
            "WorkingDir": "/src",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 432228379,
        "VirtualSize": 432228379,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/0fa933fed3b8935fc1131211ce004d876085b5fc9bbe65b2a704ef3994582c09/diff:/var/lib/docker/overlay2/649e4600f0e8b4a93703b61ffce7207694ab56baf33fe0f4eec5218cfe7df528/diff:/var/lib/docker/overlay2/c7c8c0f24b0b247012658ef1a6ad6eddab359a0520ee6a578962ad55f7ef7936/diff:/var/lib/docker/overlay2/02273984c97cefcda697f4c2b28610944dbeaae406bae04f24e9cd5f18a31c94/diff:/var/lib/docker/overlay2/ffd90167bef2879e8c01e69b2339e060e73305eec76fe7710b3c3a2305dc2da0/diff:/var/lib/docker/overlay2/ed89157d7b163534a8d1ab0d7a621e33ed817e3c1475b85a9da28cd10b3f6d67/diff:/var/lib/docker/overlay2/d52d38a243cb2043da7702148de6a34f456cc9ef42845566b3ec03fba6ed8333/diff",
                "MergedDir": "/var/lib/docker/overlay2/8e2886e14af5a391381e3be0789240eb27ec8d6d66d010ef92f837cfee4dd5d3/merged",
                "UpperDir": "/var/lib/docker/overlay2/8e2886e14af5a391381e3be0789240eb27ec8d6d66d010ef92f837cfee4dd5d3/diff",
                "WorkDir": "/var/lib/docker/overlay2/8e2886e14af5a391381e3be0789240eb27ec8d6d66d010ef92f837cfee4dd5d3/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:5216338b40a7b96416b8b9858974bbe4acc3096ee60acbc4dfb1ee02aecceb10",
                "sha256:45182158f5da0392151d293ad2f09a1ed006db7d5d39f9873ae09d6ec3862a0f",
                "sha256:12c4e92b2d4850b87124fb9692ae9be902ac941ef59c71ccd77a1c9d417be9f4",
                "sha256:5479b2ea460ec0df1ba2524b1f46eb166c3b549ccdf3f15c34b135fdf7c7599e",
                "sha256:2ce78b78017477dcd298e31e979ffde9052898e523eec2a3f244e500a58cce8b",
                "sha256:ebb5616cb8e486ad03d9f3beb9582725224a1ae28cbfb75d2d25929ed5fe451d",
                "sha256:6c6ec4cf9bd706d2cb36285d58d48cc6a6fd60a64a77527a138ea06b3ebfadfa",
                "sha256:746a0c2c51422d53049100ef6b87c6bda17974241e02eb3df56599f5b2f4e841"
            ]
        },
        "Metadata": {
            "LastTagTime": "2020-03-12T10:51:19.1046518Z"
        }
    }
]

Image 실행

KDS-2:main kimdaesung$ docker container run -t -p 1323:1323 go_echo:1.0.5

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v3.3.10-dev
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on [::]:1323

localhost:1323 확인

Docker 이미지 삭제 하는 방법 [-f 강제]

docker rmi -f [이미지 id]

ex)

KDS-2:main kimdaesung$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
go_echo             1.0                 12969cf8aa9e        9 minutes ago       371MB
golang              1.13-alpine         e1fd9820be16        3 weeks ago         359MB
golang              1.12.1-stretch      213fe73a3852        11 months ago       774MB
golang              1.12.1-alpine       c0e5aac9423b        12 months ago       350MB
alpine              3.4                 b7c5ffe56db7        13 months ago       4.82MB
KDS-2:main kimdaesung$ docker rmi -f b7c5ffe56db7
Untagged: alpine:3.4
Untagged: alpine@sha256:b733d4a32c4da6a00a84df2ca32791bb03df95400243648d8c539e7b4cce329c
Deleted: sha256:b7c5ffe56db790f91296bcebc5158280933712ee2fc8e6dc7d6c96dbb1632431
Deleted: sha256:23f7bd114e4a0ea39a34e1bd50c2b71fb7d60f89139ca86ee746efb0bb49b4b8

'Docker' 카테고리의 다른 글

Docker Hub에 업로드 하기  (0) 2020.03.12
Ubuntu/CentOS Docker 설치하기  (0) 2020.03.11