Docker란?

기존의 문제는 서버 PC마다 환경이 다르고 매번 환경변수와 의존성을 설정하는 것이 매우 어렵습니다. 이로 인해 서버와 PC마다 버전 차이 등으로 실행 결과가 달라지는 문제가 발생합니다. 


이러한 문제를 해결하기 위해 개발된 것이 도커이며 App 구성과 런타임 환경에서 필요한 요소들을 모아서 패키징 하는 것을 도와줍니다. 결론적으로 Docker는 개발자가 경량 컨테이너를 사용하여 애플리케이션을 작성, 배포 및 관리할 수 있는 최첨단 기술입니다.  또한 이러한 컨테이너는 이식 가능하고 확장 가능하며 다양한 환경에서 일관되게 실행할 수 있습니다.


Docker의 장점

Docker는 개발 가속화, 효율적인 리소스 활용, 배포 간소화, 확장성, 팀 간의 협업 향상 등 다양한 이점을 제공합니다. 이러한 이점에 대해 더 자세히 알아보겠습니다.

 

  • 경량 컨테이너 : Docker 컨테이너는 매우 가볍고 필요한 시스템 리소스가 최소화되어 빠르고 원활한 배포 프로세스를 보장합니다. 또한 기존 가상 머신에 비해 오버헤드가 최소화됩니다.
  • 휴대성 : Docker 컨테이너는 애플리케이션과 종속성을 캡슐화하므로 호환성 문제를 일으키지 않고도 개발부터 운영까지 다양한 플랫폼에서 동일한 컨테이너를 쉽게 이동하고 실행할 수 있습니다.
  • 확장성 : Docker 아키텍처를 사용하면 애플리케이션을 간편하게 확장할 수 있으며 변화하는 워크로드에 대응하는 민첩성을 제공합니다. 컨테이너는 필요에 따라 즉시 복제하거나 종료할 수 있습니다.
  • 일관성 : Docker를 사용하면 개발, 테스트 및 운영을 위한 일관된 환경을 만들 수 있습니다. 이렇게 하면 소프트웨어 개발 수명 주기의 여러 단계에 걸쳐 응용 프로그램이 예상대로 실행될 수 있습니다.
  • 단순화된 배포 : Docker는 Kubernetes, Docker Swarm과 같은 컨테이너 오케스트레이션 도구를 사용하여 배포 프로세스를 단순화합니다. 이러한 도구는 컨테이너 배치, 스케일링 및 복구를 관리하고 고가용성을 보장합니다.
  • 협업 증가 : Docker는 개발자와 운영 팀 간의 협업을 촉진합니다. 컨테이너는 쉽게 공유할 수 있으므로 프로젝트와 관련된 모든 사람들이 일관된 개발 환경을 실현할 수 있습니다.

Docker의 기능 3가지 (Build, Ship, Run)

  • Build: 도커 이미지를 만드는 기능
    도커는 애플리케이션의 실행에 필요한 프로그램 본체, 라이브러리, 미들웨어, OS나 네트워크 설정 등을 하나로 모아 도커 이미지를 생성합니다. 도커 이미지는 디렉터리입니다. 도커 명령을 사용하여 이미지를 tar 파일로 추출할 수 있습니다. 도커 이미지는 수동으로 도커 명령을 사용하여 생성할 수도 있으며, Dockerfile이라는 설정 파일을 만들어 자동으로 이미지를 생성할 수도 있습니다. 지속적인 통합과 지속적인 배포 관점에서는 IaC(Infrastructure as a Code)를 고려하여 Dockerfile을 사용하여 관리하는 것이 바람직합니다.

 

  • Ship: 도커 이미지를 공유하는 기능
    도커 이미지는 도커 레지스트리에서 공유할 수 있습니다. 도커의 공식 레지스트리인 Docker Hub에서는 Linux 배포판의 기본 기능을 제공하는 베이스 이미지를 배포하고 있습니다. 이러한 베이스 이미지에 미들웨어, 라이브러리, 전개할 애플리케이션 등을 추가하여 독립적인 도커 이미지를 생성할 수 있습니다. 도커 명령을 사용하여 레지스트리에서 이미지를 검색, 업로드, 다운로드할 수 있습니다. 또한, Github와 연동하여 Docker 이미지를 자동으로 생성하고 Docker Hub에서 자동 생성 기능인 Automated Build를 사용할 수 있습니다.

 

  •  Run: 도커 컨테이너를 작동시키는 기능
    도커는 리눅스 상에서 서버 기능을 컨테이너 단위로 작동시킵니다. 도커는 하나의 리눅스 커널을 여러 개의 컨테이너에서 공유합니다. 각 컨테이너 내에서 작동하는 프로세스를 그룹으로 관리하고, 각 그룹에 파일 시스템, 호스트명, 네트워크 등을 할당합니다. 그룹이 다르면 프로세스나 파일에 대한 접근이 제한됩니다.

Docker 구성 요소

Docker는 Docker Engine, Docker Hub, Docker Compose와 같은 다양한 구성 요소로 구성됩니다.

 

  • Docker Engine : 도커 이미지를 생성하고 컨테이너를 실행하는 핵심 기능.
  • Docker Registry : 도커 이미지 공개 및 공유. 도커 허브도 도커 레지스트리를 사용.
  • Docker Compose : 여러 컨테이너를 관리하기 위한 툴.
  • Docker Machine : 로컬의 VirtualBox 나 퍼블릭 클라우드에 도커 실행 환경을 구축하는 툴.
  • Docker Swarm : 여러 도커 호스트를 마스터(Master)와 노드(Node) 구조로 클러스터화하는 툴. 쿠버네티스와 비슷한 기능.


 

일반 Docker 명령

명령어 의미
docker images 현재 Host에 다운받은 이미지들을 출력하는 명령어
 docker image rm <image ID> 추가적으로 해당 이미지를 컨테이너에서 사용하고 있으면 이미지를 삭제할 수 없습니다.
docker run <옵션> --name <컨테이너이름:test> <이미지 Repository> 도커 컨테이너 생성
docker create <옵션> --name <컨테이너이름:test> <이미지 Repository> 도커 컨테이너 생성만
docker exec -it <컨테이너이름> /bin/bash 컨테이너 접속
docker start <컨테이너이름> 컨테이너 실행
docker stop <컨테이너이름> 컨테이너 종료
docker ps 실행중인 컨테이너 리스트 출력
docker ps -a 실행했던 컨테이너 리스트의 이력을 출력
docker rm <컨테이너이름> 컨테이너 삭제

 

'devops' 카테고리의 다른 글

Jenkins로 배포 자동화 실현해보기  (0) 2022.09.04
CI/CD  (0) 2022.08.13
compile(컴파일), build(빌드), deploy(배포)  (0) 2022.05.12

+ Recent posts