Post

Docker(1) - 기본개념 알아보기

📌들어가며

(작성중~) Docker는 개발자라면 한 번씩 들어보지 않았을까 싶다.😎 인강 커리큘럼에도 포함되어 있고, 관련 경험자를 구하는 글을 몇 번 봤는데 🤔 이쯤되니, Docker가 어떤건지, 왜 필요한지 궁금해져서 알아보려고 한다.

✅Docker의 필요성

어떤 애플리케이션을 만든다고 가정해보자. 개발자들은 이 애플리케이션을 제작하기 위해 여러 프로그램과 라이브러리를 다운로드 받아야 할 것이다.

이후 자신의 개발 환경에서 애플리케이션 개발이 완료되면, 배포를 위해 웹 서버에 올린다. 하지만 해당 서버 환경이 개발 환경과 다르거나, 사용된 라이브러리의 버전이 다르다면, 애플리케이션이 개발자가 예상한 대로 작동하지 않을 수 있다!

그러면 이 상황을 방지하려면 어떻게 해야 할까?🤔

이를 해결하기 위해 Docker를 사용한다. Docker를 사용하면 애플리케이션과 그에 필요한 모든 종속성을 하나의 컨테이너로 묶어 동일한 환경을 보장할 수 있다.🎉

✅Docker란?

공식문서의 설명을 살펴보자.

Docker는 애플리케이션 개발, 배포, 실행을 위한 오픈 플랫폼이다. Docker를 사용하면 애플리케이션을 인프라로부터 분리하여 소프트웨어를 신속하게 제공할 수 있으며, 코드를 작성하고 프로덕션 환경에서 실행하는 데 걸리는 시간을 크게 줄일 수 있다.

Docker는 로컬 컨테이너를 사용하여 표준화된 환경에서 개발자들이 작업할 수 있도록 개발 생애 주기를 간소화하므로, 컨테이너는 지속적 통합(CI) 및 지속적 배포(CD) 워크플로우에 적합하다.

➡️Docker 사용시 예상 시나리오

  • 개발자는 로컬에서 코드를 작성하고 Docker 컨테이너를 사용해 동료와 작업을 공유한다.
  • Docker를 사용해 애플리케이션을 테스트 환경에 푸시하고 자동 및 수동 테스트를 실행한다.
  • 버그를 발견하면 개발 환경에서 수정하고 테스트 환경에 다시 배포하여 테스트한다.
  • 테스트가 완료되면, 수정된 이미지를 프로덕션 환경에 푸시하는 것만으로 고객에게 전달한다.

➡️Docker의 주요 구성 요소

  • 컨테이너(Container)
  • 이미지(Image)
  • 레지스트리(Resistry)
  • DockerFile

✅컨테이너

웹 애플리케이션을 개발한다고 생각해보자. 이 애플리케이션 제작을 위해 React, Python, SQL DB를 사용할 예정이므로, 컴퓨터에는 Node, Python, SQL를 설치해야 한다.

이때 원활한 협업을 위해서는 다른 팀원들과 버전을 맞추어야 하는데, 어떻게 하면 될까? 이때 컨테이너를 사용하게 된다.

Docker의 컨테이너는 애플리케이션과 그 애플리케이션이 실행되는 데 필요한 모든 파일, 라이브러리, 설정 등을 하나로 묶은 독립된 실행 환경으로, 애플리케이션이 어디서나 동일한 환경에서 실행될 수 있도록 한다. 즉, 컨테이너는 작은 가상 컴퓨터와 유사하게 작동한다고 볼 수 있다.

✅이미지

컨테이너라는 독립된 실행환경에서 필요한 파일이나 구성은 어디서 가져올까?

컨테이너 이미지는 컨테이너를 실행하는 데 필요한 모든 파일, 바이너리, 라이브러리, 구성 파일을 포함하는 표준화된 패키지다.

즉 이 이미지를 기반으로 컨테이너를 만들면, 어디서든 동일한 환경에서 애플리케이션을 실행할 수 있다!

➡️이미지의 두 가지 원칙

  • 이미지 불변성: 이미지를 한 번 생성하면 수정할 수 없다.
  • 레이어 구성: 컨테이너 이미지는 여러 레이어로 구성되며, 각 레이어는 파일 시스템 변경 사항(파일 추가, 제거 또는 수정)을 나타낸다.

➡️이미지 찾기

App store에서 app을 다운받는 것처럼, 이미지를 배포하는 마켓이있다! Docker Hub는 Docker가 지원하고 인증한 다양한 이미지를 제공한다.

➡️이미지 관련 명령어

📌 이미지 다운로드 (Pull) Docker Hub에서 이미지를 다운로드하는 것을 pull이라고 한다.

1
docker image pull [OPTIONS] NAME[:TAG|@DIGEST]

📌 이미지 실행 (Run): 이미지를 실행시키는 것을 run이라고 한다. (컨테이너를 생성하고 실행하는 것)

1
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

🗂️참고 사이트

This post is licensed under CC BY 4.0 by the author.