도커로 배포해보기
프로젝트를 배포할 때 주로 사용하는 도커와 도커 컴퍼즈에 대해 배워봅니다.
도커를 사용하게 된 계기
저는 항상 서버 배포를 할 때 리눅스 커널에 들어가 모든 개발 환경을 세팅하여 배포를 합니다
이 과정이 어렵지는 않지만 계속 하다보면 싫증이 나고 시간을 많이 잡아먹습니다
제가 도커를 사용하게 된 계기는 바로 이것입니다
도커는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다
OS에 구애받지 않을 수 있어 테스트를 마친 후 리눅스에서 실행만 하면 끝입니다
도커 사용 예시
프로젝트 상위폴더에 Dockerfile을 만든 후 문법에 맞게 작성합니다.
# dockerfile
FROM golang:1.14.2
LABEL Author="jjmin321@naver.com"
COPY . src
WORKDIR /go/src
CMD [ "go", "run", "main.go"]
EXPOSE 8080
Dockerfile을 작성했으면 make build로 randomchatting_server라는 이름으로 이미지를 생성할 수 있습니다
# makefile
# 이 글에서 사용할 도커 명령어는 총 4가지이므로 makefile을 통해 사용하겠습니다.
build:
@docker build --tag randomchatting_server .
run:
@docker run -i -t -p 8080:8080/tcp --name server randomchatting_server
make run으로 randomchatting_server 이미지를 server라는 이름의 컨테이너로 실행합니다
Dockerfile 코드 해석
- FROM golang:1.14.2
- go 1.14.2 버전을 사용
- LABEL Author=’jjmin321@naver.com’
- jjmin321@naver.com이 작성
- COPY . src
- 프로젝트 전체파일을 컨테이너 내 go/src 폴더에 추가
- WORKDIR /go/src
- 컨테이너 내에서 /go/src로 이동
- CMD [ “go”, “run”, “main.go”]
- go run main.go로 서버를 실행
- EXPOSE 8080
- OS의 8080포트에 컨테이너를 연결
개발에 필요한 써드 파티 모듈을 추가하고 싶을 때
Dockerfile에서 데이터베이스를 설치하고 환경 설정까지 모두 해 줄 수 있습니다
그러나 이는 각각의 컨테이너로 동작할 수 있는 도커의 장점을 사용하지 않는 것 같아서 docker-compose를 사용하여 외부 서비스를 따로 분리하기로 했습니다
외부 도커 컨테이너는 컨테이너 대신 서비스라고 합니다
먼저, 프로젝트 상위폴더에 docker-compose.yml 파일 생성 후 작성합니다
# docker-compose.yml
# 환경변수를 사용할 수 있다.
version: '3'
services:
postgres:
image: postgres:12
container_name: postgres
environment:
- POSTGRES_DB=${DB}
- POSTGRES_USER=${DBUSER}
- POSTGRES_PASSWORD=${PASSWORD}
ports:
- '${IP}:${POSTGRESQL}'
작성 후 make compose-up 명령어를 실행하여 postgres 서비스를 독립적으로 실행합니다
# makefile
# 이 글에서 사용할 도커 명령어는 총 4가지이므로 makefile을 통해 사용하겠습니다.
compose-up:
@docker-compose --env-file docker.env -f docker-compose.yml up
compose-down:
@docker-compose --env-file docker.env -f docker-compose.yml down
마치며
도커를 사용하게 된 후 웹 배포에도 도커를 사용하였습니다
이런 방식으로 웹, 서버, 데이터베이스를 모두 도커를 통해 배포해 보았는데 5분도 채 걸리지 않았습니다
무엇이든지 새로운 기술을 배운다는 것은 두렵지만, 도커는 배워둘 가치가 있다고 생각합니다
Leave a comment