docker는 2013년에 dotcloud에서 생성 (솔로몬 하익스)
container 기술은 원래 Linux에 포함된 LXC(Linux Container)라는 커널 기술을 활용한 것
container은 100% Linux
Container은 작은 가상화 sever -> micro-vm (application 단위로 구동되는 서버)
1991 ~
- linux안에는 LXC 가 존재했고 이를 이용해서 container을 만들 수 있었음.
2010 ~
- 가상화 기술 sever base로 변경되기 시작함
2013 ~ : 가상화 기술 (docker 생성)
2015 ~ : 컨테이너 관리 도구 만들어짐
- kubernetes
VM 가상화 보다 훨씬 빠르고 가벼운 경량화 기술.
경량화 기술이기 때문에 기본적으로 제공되는 명령어 (ping etc..) 및 도구들이 제공되지 않음.
image의 복사본과 process를 합친 것.
process의 추상화로 ps 명령어를 통해서 조회가 가능함.
PID 1이 무엇이냐에 따라 차이가 존재함.
system container
appication container
단일 application이 컨테이너 내에서 실행됨.
주체성, 독립성, 격리성을 가짐.
pid 1이 해당 application이다.
보통 많이 사용됨.
1) VM
server 기반의 가상화
Image 기반 -> OS, package 등의 운영 환경에 필요한 파일, 데이터를 포함함 -> 패키징
- OVF 기술을 통해 패키징을 함
2) Container
애플리케이션 기반의 가상화, 경량화
Image 기반 -> OS, package 등의 운영 환경에 필요한 파일, 데이터를 포함함 -> 패키징
image는 불변, 수정 불가 -> container안에서 update 하여 새로운 이미지를 생성해야함.
1) chroot
2) namespace
3) cgroup (contral group)
1) dockerd
2) containerd
3) runC
3->4) socket 통신(docker.shock) -> /var/run 경로에 있음. => kerner과 통신병 역할을 수행함
4) host OS의 kerner
https://www.docker.com/play-with-docker/
https://hub.docker.com/ 에 로그인이 되어있어야함.
lab environment -> set start
login 한 후 start
add new instatnce 하면 리눅스 환경이 뜨게 됨.
실습
nginx image를 다운받아서 container를 만들고 웹에 띄워보기
# nginx docker image 불러오기
docker pull nginx:1.25.3-alpine
# docker image 확인하기
docker images
# image를 컨테이너 화 하기
docker run -d -p 8001:80 --name=myweb nginx:1.25.3-alpine
# docker process 확인하기
docker ps
# web 화면에 띄울 index.html 생성
vi index.html
# index.html에서 적어줄 것
<h1> hello docker </h1>
# html 파일을 nginx 아래에 넣어주기
docker cp index.html myweb:/usr/share/nginx/html/index.html
위를 모두 실행후 위쪽에 open port 8001을 보고 8001을 눌러주면 web 화면이 하나 뜨게 되고 내가 작성한 hello world가 보이게 됨.