
제수기 - 제발 수업내용을 기억해라 / 단순 수업정리 시리즈
가상 컴퓨터를 만들어서 돌리는 기술이 있다.
예전에는 그냥 물리적인 baremetal 우리가 아는 물리적 컴퓨터가 있고 - 소프트웨어 돌리고 하는 거에서
virtual machine을 이용해서 컴퓨터 위에 컴퓨터를 돌리는 게 가능해졌다. 단점은 꽤나 무겁다는 거였다.
이 무거운 걸 경쾌하게 만든 게 containerization docker도 여기에 해당한다.
baremetal은 하드웨어에 os, software들이 설치된다. virtual machine은 컴퓨터 자원들을 조금 더 활용하기 위해서 하드웨어 위에 가상컴퓨터 하나를 더 올린다. 하드웨어 위에 host.os 올리고 그 위에 virutal machine 위에 virtual os, 그 위에 software.
물리머신(하드웨어)-host os-docker engine(runtime)-image를 기반으로 - 실제 실행 주체인container가 돌아간다.
위에 있는 container, image 크기가 커봐야 1gb. 굉장히 작다. 몇 mb로 돌아간다.
가벼울 수 있는 이유는? : image가 하나의 컴퓨터인데, 이 안에 os가 있을 텐데, 이걸 실제 host os와 공유한다.
작동방식 : host os의 상당부분을 공유한다는 건 티가 잘 안 난다. 그냥 container, image os 여기가 하나의 컴퓨터라고 인식하면 된다. 보통 image os에 리눅스나 ubuntu 이런 걸 쓴다.
그 위에 python, django를 쌓는다. 이걸 미리 하나의 image로 만들어둔다. 여기서 'image'는 실행 가능한 상태를 스냅샷처럼 찍어놓는 것을 의미한다. 이걸 실제 container라는 형태로 실행하게 된다.
이미지-컨테이너의 관계 : 어떤 program을 실행하려면 다운 해서 저장 객체에 저장해둔다. 더블클릭해서 실행하게 하면 process화 돼서 실행이 된다. 이렇게 실제 실행중인 상태를 process라고 한다. 이처럼 image는 실행할 수 있는 상태. 파일이 있는 거고, 실제로 구동하려면 container를 해야 한다.
program이 image, process가 container와 비슷한 역할을 한다고 이해하면 된다.
wsl2가 뭐길래?
host os옆에WSL(리눅스에서 만든) 걸 기반으로docker engine이 돌아간다. 참고로docker engine은 다운로드 받은docker파일 이라고 보면 된다.
docker를 cmd로 다루게 되면, desktop 버전도 이해가 잘 될 거다. 먼저 cmd로 다뤄보자.
image를 어디서 가져오냐. docker hub

파이썬 이미지를 검색해서 찾을 수 있다. linux os 위에 python interpreter가 있고 이걸 image로 만들 걸 보여주는 거.

nginx : 장고 앞에서 요청을 받아내는 image. 이걸 다운받아서 실행하면 웹서버가 하나 돌아가게 된다.

docker를 입력하면 command 할 수 있는 내용들이 쭉 나온다.

image 명령어 / container 명령어 나눠져있다.
순서 : 이미지가 있어야 컨테이너화가 가능하다!!!
docker image lsdocker container lsdocker search hello-worldofficial imgae는 사용자 이름 생략하고 official로 올라온다. cmd에서 docker hub에 hello world로 있는 image를 검색해보자. 여기서 사용자 이름이 붙은 것과 없는 것을 확인할 수 있다.

docker pull hello-world : 불러오기docker image ls : 잘 불러졌는지 확인docker run hello-world : 실행
docker run -d -p 80:80 nginx
위에서 봤던 host os , docker engine, image, container... 이 구조에서

host os(local host) 안의 docker 안에 nginx container 하나가 돌고 있는 거다.
docker는 공유기 정도로 생각하면 된다. 컴퓨터와 컴퓨터가 연결되려면 공유기에 꽂거나 랜선으로 연결을 해야 할텐데 그 역할을docker가 한다.docker network. 아무튼 연결해준다.
-d deamon : background process
-d deamon이 들어간 이유 .. 설명 놓쳤다.
-p publish(port) : 80:80
80이 뭐냐. localhost:80이 앞에 80. 뒤에 80이 nginx:80.
docker container의 nginx container 안에 nginx 80이 돌고 있다(웹서버는 기본 포트가 80이다). localhost에:80 요청이 들어오면 nginx 안에 있는 80 데몬에 연결해줘. 라고 하게 되는 것.

원래는 접속하려면 ip 등이 필요한데 이때는 필요없다.
localhost:80 쓰면 웹페이지가 열린다. (주소창에서 기본포트라서 :80 이 부분은 유지되지 않고 사라진다.)

docker container ls
지금 돌아가는 거

docker container ls -a
만든 거 다 확인

docker ps -a
얘가 더 잘 쓰인다.

CONTAINER ID : 앞에 3글자가 식별자 / IMAGE : 어떤 이미지인지 / COMMAND : 명령어 - 언제 만들어진건지(이미지로부터 컨테이너가 만들어진 시점) / STATUS : up 되고 있음 exited : 끝났음
아까 처음꺼는 이름을 정하지 않았기 때문에 이름이 아무렇게나 지어졌다. wizardly_varahamihira라고 지어진 게 보인다. 이번에는 이름을 ngix2. 로컬호스트 81로 해서 run을 해보자. 이제 두개가 돌아가는 걸 확인해 볼 수 있다.



- container -> image 순으로 삭제가 된다. -f를 넣어서 강제 시키면 강제로 삭제가 되기는 한다.
- 중단 먼저 해야 삭제가 된다.
docker container stop ngix2docker container rm 330docker image rm -f 0a399eb16751