프로필사진
DevOps 부트캠프 기록일지
DevOps_04_김재환
21_Study(Docker)
21_Study(Docker)

2023. 4. 12. 18:36부트캠프/DevOps (TIL)

Docker란 무엇인가?

 

Docker는 컨테이너화된 애플리케이션을 빠르고 쉽게 배포하고 실행할 수 있는 오픈소스 플랫폼이다. 이것은 다양한 언어와 프레임워크, 라이브러리를 사용하는 애플리케이션을 더 쉽게 만들고 배포하도록 해준다.

예를 들어, 개발자는 애플리케이션을 개발할 때 특정한 환경에서 작업할 필요가 있다. 그러나 이러한 환경을 설정하고 유지하는 것은 매우 어려운일인데 Docker를 사용하면 개발자는 이러한 환경을 설정하지 않아도 된다. 대신에 개발자는 Docker 이미지를 빌드하고, 컨테이너를 실행하여 개발환경을 구성할 수 있어야한다.

 

image, container?

 

도커에서 가장 중요한 개념은 컨테이너, 이미지이다. 이미지는 컨테이너 실행에 필요한 파일, 설정값을 모두 포함하고 있는 것이고 변하지 않는다. 이미지를 실행한 것이 컨테이너이고 여기서 추가, 변화되는 값은 컨테이너에 저장된다. 같은 이미지로 다수의 컨테이너를 생성할 수 있고 컨테이너의 변화가 생겨도 이미지에는 영향을 주지 않는다.

예를 들어 CentOS 이미지는 CentOS를 실행하기 위한 모든 파일, 설정값을 가지고 있고, Tensorflow 이미지 안에는 Tensorflow, Python, Jupyter 등 딥 러닝에 필요한 환경이 모두 들어가 있다. 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 개발 환경 등의 구축을 위해서 이것저것 설치하고 설정할 필요가 없다. 새로운 서버가 추가되면 만들어 놓은 이미지를 다운받고 컨테이너만 생성하면 된다.

도커 이미지는 Dockerhub에서 업로드, 다운로드 할 수도 있다. 현재 공개된 이미지는 50만개가 넘고 누구나 쉽게 명령어를 이용하여 이미지를 만들고 배포하고(push) 다운로드(pull)받을 수 있다.

 

container 방식의 장점

 

  1. 의존성 충돌 문제를 해결해 준다
  2. 개발과 배포 환경을 일치시킨다
  3. 수평 확장을 쉽게 해준다
  4. 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다

 

Layer?

 

도커 이미지는 컨테이너 실행에 대한 모든 정보를 담고 있기 때문에 용량이 매우 크다. 따라서 기존의 이미지에 파일 하나를 추가했다고 수백메가가 넘어가는 이미지를 다시 다운로드한다면 매우 비효율적일 수 밖에 없다.

도커는 레이어; Layer라는 개념을 사용한다. 유니온 파일 시스템을 이용하여 다수의 레이어를 하나의 파일시스템으로 사용할 수 있게 해준다. 이미지는 여러 개의 읽기 전용 레이어(Read-only Layer)로 구성되고 파일에 변화(추가, 수정)가 생기면 새로운 레이어가 생성된다.

예를 들어 CentOS 이미지가 C1 + C2 레이어의 집합이라면 이 이미지에서 nginx가 구동되는 환경의 이미지 레이어는 C1 + C2 + nginx 가 된다. 이런 식으로 기존의 이미지 레이어 위에 레이어가 추가되는 방식으로 최소한의 용량을 사용할 수 있게 된다. 여러대의 서버에 배포하는 것을 감안하면 엄청나게 영리한 설계이다.

 

Docker 설치

 

리눅스 버전을 자동으로 인식하여 도커 패키지를 설치해주는 스크립트이다.

sudo wget -qO- https://get.docker.com/ | sh

이 스크립트로 도커를 설치하면 hello-world 이미지도 같이 설치되는데, 사용하지 않으므로 삭제하도록 하자.

sudo docker rm 'sudo docker ps -aq'
sudo docker rmi hello-world

