[Fast Campus] Docker 강의 2

Jul 12, 2019


  • 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 파일
  • 버전 별로 명령어가 다르다.

스크린샷 2019-07-13 오후 3.13.53


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 ~

    스크린샷 2019-07-13 오후 4.15.16

    스크린샷 2019-07-13 오후 4.15.16

  • $ 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} 로 지정할 수 있다.