도커
컨테이너 엔진 및 서비스형 플랫폼으로, 리눅스 커널 기능을 사용하여 호스트 OS위에 컨테이너를 생성 및 관리하는 기능을 제공한다
도커 자체는 컨테이너를 관리하는 데몬으로 실행된다
도커를 구성하는 개념
- 도커 파일
- 이미지
- 컨테이너
- 도커 네트워크
- 도커 볼륨
도커 파일
도커 이미지를 정의하는 파일
도커 이미지
애플리케이션 실행에 필요한 독립적인 빌드 및 런타임 환경을 위한 스냅샷
소스코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는데 필요한 기타 파일 등을 포함한다
레이어라는 단위로 구성되어 있으며 도커 파일의 지시자 (FROM / ENV / RUN 등) 하나가 하나의 레이어이다
FROM 지시자를 통해 가져온 베이스 이미지의 레이어 위에 새로운 레이어가 쌓이는 형식이다
이 레이어를 통해 도커는 이미지 간 중복성을 줄일 수 있으며, 빌드 캐시에 레이어를 저장하여 같은 이미지를 빌드할 때 캐시를 통해 이미 빌드된 레이어를 재사용한다
이미지에는 태그라는 식별자를 지정할 수 있는데, 식별자가 같은 경우 기존 이미지를 기반으로 새로운 레이어를 쌓아 새 이미지를 생성한다
이때 기존 이미지는 비활성화 된다
태그가 달라도 레이어는 도커 빌드 캐시를 통해 재사용 되는데, 레이어는 해시로 저장되기 때문에 파일 변경 사항이 있으면 그에 맞춰 새로운 레이어를 쌓으면서 변경 사항을 반영할 수 있다
그러나, 가끔씩 알 수 없는 이유로 새로운 레이어가 반영되지 않거나 기존 레이어가 남아있어서 새 이미지에 변경사항이 반영되지 않는 경우가 있으니, 이미지 빌드 시 '--no-cache' 옵션을 사용하도록 하자
도커 컨테이너
도커 이미지를 기반으로 실행된 컨테이너 프로세스
도커 이미지에서 CMD와 ENTRYPOINT 지시자의 명령은 컨테이너로 실행될 때 실행되고, 이를 제외한 지시자들은 도커 이미지를 빌드하는 빌드타임에 실행된다
도커 컨테이너는 호스트 OS에서 프로세스로 실행되며 도커 컨테이너 데몬에 의해 제어된다
도커 네트워크
도커 컨테이너 간의 통신을 관리하고 격리하기 위한 논리적 네트워크
docker network create 명령으로 생성할 수 있고, 컨테이너 실행 시 --network=네트워크명 옵션으로 연동할 수 있다
- 브릿지 네트워크 (docker0)
도커 컨테이너 실행 시 기본적으로 생성되는 네트워크 인터페이스이다
컨테이너들을 같은 브릿지 네트워크로 연결해 통신할 수 있게 격리해준다
이 네트워크 인터페이스는 컨테이너와 호스트 네트워크 인터페이스와 연결되어 있다
- 호스트 네트워크
호스트의 네트워크 인터페이스를 컨테이너가 그대로 사용하는 방식이다
--net=host 옵션으로 적용
- none 네트워크
네트워크를 사용하지 않음
--net=none 옵션으로 적용
- 컨테이너 네트워크
특정 컨테이너의 네트워크 환경을 공유
--net container:컨테이너_ID 옵션으로 적용
- 오버레이
도커를 분산된 네트워크에서 실행할 때 노드 내 컨테이너 간 통신이 가능하도록 호스트 네트워크 상단에서 운용되는 네트워크 인터페이스
호스트가 여러 개인 환경에서 사용할 수 있으며, 각 호스트에서 스웜 모드를 활성화하여 도커 스웜 구성을 했을 때 생성 및 적용할 수 있다
IPSEC 등 보안 옵션을 제공한다
도커 볼륨 마운트
컨테이너 내부의 데이터를 외부에 저장 및 공유하는 기능
컨테이너 내부의 데이터는 컨테이너가 종료되면 사라지기 때문에 데이터를 유지하고 싶다면 볼륨 기능을 사용해야한다
docker volume create 명령으로 생성할 수 있고, 컨테이너 실행 시 -v 볼륨명:컨테이너_내부_경로 옵션으로 연동할 수 있다
- 도커 볼륨
docker volume create 명령을 통해 도커 엔진이 관리하는 볼륨
생성된 볼륨은 /var/lib/docker/volumes/ 경로에 저장된다
--mout source=볼륨명,target=컨테이너_내부_경로 옵션으로 사용할 수 있다
- 바인드 마운트
도커 볼륨을 생성하지 않고 호스트의 파일 시스템의 특정 디렉터리를 컨테이너 내부 볼륨의 디렉터리와 마운트하는 방식
연동 방법은 도커 볼륨과 동일하다
도커 엔진의 관리를 받지 않기 때문에 파일 소실이나 예상치못한 파일의 존재 등 부작용이 존재할 수 있기 때문에 도커 볼륨을 사용하는 것을 권장한다
--mount source=호스트_경로,target=컨테이너_내부_경로 옵션으로 사용할 수 있다
- tmpfs 마운트
볼륨을 호스트의 파일 시스템이 아닌 메모리에 저장하는 방식
리눅스에서 도커를 실행하는 경우에만 사용할 수 있으며 컨테이너가 실행되는 동안에만 유효하기 때문에 파일로 저장하면 안되는 민감정보 및 비밀정보를 저장할 때 쓰인다
--tmpfs 컨테이너_내부_경로 옵션으로 사용할 수 있다
Reference
'Container > Docker' 카테고리의 다른 글
Docker Building Best Practices (0) | 2024.09.28 |
---|---|
도커 레지스트리 구축 (1) | 2024.09.28 |
도커 컨테이너에 Dockerfile의 부모 디렉터리 파일을 복사하는 방법 (0) | 2024.08.17 |
docker 컨테이너 볼륨 마운팅 시 알아야하는 점 (0) | 2024.07.19 |
도커 네트워크 간단 정리 (0) | 2024.06.26 |