- toc {:toc}
학습 목표
- 컨테이너 내부의 파일을 저장할 때 발생하는 문제
- 컨테이너가 동작하는 물리적인 호스트 머신 안에 만들어지는 스토리지에 대해 학습한다.
- 파일을 저장하는 컨테이너를 위한 옵션
- volumes
- bind mounts : 리눅스나 유닉스 운영체제에서 별도의 스토리지를 인식시킬 수 있도록 연결하는 기술
- tmpfs mount (for Docker on Linux)
- named pipe (for Docker on Windows)
- volumes, bind mounts에 초점
Issues
-
데이터는 컨테이너가 존재하지 않을 때 유지될 수 없다.
-
컨테이너 안에도 가상의 디스크를 만들어서 붙일 수 있는데, 이를 writable layer라고 한다.
- Writable layer를 사용할 경우 host machine과 연결되어 데이터를 옮기기 힘들다.
- Writable layer는 스토리지를 관리하기 위한 드라이버 등으로 인해 성능이 감소한다.
-
컨테이너 바깥에 저장공간을 만든다. - Volume, Bind mounts
-
Volumes
- docker deamon이 호스트 컴퓨터의 스토리지 중 특정 영역을 도커의 공간으로 점유한 것.
- 도커에 의해서 관리되는 호스트 파일 시스템의 한 부분에 저장된다.
- 도커 프로세스가 아니라면 수정하지 않는 것이 좋다.
- 도커에서 데이터를 유지하는 가장 좋은 방식이다.
- 특성
- 동시에 여러 컨테이너 안에 하나의 volume이 마운트될 수 있다.
- volume을 사용한 컨테이너가 실행 중이지 않을 때도 여전히 도커에 사용 가능하다.
- 자동적으로 삭제되지 않는다.
- 리모트 호스트 혹은 클라우드 제공자에 내 데이터를 저장할 수 있다.
- 용도
- 컨테이너가 생성하여 컨테이너 본인이 사용하는 경우
- 어딘가에 있는 데이터의 복사본을 가져와 저장하고 사용하는 경우
-
Bind mount
- 호스트 컴퓨터의 하드디스크, ssd의 특정 위치를 개발자가 임의적으로 지목해 연결할 수 있도록 만든다.
- 호스트 시스템의 스토리지 중 어디든 저장될 수 있다.
- 도커 프로세스가 아니라도 수정할 수 있다.
- 도커 명령에 의해 제어될 필요 없다.
- 용도
- 컨테이너가 실행되기 이전에 이미 생성된 자료에 접근할 수 있도록 해준다.
- 컨테이너의 동작하는 과정을 통해 호스트 스토리지를 변경할 수 있기 때문에 민감한 파일에 접근할 수 있다.
-
tmpfs (for Docker on Linux)
- 호스트 시스템의 메모리만 저장된다. 파일 시스템에 저장되지 않는다.
- 컨테이너가 멈출 때 tmpfs 마운트는 제거되고 쓰인 파일들은 유지되지 않는다.
- Volume, Bind Mount와의 차이
- tmpfs는 일시적이고 호스트 메모리에만 저장된다.
- 컨테이너 사이에 tmpfs를 공유할 수 없다.
-
named pipe (for Docker on Window)
-
Jenkins - CI/CD
-
Continuous Integration and Delivery server
-
코드 작성을 마치고 깃허브에 올린 후 컴파일, 빌드, 테스트, 배포 등의 작업을 사람의 개입 없이 자동으로 수행하는 과정을 구현할 수 있다는 것을 의미한다.
-
시간을 설정해서 배포하는 등 설정할 수 있다.
Docker Machine
- Docker Machine
- 가상 호스트에 도커 엔진을 설치할 수 있도록 하는 도구.
- 도커 머신을 가상 호스트에 설치하고 호스트를 도커 머신 커멘드를 통해 다룬다.
- 혹은 가상 머신을 만들고 도커를 설치해 사용할 수 있도록 해준다.
- 용도
- 오래된 데스크탑을 가지고 있고 맥이나 윈도우에서 도커를 실행하고 싶은 경우
- 원격 시스템에 도커 호스트를 공급하고 싶은 경우
- 도커 머신 커멘드를 통해 다음을 할 수 있다.
- Start, inspect, stop, restart a managed host
- Upgrade the Docker client & daemon
- Configuare a Docker client to talk to your host