And Brain said,
CI/CD Argonautica - Docker, 선박 - 이론 본문
CI/CD Argonautica
Docker, 선박
Kubernetes, 조타수 Harbor, 항구
Helm, 타륜
Istio, 돛
Jenkins, 선장
ArgoCD, 출항
1장/ Loki, Trickster
Troubleshooting
당신이 개발자라면 CI/CD에 대해 한 번이라도 들어봤을 것이다.
CI/CD는 개발 프로세스를 자동화하여 빌드, 테스트, 배포 작업을 더 빠르게 수행할 수 있도록 한다.
이를 통해 개발자의 생산성을 향상시키고, 오류를 최소화하며, 고객에게 더 나은 제품을 제공할 수 있도록 돕는다.
이 CI/CD에 대해서 앞으로 우리는 몇 주간의 오디세이를 같이 떠나면서 배워보도록 할 것이다.
첫번째 시간은 앞으로의 기나긴 여정을 위한 선박부터 점검해보도록 하자.
먼저, 항해를 위해서 Docker말고 다른 배를 탈 수도 있지만 우리의 배는 Docker가 될 것이다.
Docker
Docker는 컨테이너 가상화 기술을 사용하여 응용 프로그램을 배포하고 실행하는 플랫폼이다.
Docker를 사용하면, 애플리케이션을 컨테이너로 패키징하여 배포할 수 있으며, 컨테이너는 애플리케이션을 실행하는 데 필요한 모든 라이브러리, 파일 및 설정 등을 포함하게 된다.
이러한 컨테이너 기술은 애플리케이션을 보다 쉽게 배포하고 실행하며, 환경에 따른 호환성 문제를 해결할 수 있도록 도와준다.
Docker는 컨테이너를 실행하기 위해 리눅스 커널의 cgroups, namespaces 등의 기능을 사용한다.
이러한 기능을 사용하면, 여러 개의 컨테이너를 단일 호스트 시스템에서 실행할 때, 각 컨테이너를 격리된 환경에서 실행할 수 있다.
이를 통해, 각 컨테이너는 자신만의 파일 시스템, 네트워크, 프로세스 등을 가지고 있으며, 다른 컨테이너와 격리된 환경에서 실행된다.
또한, Docker는 이미지를 레이어(layer)로 관리한다.
이미지의 각 레이어는 변경되지 않으며, 새로운 레이어가 추가되면 기존 레이어를 수정하지 않고 새로운 레이어를 추가하여 이미지를 더욱 효율적으로 관리하고, 이미지를 다운로드하고 배포하는 시간을 줄일 수 있다.
또한, 도커는 다양한 커맨드를 제공하여 이미지 빌드, 컨테이너 생성 및 관리, 네트워크 설정 등의 작업을 수행할 수 있다.
Docker Client, Docker Daemon
Docker 클라이언트는 사용자가 도커를 사용할 수 있도록 하는 CLI(Command Line Interface)다.
Docker 데몬과 통신하여 API를 호출하고, 컨테이너를 생성하고 관리한다.
클라이언트는 Docker 호스트에서 실행되며, TCP 소켓을 통해 데몬과 통신한다.
클라이언트와 데몬은 같은 호스트에서 실행할 수 있지만, 다른 호스트에서 실행할 수도 있다.
Docker 데몬은 실제로 컨테이너를 생성하고 관리하는 역할을 담당하는 백그라운드 프로세스로 컨테이너, 이미지, 네트워크, 볼륨 등의 개체를 관리하는 도커 API를 제공한다.
데몬은 컨테이너를 생성하고 관리하기 위해 호스트 시스템의 리눅스 커널을 사용한다.
따라서, 데몬이 실행되는 호스트 시스템은 리눅스 운영 체제를 사용해야 하지만, 도커를 사용하는 사용자는 리눅스 운영 체제를 직접 사용하지 않더라도, 도커를 사용할 수 있다.
도커는 다양한 운영 체제에서 지원되며, 도커 데스크톱(Docker Desktop)이나 도커 머신(Docker Machine)을 사용하여, 리눅스 운영 체제가 아닌 호스트 시스템에서도 도커를 사용할 수 있다.
Docker-Compose
Docker Compose는 여러 개의 도커 컨테이너를 정의하고 실행하는 도구이다.
Docker Compose를 사용하면, 여러 개의 도커 컨테이너를 실행하는 데 필요한 설정 정보를 하나의 파일에 정의하여, 간단하게 여러 개의 컨테이너를 실행할 수 있다.
이러한 방식으로, 개발 환경에서 여러 개의 서비스를 실행할 때, 매번 도커 컨테이너를 수동으로 실행하는 번거로움을 줄일 수 있다.
도커 컴포즈를 사용하면, 각 서비스를 별도의 컨테이너로 실행할 수 있으며, 이러한 서비스들은 하나의 네트워크에 연결되어 통신할 수 있다.
또한, 컴포즈 파일에서 각 서비스의 의존성을 설정할 수 있으며, 서비스가 실행될 때 해당 의존성을 자동으로 처리할 수 있다.
예를 들어, 애플리케이션과 데이터베이스를 각각 컨테이너로 실행할 경우, 애플리케이션 컨테이너는 데이터베이스 컨테이너를 참조해야 하는데, 이를 컴포즈 파일에서 설정하여, 데이터베이스 컨테이너가 먼저 실행되도록 할 수 있다.
또한, 컴포즈 파일에서 환경 변수, 포트 매핑 등을 설정할 수 있으며, 이러한 설정은 각 서비스에 대한 도커 컨테이너를 생성할 때 적용된다.
도커 컴포즈는 YAML 파일 형식으로 작성되며, YAML 파일을 사용하여 각 서비스의 이름, 이미지, 환경 변수, 포트 매핑 등을 설정할 수 있다.
여기까지 Docker에 대해 간단한 기본 개념을 알아보았다.
다음 시간엔 Dockerfile과 Docker-Compose YAML파일들을 통해 Docker를 실제 어떻게 사용하는지 알아보도록 하자.
Thanks for watching, Have a nice day.
Referencese
https://velog.io/@weekbelt/%EB%8F%84%EC%BB%A4%EB%8D%B0%EB%AA%ACDocker-Daemon
https://www.youtube.com/watch?v=LXJhA3VWXFA
'IT > CICD Argonautica' 카테고리의 다른 글
CI/CD Argonautica - Kubernetes, 조타수 - 실습 [3] (0) | 2023.08.19 |
---|---|
CI/CD Argonautica - Kubernetes, 조타수 - 실습 [2] (4) | 2023.08.12 |
CI/CD Argonautica - Kubernetes, 조타수 - 실습 [1] (0) | 2023.08.05 |
CI/CD Argonautica - Kubernetes, 조타수 - 이론 (0) | 2023.05.13 |
CI/CD Argonautica - Docker, 선박 - 실습 (0) | 2023.03.27 |