1일차
Docker ?
리눅스 컨테이너를 이여 -> 서비스 패키징 배포, 경량의 가상화 플랫폼
패키징과 배포! 가 더 알맞다.
Go 언어로 개발되어 있음
라이센스 : CE, 엔터프라이즈 (상용) : 기술지원 및, 안정적으로 사용
기본적으로는 오픈소스, 아파치 2.0
RESTful 하다.
왜 도커를 사용해야 하는가?
The Matrix From Hell
다양한 HW / SW 를 소싱, 배포를 해야 할 경우의 수가 많다. 이거를 관리하는 효율적인 문제가 필요
환경세팅을 일일이 해야하는 번거로움... 발생 -> 해결책으로 도커를 사용..
컨테이너로 독립적인 모듈을 구성하여 배포하기만하면됨
맥에서 ㅌ아파치 톰캣 설치
1.2.3.4.5 단계
윈도우에서 톰캣설치
1.2.3.4.5 단계 .... 환경, HW 별 설치해야하는 것도 다르지만....
도커로 컨테이너화 하여 일관성있게 동일하게 배포가 가능
어떤 OS/ Device 에서도 동일한 방식으로 베포가 가능
도커는 가볍다?
VM에 비해 이미지 파일 크기가 작고, 빠르게 이미지들 만들고 실행 가능
기존의 하이퍼바이저에 비해 엄청 경량!!
불변의 인스트럭처
이미지 기반의 애플리케이션 배포 패러다임
많은 서버를 동적으로 관리하는 클라우드 환경에서 효과적으로 유연하게 배포 가능
인프라 자체가 관리가능
Stateless 하고 :
Scable하고 : 동일
이미지 기반의 어플리케이션 배포
도커는 변경 불가능한 인프라를 가능하게 한다.
구글에서 모든것 , 컨테이너 러닝중인
Limited Isolation
Released CGroups
Released LMCTFX
Using ..?
도커가 성공한 이유
리눅스 컨테이너는 소개된지 10년이 지난 기술이지만, 설정이 복잡하고 ㅏ용하기 어려워 널리 사용 되지 못햇음 -> 도커는 사용이 쉽다
도커의 시작
dotCloud 의 Solomon Hykes가 PyCon2013에 소개
명령 예 :
docker run busybox echo "hello world"
일련의 과정을 ..
컨테이너 생성
네트워크 인터페이스를 만들어? 붙이고 컨테이너를
CE ,EE 버전으로 나누어 져있음
CE : 무료, 최신, 클라이언트 위주(개발자, 리눅스, 클라우드)
쿠베 도입 -> CE 써도 무방함
도커 클라이언트
도커 엔진과 통신하느 프로그램 , 윈도우 맥, 리누긋
CLI 클라이언트 위주로 교육 예정
도커 데스크탑 : 리눅스, 맥, 리눅스
Docker Toolbox : 도커 데스크탑의 이전버전 -> 데스크탑으로 안 되는 경우 사용
CE for Mac : 기반 기술이 다름
CE for window : Hyper-v 기술을 기반으로 한다
가장 좋은 환경은 Linux에 최적화
Kitemetic
템플릿 기반으로 , 컨테이너 관리하는 GUI
Docker Host OS
Ubuntu, CenOS , RHEL
COntainer OS( Core OS)
Debian, SUSE, Fedora, ETC ...
64 ㅣ트 리눅스 커널 버전 3.10 이상 환경, 도커 엔진이설치된 환경
도커 엔진
어플리케이션 을 컨테이너로 만들고 실행하게 해주는 데몬
Swarm , Kube~통합
Client -> REST API -> server(docker daemon)
가상머신이 올라와 있는 상태
도커 엔진이 스웜이나 여러가지와 통합되서 오케스트레이션잉 가능해짐
윈도우 는 도커 호스트 OS 일까?
하나의 도커 명령어로 도커가 뜨게.. 윈도우용 ... 버그도 많지만, 현재는 최적화가 잘 되어 있음
도커 머신
로컬, 리모트 서버에 도커 엔진을 설치하고 설정을 자동으로 해주는 프로비저닝 클라이언트
도커 허브
도커 이미지를 관리하는 저장소
오픈소스 공식 이미지 관리
공개 , 비공개, 유/무료
Docker Trusted Registry
유료
도커 이미지 저장소를 구축
설치형 인증지원
레지스트리 (무료), DTR (유료)
DUCP - 비추
Docker Universal Control Plan
도커 클러스터 관리도구
설치형(유료)
Docker Data Center
DUCP + DTR
Docker Cloud - 강추
도커 이미지, 컨테이너 관리르 지원
공개 비공개 클라우드 관리 가능
tutum 을 인수해서 통합
보안
모든 보안 실력자를 스카웃 -> 보안 이슈 모든 문제점을 해결 -> 돈으로 해결
Docker
수많은 IoT 장비에도 적용 됨
명령어
공유폴더 확인
설정 -> Resources -> Advanced -> Disk image location
Hypervisor
호스트컴퓨터에서 다수의 운영체제 를 동시에 실행하ㅣㄱ 위한 논ㄴ리적 플랫폼
aka 가상화 머신 모니터 가상화 머신 매니저
타입 1,2
Type 1
하드웨어에서 직접 실행되는
infra -> Hyper ->VM(Guest OS 를 할당해서 가져감으로 용량이 큼)
Type 2
OS 위에서 실행되는
도커는 여기 유형에 속한다고 보면됨
infra -> host os -> docker -> container(Guest OS를 안가져감)
도커는 Host OS 를 공유
단점은 ... Host OS의 의존도가 높아지게 됨
리눅스 컨테이너
단일 리눅스 호스트사에서 여러개 격리된.. 리눅스 시ㅡ템을 실행하기 위한 OS 수준의 실행
Libvirt
가상 호스트를 관리하는 툴킷
OpenVZ : 패러럴즈의 베이스가 됨
Imctfy
Warden
libContainer
libvirt, systemd
containerd
컨테이너 라이프 사이클 관리
OCI(Open Container Initiative)에 의해 관리
Docker 엔진의 코어 런타임 -> containerd 기반이다? , 오픈소스화 되어 있다...
도커 아키텍처
참조 블로그 : https://opennote46.tistory.com/207
클라이언트 환경변수
도커 호스트 를 어떻게 알고 바라 보느냐... -> 클라이언트 환경변수 를 통해 알아봄
기반 기술
Namespaces : 프로세스별 리소스 격리
가벼운 프로세스 가상화 기술
격리 된 작업공간 : 컨테이너
유형 6가지
cgroups (Control Groups) : 리소스 관리
특정 컨테이너가 지정한 ㅋ만큼 리소스를 쓰도록 제한
실행중인 어플리케이션이 원하는 만큼 리소스를 사용하게 함
memory, cpuset, net_prio,
Union Filesystem
리눅스 파일 시슽ㅁ : ext4, btrfs, xfs
다른 파일 ㅣ스템을 , Union mount 하도록 해주는 리눅스 파일 시스템 서비스
브랜치 : 여러개 나누어진 파일 시스템을 하나의 파일시스템 사용하게 해줌
read-only 레이러들의 통합
권한 수준
root 사용자와 동일한 수준의 권한이 필요
docker 데몬을 실행하기 위해서는 root 사용자 필요
TCP 포트가 아닌 Unix 소켓과 데몬이 바인딩 하기 떄문
보안 떄문, TCP 포트 외부 노출은 보안 위험한 행위
사용자그룹 ; docker
사용자 : docker
도커 허브의 대부분 사용자 이름이 docker 이다. 안맞을 경우 권한 문제 등.. 에러 발생 할 수 있음
따라서 도커이미지를 쓸때는 이름을 docker로 사용하는게 낫다
보안 상의 이유 -> root 권한으로 인한 우려
도커이미지
배포 ?? 이미즐 만드는 것이 가장 처음해야 할 일
컨테이너를 만들기 위한 템플릿
읽기 전용 파일시스템으로 도커를 서비스 를 배포하는 최소 단위
한가지이미지는 한가지 유형의 컨테이너를 만드는것
레이어 파일 시스템으로 각 파일 시스템이 곧 이미지
bootfs -> base image -> image -> image .... -> container 순으로 로딩
위의 구조가 또 하나의 이미지가 될 수 있고, 이미지 기반으로(최소 단위) 구성을 하여 또 구성하고 또 구성하는 형식
그래서 레이어 파일 시스템이다
그래서 이미지는 변형되어서는 안됨 -> 읽기 전용 -> 이뮤터블
bootfs
union mount
read-only 파일 시스템을 root 파일 시스템 위에 쌓는 구조 여러구조
cow (copy-on-write)
이미지 파일 공유 효율ㅇ을 높이기 위한 전략
가능한 적은 카피본을 얻기 위한 자업
논리적 참조를 통해 캐시화?
참조하는 경우 -? 동일한 파일을 공유
r/w 시작하는 경우 -? 공유하던 파일을 새로 복사후 참조 변경, copy-up: 최초 복사하는 행위
read-only 형식으로 레어이 구성하는게 효율적
이미지가 커지면 도커의 효율도 떨어지기 마련이다
도커이미지 저장 위치
도커 호스트 서버의 파일 시스템
도커 루트 디렉토리 아래 -> 커스텀 세팅 가능
설정 -> 리소스 -> 로케이션
도커 옵션 ?
베이스 이미지
이미지 부모가 되는 이미지
송식 베이스 이미지는 ubuntu 였지만, alpine으로 변경 됨
공식 베이스 이미지ㄴ 변경의 의미는 ???
alpine + docker?
용량이 많이 줄어듬, 100M -> 5M
이미지 줄이는 방법 : 베이스 이미지는 잘 선택 하는 것
도커는 어떻게 이미지의 변경된 부분만 저장하는가
git 과 유사
변경된 부분 -> hash 값 생성 -> 저장 -> 바뀐부분만 가져와서 Merge를 함 -> 이미지 재정의
변경된 부분만 푸쉬하고 풀하는 구조
Dockerfile
나만의 이미지를 만들기 위해, 설치할 SW, 필요한 설정을 정의하는 파일 이미지제작 과정을 투명하게 함 Configuration Management 에서 말하는 프로비즈넝 역할 : 왠만한 작업을 다 사용자화 해서 구성을 할 수 있다
# 주석, 보통 버전 명시
FROM : 도커파일일 만들기 위한 베이스 이미지 정의
RUN : 명령어. 쉘스크립트 명령어라고 보면됨
EXPOSE 80 : 80 포트로 서비스 해라
도커 실습
dockerfile 로 나만의 이미지 만들기
도커 이미지를 줄이는 방법
가벼운 베이스 이미지를 사용한다
Dockerfile 명령을 체인(파이프라인)으로 사용한다
RUN a | b -> 레이어 1개
RUN a, RUN b -> 레이어 2개
불필요한 레이어를 늘리지 말자 !!
빌드 도구를 설치하지 않는다.
maven 같은..
따로 빌드 구성
패키지 관리자를 정리한다.
apt clear
도커 컨테이너
이미지를 실행한 상태, 인스턴스
읽기/쓰기가 가능한 파일시스템
실행 독립 애플리케이션, 독립적인 인스턴스
컨테이너는 가상서버가 아니다. 엄밀히 프로세스다
VM활용
도커머신
베어그란트
도커머신
가상서버 관리하는데 편리함,
가상서버에 도커엔진을 설치 할 수 있게 도와주는 도구
로컬에 도커엔진 설치
리모트서버에 도커엔진 설치
boot2ocker (개발용, 운영용 아님)
도커 컨테이너를 실행하기 위한 가벼운 리눅스 배포판
Tiny Core Linux 기반
Docker machine 기본 설정
주요명령어
docker-machine start, stop, ssh, ..... 등등 많음
docker-machie ls
(생선된 서버 조회)docker-machine create -d virtualbox my-dev
(가상서버 하나 생성)
Vagrant
다양한 가상머신을 동일한 방식으로 만들고 관리할 수 있는 도구
VirtualBox, VMware, AWS 등 지원
루비언어를 Vagrantfile에 필요한 설정을 정의
down : https://www.vagrantup.com/downloads.html -> 설치
Vagrant 박스이미지 만들어져 있는 것 많음
CoreOS
Docker 호스트에 특화된 리눅스
최소화된 메모리 사용
systemd, etcd, fleet
CoreUpdate(상용)
클러스터링 가능 여러 호스트를 묶어줌
git clone https://github.com/coreos/coreos-vagrant.git
config.rb
num_instances=1
update_channel='stable'
forwarded_ports={49153 => 49153}
shared_folders = {'/apps', => '/apps'}
new_discovery_url='https://discovery.etcd
user-data
vagrant
Last updated
Was this helpful?