패키지 직접 설치

  • Ubuntu
sudo apt-get update
sudo apt-get nistall docker.io
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker

/usr/bin/docker.io 실행파일을 /usr/local/bin/docker 로 링크해서 사용

  • CentOS7
sudo yum install docker
sudo service docker start #Docker 서비스 실행
sudo chkconfig docker on #부팅시 자동 실행
  • Mac, Windows의 경우는 도커 공식홈에서 받고 설치하면 되므로 다른 글을 참조하자.
sudo docker version

도커 버전 명령어를 통해 설치가 잘 되었는지 확인해보자.

이로써 Docker 설치가 끝났다!

 

Docker와 VM 비교

 

 

Docker와 VM은 비슷한 목적을 가지고 있는데, 둘 다 애플리케이션을 분리된 환경에서 실행할 수 있도록 도와준다. 그러나 이 둘은 확연한 차이를 가지고 있다.

VM은 가상 머신을 사용하여 각각의 애플리케이션을 분리된 운영체제(OS) 환경에서 실행하는데 반면 Docker는 컨테이너라는 가벼운 가상화 기술을 사용하여 각각의 애플리케이션을 분리된 환경에서 실행한다. 이것은 VM과 비교하여 Docker가 더 가볍고, 더 빠르고, 더 효율적이라는 것을 의미한다.

 

Docker-compose란 무엇인가?

 

Docker-compose는 Docker에서 여러 컨테이너를 함께 실행하고 관리하는 데 사용되는 도구다. 이것은 Docker 컨테이너를 정의하고 구성하고 실행하는 방법을 제공하는데 예를 들어, 개발자는 다음과 같은 YAML 파일을 작성할 수 있다.

위의 파일은 세 개의 서비스(web, redis, worker)를 정의하고, 서로 다른 네트워크(frontend, backend)를 사용하도록 설정한다. 이 Docker-compose를 사용하여 여러 개의 컨테이너를 실행하고 관리하는 방법을 보여주는데

예를 들어, 위의 파일을 사용하여 세 개의 컨테이너를 실행하고 관리할 수 있고 다음과 같이 명령을 실행하여 Docker-compose를 시작할 수 있다.

docker-compose up

이 명령은 Docker-compose를 시작하고, 세 개의 컨테이너(web, redis, worker)를 실행한다. 이제 개발자는 이러한 컨테이너를 시작하고, 중지하고, 로그를 확인하고, 각각의 컨테이너에서 실행 중인 애플리케이션을 디버그할 수 있다.

Docker-compose는 여러 가지 유용한 기능을 제공하는데 예를 들어, 개발자는 Docker-compose를 사용하여 여러 개의 환경(개발, 테스트, 프로덕션)에서 컨테이너를 실행하고, 각각의 환경에서 다른 설정을 사용할 수 있다. 또한 개발자는 Docker-compose를 사용하여 여러 컨테이너 간의 의존성을 정의하고, 이러한 의존성을 관리할 수 있다.

 

결론

 

Docker는 컨테이너화된 애플리케이션을 빠르고 쉽게 배포하고 실행할 수 있는 오픈소스 플랫폼으로 Docker-compose는 Docker에서 여러 컨테이너를 함께 실행하고 관리하는 데 사용되는 도구다. Docker와 Docker-compose를 사용하면 개발자는 애플리케이션을 더 쉽게 개발하고, 배포하고, 관리할 수 있기에 딥러닝이 필요하다고 생각한다.

 

래퍼런스

https://aws.amazon.com/ko/docker/

https://www.redhat.com/ko/topics/containers/what-is-docker

https://zinirun.github.io/2020/08/15/how-to-use-docker/

'부트캠프 > DevOps (TIL)' 카테고리의 다른 글

21_Study(Node.js 웹 앱의 컨테이너화)  (0) 2023.04.12
21_Study(Docker Daemon)  (0) 2023.04.12
20_Study(YAML)  (0) 2023.04.12
20_Study(데이터 교환 형식)  (0) 2023.04.11
20_Study(JSON이 XML에 비해 가지는 이점)  (0) 2023.04.10