도커로 배포해보기

프로젝트를 배포할 때 주로 사용하는 도커와 도커 컴퍼즈에 대해 배워봅니다.


도커를 사용하게 된 계기

저는 항상 서버 배포를 할 때 리눅스 커널에 들어가 모든 개발 환경을 세팅하여 배포를 합니다
이 과정이 어렵지는 않지만 계속 하다보면 싫증이 나고 시간을 많이 잡아먹습니다

1280px-Docker_(container_engine)_logo svg

제가 도커를 사용하게 된 계기는 바로 이것입니다
도커는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다
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 코드 해석

  1. FROM golang:1.14.2
    • go 1.14.2 버전을 사용
  2. LABEL Author=’jjmin321@naver.com’
    • jjmin321@naver.com이 작성
  3. COPY . src
    • 프로젝트 전체파일을 컨테이너 내 go/src 폴더에 추가
  4. WORKDIR /go/src
    • 컨테이너 내에서 /go/src로 이동
  5. CMD [ “go”, “run”, “main.go”]
    • go run main.go로 서버를 실행
  6. 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분도 채 걸리지 않았습니다
무엇이든지 새로운 기술을 배운다는 것은 두렵지만, 도커는 배워둘 가치가 있다고 생각합니다

linux

Categories:

Updated:

Leave a comment