[go] docker compose file을 활용한 go app image 띄우기

sujin·2022년 10월 18일
0

Golang

목록 보기
3/3

go app build

  • docker-compose를 위한 dockerfile을 만들기 전에 go build 명령어를 활용해 build를 해봅시다!

    go build [실행파일] 을 통해서 실행명령 go run [실행파일]을 실행파일로 만들어줍니다. 즉, 실행파일을 입력하면 컴퓨터가 코드를 이해할 수 있도록 binary로 적혀있는 실행파일을 해석할 수 있습니다.

    go build cmd/main.go 를 terminal에 입력한다면?
    우리는 go run cmd/main.go를 통해서 실행하던 go app을 main라는 실행파일을 터미널에 입력함으로써 컴퓨터가 binary build file을 해석해서 run 시킨 명령어와 동일하게 적용되어 app이 실행됩니다.

    실행명령 파일이 프로젝트 경로에 생성되는 것을 확인할 수 있는데 실행파일 명령을 실행파일이 생성된 위치에서 ./실행파일이름 을 터미널에 입력하면 build file을 실행할 수 있습니다.

    • -o 옵션
      flag로 o option을 사용할 수 있고 output으로 나갈 binary build file의 이름을 지어줄 수 있습니다.
      go build -o app cmd/main.go 라고 terminal에 입력한다면?
      우리는 실행명령 파일이 프로젝트 경로에 -o 옵션을 통해서 설정한 이름으로 지정된다는 것을 알 수 있습니다. 따라서 우리는 프로젝트 경로에 우리가 main이라는 이름을 가진 것이 아니라 app이라는 이름을 가진 실행파일을 확인 할 수 있습니다.
  • project > cmd > main.go 가 존재할 경우

  1. project 하위 경로에서 go build -o report cmd/main.go 를 합니다
  2. 아래와 같이 report라는 실행명령 파일이 생성된 것을 확인할 수 있습니다. 이때 -o option을 사용하지 않을 경우, 위와같이 main이라는 이름으로 생성됩니다.
  3. 이제는 terminal에서 실행명령 파일을 사용하면 됩니다.
    ./report 를 project하위 경로 즉, cmd와 동일한 위치에서 실행합니다.

dockerfile로 image만들기

  • 우선 프로세스는 다음과 같습니다.
  1. dockerfile에서 위에서 go app을 build했던 단계를 적용시킵니다.
  2. dockerfile을 build합니다(docker image를 만듦).
  3. docker image를 docker-compose 파일을 통해서 실행시키며 우리가 만든 app을(위의 예제에서는 report app) 실행시킵니다.
  • dockerfile 만들기
    dockerfile 명령어를 활용하여 dockerfile을 생성할 수 있습니다. 구체적인 설명은 생략하겠습니다
FROM  golang:1.19

WORKDIR [container경로]

COPY [local경로] [container경로] # local 경로의 모든 파일을 WORKDIR/container경로로 복사합니다

RUN go mod download && go mod verify 

RUN go build -o [실행파일이름] 실행파일

EXPOSE [portnumber]

CMD ["./실행파일이름"]

여기서 중요한 것은 dockerfile에 binary file로 build하는 코드를 넣어 dockerfile을 build해서 image로 만들었을 때 image를 띄우면 build한 실행파일을 실행한다는 것입니다.
golang:1.19 버전의 image를 base image로 사용하고[FROM] /report를 container path로 만들고 [WORKDIR] 이후의 명령에 대한 코드들을 하위 경로에서 관리합니다. 다음으로 코드를 copy해 go mod를 다운받고 verify한지 검사한후에 build합니다. 이후에 container 포트로 사용할 포트number를 명시합니다. 다음으로 command에 실행파일을 실행시키는 명령어를 입력합니다.


services:
	[webapp이름]:
    	container_name: [container이름]
        image: [위에서 만든 imagename]:[image version]
        user: root
        ports:
        	- [local port]:[container port]
        command:
        	- "./[실행파일]" # docker file에서 적었으니 다시 적지 않아도 됨
        networks:
        	- [network]
        restart: always

다음과 같이 docker-compose.yaml의 service로 하나의 앱을 등록한다. 이후 docker compose up 을 사용하여 image를 사용해서 container만들어 webapp을 띄울 수 있다.

0개의 댓글