- hypervisor
- Data Volumn
- Docker Compose
- Docker Hub
- Docker CI Tool Stack
hypervisor
Docker 를 관리하는 방식.
VM은 가상화 된 하드웨어 위에 OS 가 올라가는 형태로 거의 완벽하게 host 와 분리 된다. 반면, container 는 OS 가상화이며, OS 부분을 가상화항여 올리고 커널을 host 와 공유한다.
VM 은 host OS 에서 거의 완전히 분리된 형태로 운영이 되지만, I/O 가 오갈 떄는 이야기가 달라진다.
VM 이 처리한 I/O 를 결국 host OS 의 커널이 다시 받아 자신의 드라이버에 맞게 처리해줘야 한다. 이 부분에서 병목이 발생한다. 반면 container 는 커널을 공유하기 때문에, 들어 온 I/O 가 쉽게 처리되서 나갈 수 있다. VM 이 container 보다 더 많은 커널 처리가 들어가야 되니 성능이 느리다.
도커 Host 클러스터
여러 도커 Host(?) 서버를 하나의 Host 처럼 관리하기 위해 클러스터를 구성, 컨테이너 스케쥴링
도커 컨테이너를 관리하기 위한 기술.
- fleet
- swarm
- kubernetes
- …
Docker Compose
여러개의 컨테이너를 띄워서 사용할 때.
- 명령어 기반의 인터페이스
- docker-compose.yml
- 단일 서버 기준
Docker 를 잘 쓰려면 반드시 Docker Compose 를 쓸 줄 알아야 한다.
Docker Toolbax 를 깔면 자동으로 깔려있다.
여러개의 컨테이너를 관리하면서 쉽게 실행한다. 리눅스에서 깔아서 쓴다.
-
확인 명령어
$ docker-compose --version
docker-compose.yml
- 애플리케이션을 만드는 서비스를 정의하는 yaml 파일
- 버전 별로 명령어가 다르다.
Cheat Sheet
- links
- 도커 엔진이 컨테이너에 환경변수로 필요한 정보를 주입 시킨다.
- /etc/hosts 에 ip 주소가 등록이 된다.
- posts
- 9090-9091 : 8080-8081 // 대역으로 연결
Container Scale Out
compose 로 여러개의 컨테이너를 띄울 수 있지만, 웹 뒷 단에 웹 서버를 여러개를 띄우기 위해서는 별도의 설정이 필요하다. 해당 명령어를 지원하는데, 앞단에 프록스 서버를 두어서 연결해야 한다.
이걸 편하게 해주는게 ‘Kubernetes’
명령어
-
기본 docker-compose.yml 파일 실행
$ docker-compose up -d
default 파일이 docker-compose.yml 이면 위 명령어로 docker-compose.yml 파일 실행 가능.
Docker Hub
이미지 하나 당, Repository 하나.
Repository 에 우리 이미지 넣기
-
$ docker login
-
$ docker tag ~
-
$ docker push ~
Registry
도커를 내부망에서 사용하려고 할 때.
- 도커 이미지를 저장하고 공유 할 수 있는 서버
- DTR(I)? 의 상용 버전
레지스트리 저장소를 외부로 분리
이미지 데이터를 어디에 저장 할 것인가?
- Storage Drivers: 클라우드 저장소
- S3
- Azure
- swift
- oss
- Google Cloud Storage
Docker CI Tool Stack
- https://github.com/marcelbirkner/docker-ci-tool-stack
GitLab
이슈관리, 코드리뷰, CI/CD 를 지원하는 통합 개발 환경 서버.
- 데이터 저장 위치
- 포트 : 80, 443, 22
docker run --detach \
--hostname localhost \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
띄워 봤으면, yml 로 만들고, 이미지를 Repository 에 올려서 사용해라.
Docker CI
git 에 도커 빌드를 위한 Dockfile 을 올려두고 Docker Hub 와 연동을 해서 git 에서 push 를 하면 해당 Repository를 바라보고 있는 Docker Hub 에서 자동으로 빌드를 할 수 있게 만들 수 있다.
Jenkins
TAG 를 빌드 파라미터 값으로 주고, 명령어에서는 ${TAG} 로 지정할 수 있다.