당신이 Docker로 개발환경을 구축해야 하는 이유(Docker로 Postgresql과 Redis 설치하기 예제)

카우치코딩·2022년 10월 5일
9
post-thumbnail
post-custom-banner

Docker란?

도커(Docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.
(Wikipedia)

도커는 리눅스 가상화 시스템으로 사용해보면 Virtual Machine(이하 VM)과 같이 내 컴퓨터에 독립된 리눅스 운영체제 환경을 만든 느낌을 받을 수 있습니다. 그러나 사용해 보면 VM과 달리 굉장히 가벼운 것을 알 수 있습니다.

(wikipedia)
이는 VM은 여러개를 설치해 사용한다면 각각을 위한 Linux Kernel이 따로 존재하는 반면, 도커는 여러개의 도커 컨테이너가 하나의 Linux Kernel을 공유하기 때문에 여러개의 도커를 설치하여도 매우 가볍다는 장점이 있습니다. 이러한 장점은 하나의 머신에 여러 도커 이미지를 사용할 수 있도록 만들었습니다.

당신의 개발환경을 도커로 만들어야 하는 이유

1. 내 컴퓨터의 상태와 상관없이 일정한 개발 환경을 만들 수 있다.

한 컴퓨터에서 여러가지 개발 환경을 구축하다보면 해당 개발환경 끼리 충돌하는 경우가 생길 수 있습니다.

예를 들면 회사에서 개발할때는 레거시를 개발하기 위해 Java 8 버전을 사용하나 내 개인 프로젝트에는 Java 17버전을 사용할 수 있죠. 한 컴퓨터에서 이 문제를 해결하려면 프로젝트 별로 java path를 따로 변경해주고, 환경 변수도 이중으로 만들어야 합니다.

그러나 도커를 통해 개발 환경을 구축한다면 독립적인 머신을 통해 개발하는 것과 사실상 같기 때문에 이러한 종속성에 고생을 할 필요 없이, 서로 다른 도커 컨테이너를 구축하여 개발하면 됩니다.

또한 두 프로젝트가 사용하는 DB 버전이 다른 경우, 두 프로젝트가 같이 가지고 있는 Cpp 의존성에 충돌이 있는경우, 이전에 설정한 환경변수 때문에 개발환경이 제대로 동작하지 않는 등 이러한 문제를 Docker를 통해 개발환경을 구축함으로 해결 할 수 있습니다.

2. 생성과 폐기가 자유롭다.

도커 컨테이너는 매우 가볍습니다. 때문에 컨테이너 생성과 폐기가 매우 쉽습니다.
개발시 도커 컨테이너로 개발환경을 만들면 개발환경이 오염이 되었을때 폐기하고 개발환경을 쉽게 셋팅할 수 있다는 장점이 있습니다.

예를 들어 로컬에서 여러 테스트를 하는 도중 데이터베이스의 데이터가 꼬여 제대로된 개발 진행이 어려운 경우 로컬 환경에 직접 설치한 DB일 경우 롤백 작업을 진행해 주어야 하지만 도커로 설치했을 경우 컨테이너를 삭제하고 다시 설치하는 작업을 통하여 쉽게 문제를 해결 할 수 있습니다.

3. 개발 환경을 공유 할 수 있다.

도커 컨테이너는 스크립트를 통해 설치 및 폐기를 할 수 있습니다.
따라서 팀원들과 Git을 통해 같은 스크립트를 공유하면 바로 같은 개발환경을 얻을 수 있습니다. 이제 신입이 왔을때 머 설치할지 알려주지 말고 스크립트를 실행하라고 해봅시다.

또한 같은 스크립트를 이용해서 서버에 배포하고, CI/CD 서버에서 테스트 하는데도 활용 할 수 있습니다.

Docker로 Postgresql과 Redis 설치해보기

도커를 활용하는 매우 간단한 예제로 Postgresql와 Redis를 로컬에 설치하는 스크립트를 만들어보겠습니다.

1. Docker 설치하기

https://www.docker.com/ 에 들어가서 도커를 설치해 봅시다.

2. Docker hub에서 설치할 이미지 검색하기

Docker Hub는 도커 계의 Maven Central이나 NPM 이라고 생각하면 됩니다.

도커허브에 찾으려는 이미지를 찾으면 다음과 같이 페이지가 나오고 간단한 사용 설명서와 버전을 알 수 있습니다. 이거를 숙지하고 이제 그대로 스크립트를 만들면 됩니다.

3. 실행 스크립트 만들기

#!/bin/bash
docker run -d --name couchcoding-db -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=couchcoding -p 5432:5432 postgres:14.5

docker run --name couchcoding-redis -d -p 6379:6379 redis

docker run은 도커 이미지를 옵션과 함께 실행시키는 스크립트입니다. 이때 도커 이미지가 없으면 다운받고 실행하게 됩니다.
첫번째 스크립트는 postgres 생성, 두번째 스크립트는 redis를 생성하는 예제입니다.

-d 옵션을 쓰면 백그라운드에서 도커가 동작합니다.
--name 옵션은 생성할 도커 컨테이너의 이름입니다.
-e 옵션은 환경변수를 설정하는 옵션으로 POSTGRES의 USER와 PASSWORD를 넣어주었습니다. 이러한 옵션은 다운받는 이미지마다 다르게 되어있으니 공식 문서를 잘 참조해주세요
-p 옵션은 포트 포워드 기능입니다. 내 포트 : 도커포트 순으로 적으면 도커의 포트가 내 포트 어딘가에 바인딩 됩니다.


docker를 확인해보면 이미지가 뜬 것을 볼 수 있습니다.

4. 삭제 스크립트 만들기

#!/bin/bash
docker stop couchcoding-db && docker rm couchcoding-db
docker stop couchcoding-redis && docker rm couchcoding-redis

도커 컨테이너를 계속 재사용을 하거나 에러가 있을때 고치는 방법도 있지만 저의 경우는 완전히 폐기하는 방법을 선호합니다. 이럴 경우 오염되지 않은 개발환경을 계속하여 구성할 수 있기 때문입니다.
stop은 멈추는 명령어이고 rm은 삭제하는 명령어입니다. 컨테이너 이름을 넣어주면 동작하게됩니다.

마치며

오늘은 개발환경 구축시 도커를 써야하는 이유와 정말 간단하게 도커를 사용하는 스크립트를 만들어 보았습니다.
개발환경을 좀 더 잘 만들고 싶으면 docker-compose 와 같은 툴을 이용하면 각각의 컨테이너를 따로 Run할 필요없이 한번에 올릴 수 있고, 이때 컨테이너 끼리 네트워크 환경도 가상화하여 사용할 수 있습니다.
그리고 최근에 VScode나 IntelliJ에서는 컨테이너 개발환경을 쓸 수 있도록 해주니 이 것 또한 한번 참고해보세요

카우치코딩

카우치코딩 고동휘 멘토의 글입니다.

About Couchcoding

카우치코딩에서는 1:1 코딩 문제해결 멘토링 서비스입니다. 가르치는데 관심있는 멘토분들이나 문제해결이 필요한 멘티분들 방문해주세요~
또한 별도로 6주 포트폴리오 수업을 진행중에있습니다. 혼자 포트폴리오 준비를 하는데 어려움이 있으면 관심가져주세요~

profile
포트폴리오 수업 & 코딩 멘토링 서비스 카우치코딩입니다.
post-custom-banner

0개의 댓글