도커에 대한 학습을 위해 포스팅합니다.
도커
도커는 무엇일까요?
예시를 하나 들어보겠습니다. 누군가 웹 개발을 한다고하면 웹 서버나 데이터베이스를 깔아야 합니다.
하지만 개개인이 이것들을 설치하고 설정하다 서로 다른 OS와 환경, 서버에 의해 에러를 맞이할 수도 있습니다.
물론 한번에 잘 될 수도 있지만 아닌 경우 위 에러를 맞이하는 것 자체가 개발자에겐 굉장한 스트레스입니다.
도커는 위 과정을 개선하기 위해 리눅스 운영체제의 CONTAINER라는 앱 실행 방법을 다뤄 해결합니다.
가상화의 한 종류인 컨테이너는 프로세스를 격리시켜 각각 독립된 환경을 갖게합니다.
이 컨테이너 내에는 운영체제 전체가 설치되어 있는 것이 아니라 앱을 실행하는데 필요한 라이브러리와 실행 파일들만 내제되어 있습니다.
그리고 이 컨테이너는 도커 이미지를 통해 만들어지게 됩니다. 이는 뒤에 또 설명을 해보겠습니다.
근데.. 이게 왜 장점인가요?
기존 VM(Virutal Machine)은 새로운 OS를 깔아 자원을 나누어 사용했습니다. OS를 가상화 한 것이죠.
이와 반대로 도커는 이미 존재하는 운영체제를 공유하니 따로 설치할 필요도 없습니다.
벌써 설치 시간과 저장 공간을 아낀 셈이죠.
또 운영체제가 하나이기 때문에 속도가 느려지지도 않고 CPU나 메모리가 프로세스의 필요한 만큼만 할당되기 때문에 성능 손실이 줄어듭니다.
사담이지만 컨테이너 기술을 이용하는 소프트웨어는 여러가지가 있는데 그 중 도커가 제일 잘나가고 있는 기술이라고 하네요.
도커 이미지(Dokcer Image) 와 컨테이너(Container)
도커 이미지는 앱을 실행하기 위해 필요한 라이브러리나 소스 코드, 컴파일된 실행 파일 등을 묶어 저장해둔 것입니다.
다시말해 이미 앱을 실행하기 위해 만반의 준비가 다 된 상태의 파일이라고 할 수 있습니다.
이 이미지만 전달해준다면 그 어떤 누구라도 환경에 구애받지 않고 컨테이너를 쉽게 생성하고 앱을 실행할 수 있습니다.
그런데 다시 생각해보면 앱을 실행하기 위한 모든 파일을 이미지에 담는다면 용량이 결코 작지 않을 겁니다.
그럼에도 사용하는 이유는 가상머신에 OS를 설치하는 것 만 고려해 비교해도 굉장히 적은 용량이기 때문입니다.
엄청나죠?
그럼 컨테이너는 뭘까요?
컨테이너는 도커 이미지를 통해 격리된 상태로 프로세스를 동작시키는 기술입니다.
누군가가 이미지만 전달해주었을 때, 받는 이가 누구라도 해당 프로세스를 도커를 통해 동작시킬 수 있게됩니다.
또한 이미지 하나로 여러 개의 컨테이너를 생성할 수 있습니다.
각각의 컨테이너는 독립된 환경이기 때문에 생성된 여러 컨테이너는 서로에게 영향을 주지 않습니다.
자 그럼 도커를 시작해보겠습니다.
도커 설치하기
해당 포스팅은 AWS EC2 환경을 이용해 도커를 사용할 계획입니다.
또 Ubuntu 기반으로 작성되었습니다. 이 외에 AWS 사용법은 따로 포스팅하지 않습니다.
Ubuntu 설치 시 도커 설치를 위한 OS 조건이 있습니다. Docker Docs에 따르면
위를 참고하시면 될 것 같습니다.
Dokcer Docs : https://docs.docker.com/engine/install/ubuntu/
먼저 혹시 기존에 설치된 도커 버전이 있으시다면 아래 명령어를 이용해 지워주세요.
$ sudo apt-get remove docker docker-engine docker.io containerd runc
이후 먼저 저장소를 설정해야 합니다.
$ sudo apt-get update
$ sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
그리고 도커 엔진을 설치해야 합니다.
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
이까지 성공하셨다면 도커가 잘 설치됐습니다.
아래 hello-world 이미지를 이용해 설치가 잘 됐는지를 검사할 수 있습니다.
$ sudo docker run hello-world
이후 sudo docker ps 명령어를 이용해 실행되고있는지 확인됐다면 완료!
완료하고나면 누군가는 "그래서 내 로컬에서 코딩한 결과물은 어떻게 도커 이미지로 만들어서 aws에 올리는건데?" 라는 의문이 생길 수 있습니다.
정말 간단한 방법으로는 Git을 설치해서 해당 Repo를 받아온 후 pull을 통해 코드를 업데이트하고 Dockerfile을 이용해 이미지를 만들면 됩니다.
그런데 잘 생각해보세요! 개발자는 앞으로 매 업데이트 마다 새롭게 배포하게 됩니다.
이 과정들을 매번 반복한다면 얼마나 귀찮은 일이 될까요?
그래서 다음에는 AWS EC2로 Github Actions를 이용하여 작업한 코드를 AWS에서 도커 이미지로 만들고 컨테이너를 실행하는 것을 자동화하는 방법에 대해 알아보겠습니다.
읽어주셔서 감사합니다.