제수기 > DevOps > Docker

Eunbi Jo·2025년 2월 4일
1

제수기

목록 보기
82/90
post-thumbnail
제수기 - 제발 수업내용을 기억해라 / 단순 수업정리 시리즈

docker - 가상화 기술

가상 컴퓨터를 만들어서 돌리는 기술이 있다.

✒️왜 나오게 됐냐면

  1. 예전에는 그냥 물리적인 baremetal 우리가 아는 물리적 컴퓨터가 있고 - 소프트웨어 돌리고 하는 거에서

  2. virtual machine을 이용해서 컴퓨터 위에 컴퓨터를 돌리는 게 가능해졌다. 단점은 꽤나 무겁다는 거였다.

  3. 이 무거운 걸 경쾌하게 만든 게 containerization docker도 여기에 해당한다.

baremetal - virutal machine

baremetal은 하드웨어에 os, software들이 설치된다. virtual machine은 컴퓨터 자원들을 조금 더 활용하기 위해서 하드웨어 위에 가상컴퓨터 하나를 더 올린다. 하드웨어 위에 host.os 올리고 그 위에 virutal machine 위에 virtual os, 그 위에 software.

containerization

물리머신(하드웨어) - 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와 비슷한 역할을 한다고 이해하면 된다.

docker 설치

  • 윈도우 AMD64 버젼으로 설치
  • 설치중 Hyper-V 대신 WSL2를 사용하는 옵션을 꼭 활성화

wsl2가 뭐길래?

host os 옆에 WSL(리눅스에서 만든) 걸 기반으로 docker engine이 돌아간다. 참고로 docker engine은 다운로드 받은 docker파일 이라고 보면 된다.

cmd로 docker 다뤄보기

docker를 cmd로 다루게 되면, desktop 버전도 이해가 잘 될 거다. 먼저 cmd로 다뤄보자.

docker hub

image를 어디서 가져오냐. docker hub

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

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

cmd 명령어

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

  • image 명령어 / container 명령어 나눠져있다.

  • 순서 : 이미지가 있어야 컨테이너화가 가능하다!!!

image, container에 뭐가 있는지 확인하는 명령어

  • docker image ls
  • docker container ls

image 찾기

  • docker search hello-world

official imgae는 사용자 이름 생략하고 official로 올라온다. cmd에서 docker hub에 hello world로 있는 image를 검색해보자. 여기서 사용자 이름이 붙은 것과 없는 것을 확인할 수 있다.

image 실행해보기

  • docker pull hello-world : 불러오기
  • docker image ls : 잘 불러졌는지 확인
  • docker run hello-world : 실행
    잘 실행이 되면, 아래와 같이 working correctly했다는 안내 메시지가 나온다. 또 아래에 사용법도 간단히 안내된다. ubuntu를 쓰려면 어떻게 해라 이런 내용도 있다.

-d, -p

  • 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 containernginx 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을 해보자. 이제 두개가 돌아가는 걸 확인해 볼 수 있다.

2개가 돌아가는 구조 이해

  • container 하나는 컴퓨터 하나라고 이해해도 된다. os, software 이 구조를 똑같이 가지고 있기 때문이다.
  • 이 안에 nginx가 돌고 있는데 하나는 :80에서 기다리고 있고, 나머지도 :80에서 기다리고 있다.
  • 브라우저에서 만약 로컬호스트 80으로 접속을 하면 도커에 가서 nginx :80을 찾아가게 돼있고, :81로 접속하면 도커에서 다른 nginx :80으로 가달라는 게 된다.

container / image 삭제

  • container -> image 순으로 삭제가 된다. -f를 넣어서 강제 시키면 강제로 삭제가 되기는 한다.
  • 중단 먼저 해야 삭제가 된다.
  • 식별자(CONTAINER ID 처음 3글자)로도 삭제/중지 등을 할 수 있다.
  • IMAGE 이름으로도 할 수 있고, CONTAINER ID 전부를 다 넣어서 할 수도 있다.
  • docker container stop ngix2
  • docker container rm 330
  • docker image rm -f 0a399eb16751
    이런 식으로 중단 / 삭제.

0개의 댓글