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을 실행할 수 있습니다.
go build -o app cmd/main.go
라고 terminal에 입력한다면?project > cmd > main.go 가 존재할 경우
go build -o report cmd/main.go
를 합니다 ./report
를 project하위 경로 즉, cmd와 동일한 위치에서 실행합니다.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에 실행파일을 실행시키는 명령어를 입력합니다.
dockerfile build
https://docs.docker.com/engine/reference/commandline/build/ 참고
dockerfile와 동일한 위치에서 t 옵션을 사용해 이미지를 만든다. docker build -t [imagename]:[version] .
을 적용한다.
잘 생성 되었는지 확인하려면 docker images 명령을 활용해 image목록을 체크할 수 있다.
docker-compose.yaml으로 관리
https://docs.docker.com/engine/reference/commandline/compose/ 참고
우리의 webapp을 service 항목에 등록해야하는데 그 부분만 보면 다음과 같다.
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을 띄울 수 있다.