
맥에서 개발한 프로젝트가 우분투에서 돌아가지 않아 고생을 했었다.
그 과정에서 개발 환경과 배포 환경의 불일치 문제를 해결해주는 Docker를 공부하고 정리해보고자 한다.
개발자가 컨테이너를 빌드, 배포, 실행, 업데이트, 관리할 수 있는 오픈 소스 플랫폼.
코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정 등 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 경량의 독립 실행형 소프트웨어 패키지.

컨테이너는 애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행될 수 있도록 코드와 모든 종속성을 패키지화하는 소프트웨어의 표준 단위.

파일시스템의 변경사항을 캡처하는 단위.

read-only 레이어, 즉 이미지 레이어는 여러 레이어들로 구성되어 있다.
도커에서는 여러 이미지 파일들을 관리할 때, 이미지들에서 중복되는 영역을 하나의 레이어를 통해 관리한다.
이것은 중복되는 레이어의 경우 다운받지 않아도 된다는 것을 뜻한다.
기존의 image에 내용이 추가될 경우 read-write layer에 추가한다.
image 의 기존 내용이 변경될 경우에는 Copy on Write 전략을 사용한다.
디스크 공간 절약
CoW 전략 덕분에 여러 컨테이너가 동일한 이미지 레이어를 공유할 수 있다.
이로 인해 중복 데이터를 줄이고 디스크 공간을 절약할 수 있다.
빠른 컨테이너 생성
새로운 컨테이너를 생성할 때, 기존 이미지 레이어를 복사할 필요가 없다.
따라서 컨테이너 생성 시간이 단축된다.
변경 사항 격리
각 컨테이너는 자체 쓰기 가능한 레이어를 가지므로, 컨테이너 간에 변경 사항이 격리되어 영향을 주지 않는다.
overwell24@ubuntu-server:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.6 LTS"
overwell24@ubuntu-server:~$ uname -r
5.15.0-91-generic # 커널 버전
root@915161cd531f:/ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"
root@915161cd531f:/ uname -r
5.15.0-91-generic # 커널 버전
[root@48b3b354f9b3 /] cat /etc/redhat-release
CentOS Linux release 8.4.2105
[root@48b3b354f9b3 /] uname -r
5.15.0-91-generic # 커널 버전