: 모든 도커 컨테이너는 읽기전용인 도커 이미지를 기반으로 생성된다.
run
,create
,pull
명령어를 수행하면 가장 먼저 호스트 머신에서 해당 이미지를 찾고, 없으면 도커 허브에서 검색한 뒤 내려받는다.docker search {image}
로 검색도 가능하다.- 누구나 배포할 수 있다. 이미지 중에서도
docker official image
딱지가 붙은 공식 이미지를 사용하는게 웬만하면 좋다. 도커 허브 이미지는docker.io/ubuntu
와 같이 prefix가 붙는다. - 필요한 경우 컨테이너 형태로 사설 레지스트리를 내부에 띄워놓고, 사내망에서 사용하는 이미지들을 배포 및 관리 할 수 있다.
- 누구나 배포할 수 있다. 이미지 중에서도
- 생성: 실행중인 컨테이너를
commit
하거나Dockerfile
을 빌드하면 이미지로 만들 수 있다. 커밋의 경우 컨테이너 내에서의 작업 내용이 유지된다.
이미지 구조
inspect
명령어의 Layers 항목을 보면 각 이미지의 레이어들을 볼 수 있다.- git에서 각 커밋들간의 diff를 저장하는 것과 유사한 개념으로, 도커에서 commit을 통해 생성한 이미지는 변경된 layer(diff) 하나만 다르다.
- 이미지를 삭제하면
Untagged
,Deleted
등의 로그가 찍히는데 전자는 이미지의 이름을 삭제한 것이고(이 때 이미지 이름이<none>
이 된다 -> 댕글링 이미지), 후자는 이미지 레이어가 실제로 삭제됨을 뜻한다.
이미지 추출과 배포
- 추출: 이미지를
.tar
와 같은 형태의 파일로 추출하는 방법save
,load
커맨드를 통해 컨테이너 메타데이터를 포함한 파일로 추출, 로드가 가능하고,export
,import
커맨드를 통해 컨테이너 파일시스템을 그대로 추출, 로드한다.- 이미지 레이어 구조가 아닌 단일파일 배포이기 때문에, 여러 버전의 이미지를 추출하면 불필요하게 중복된 이미지 용량을 차지한다.
- 배포:
push
와pull
을 이용하는 방법. -> 효율적- 도커 허브를 이용하기: 도커 허브에 가입해 repository를 생성한 뒤 배포
- 사설 레지스트리 이용하기
사설 레지스트리 배포
registry
이미지를 받아, 내부망에 먼저 배포해야한다. 레지스트리 컨테이너는 기본적으로 도커 볼륨을 사용하도록 설정 되어있다.도커 데몬은 기본적으로 https를 사용하지 않는 레지스트리 컨테이너에 접근하지 않도록 한다. 인증서를 사는 방법 외에도 해결 방법이 있다.
--insecure-registry
옵션을 사용해 http 레지스트리 컨테이너에 접근을 허용한다.nginx
서버를 두는 방법 - 자체 인증서를 발급해 TLS를 적용하는 방법- 레지스트리 컨테이너의 ip로 인증서를 생성한다.
- 해당 컨테이너를 바라볼
nginx
에crt
,key
config를 적용한다. - 각 사용자들(외부)은
nginx
와 통신하고,nginx
는 외부에 노출되지 않는 레지스트리 컨테이너와 통신한다.
인터페이스가 없기 때문에 rest api를 어느정도 익혀야 사용이 편리하다.
Reference)
시작하세요! 도커 / 쿠버네티스