도커에 대해 T-Academy로 형들과 도커에 대한 이해하는것으로 스터디를 해보기로했다.
실습을 위해 아래의 주소로 들어가서 확인
도커의 등장
솔로몬 하이크 -> 파이콘 2013 에서 등장
The future of Linux containers
Mac OS에서 실행 해보자
ubuntu(docker container)
CentOs(docker container)
Busybox(docker container)
- 도커 커널을 위한 최소한의 이미지
- 하나의 실행 파일 안에 스트립 다운된 일부 유닉스 도구들을 제공하는 소프트웨어
- 다수가 리눅스 커널이 제공하는 인터페이스와 함께 동작하도록 설계되어있음 (자원이 매우 적은 임베디드 운영체제를 위해 작성됨)
우분투 에서 실행된 hello, world
$docker run -it ubuntu:latest echo "hello,world!"
우분투의 bash로 접속하기
$docker run -it ubuntu:latest bash
/etc/lsb-realease
centos
/etc/centos-release
busybox
docker run -it busybox:latest sh
컨테이너
컨테이너 : 가상머신
각각의 VM = 서로 다른 환경
각각의 컨테이너 = 서로 다른 환경
Virtual Machine == Container ?같을까 ?
Virtual Machine : 하드웨어 가상화
소프트웨어로 구현된 하드웨어
컨테이너 : 하드웨어 가상화가 아님
OS에서 지원하는 기능을 사용 (리눅스 커널을 사용)
격리된 환경에서 프로세스를 실행
한마디로 한 이미지의 프로세스
가상화 된 하드웨어 필요없이 os의 커널을 사용해서 동작함
chroot
실제 루트는 / 이지만 ~/box 가 루트인것처럼 인식되게함
자신의 루트를 ~/box로 인식함
#chroot /root/box/ bash
ldd 의존하고 있는 파일의 목록을 볼 수 있다.
예시) ldd bash
도커는 마치 OS의 커널을 위의 chroot 처럼 process를 격리 시켜서 만들어져 동작함
Linux (croups, namespaces, nettling, selinux, netfilter, capabilities, apparmpr) 등의 리눅스 커널을 Docker(lib container, libvirt, lxc, system-nspawn) 등으로 따로 격리 시킨것임
예전에는 lxc를 사용했지만...추후에 ...
실습
mysql
wordpress
MySQL
$docker run -d -p 3306:3306 --name mysql mysql:latest
앞의 포트 : 안에서 접속할 포트
뒤의 포트 : 밖에서 접속할 포트
-d : 백그라운드에서 실행한다는 뜻
WordPress
이미지
특정 프로세스를 실행하기 위한 환경
- 계층화된 파일 시스템
- 이미지는 파일들의 집합
- 프로세스가 실행되는 환경도 결국 파일들의 집합
도커의 기본 아키텍처
linux
docker run -> server , container(process)
macOS
docker run ->xhyve라는 가상화된 머신에다가 server와 container가 실행됨
xhyve
macOS의 가상화 방식(경량 가상 머신)
컨테이너 = xhyve에서 실행된 프로세스
호스트 머신과 자연스럽게 결합
네트워크 / 볼륨 등
호스트 머신처럼 사용가능
왜 도커를 사용하는가 ??
컨테이너가 필요한 이유
보편적 물리법칙 언제 어디서나 동일하게 적용된다.
하지만 컴퓨터의 환경은 보편적이지 않다
각각의 OS에서 설치되는 프로그램은 다 다르다. 하나로 통일이 되지 않기 때문에
서버 관리도 어렵다.
도커를 사용하게 되면 어플리케이션 실행 환경까지의 최소한의 파일을 모아둔것이기 때문에 깔끔하게 설치를 할 수 있다.
이미지 : 동작되는게 보장이된다. 사용할 프로세스를 미리 만들어놓기 때문에
개발환경의 pc의 환경을 미리 보장하고 사용하는것이 가능하기 때문에
Q1 : 도커는 시스템전체를 다 사용하나요?
cgroups는 프로세스의 자원을 사용할지 제한을두게 되는데, docker에서도 자원의 제약을 한정해서 쓸 수 있다.
'BackEnd > Docker' 카테고리의 다른 글
도커 명령어 (1) | 2020.02.09 |
---|---|
컨테이너 기반 가상화 플랫폼 '도커(Docker)' 의 이해 2강 (0) | 2019.08.27 |
[docker] MySQL 접속하기 (2) (0) | 2019.06.30 |
[Docker] install Mysql (0) | 2019.06.23 |