[도커] 2장 도커의 기본적인 사용법

공효은·2023년 5월 10일
0

도커

목록 보기
3/12
post-thumbnail
post-custom-banner

2.1 컨테이너로 Hello World 실행하기

다음 명령을 실행하면 Hello World 컨테이너가 실행된다.

docker container run diamol/ch02-hello-diamol
  • docker container run 명령은 컨테이너로 애플리케이션을 실행하라는 도커 명령이다.
  • 이 애플리케이션은 미리 도커로 실행하도록 패키징돼 누구나 내려받을 수 있도록 공유된 것이다. (이미지)
  • 지금 입력한명령이 이미지를 이용해 컨테이너를 실행하는 도커 명령이다.
  1. 우리는 이미지를 갖고있지 않았다.
  2. 그래서 출력 메시지 처음 부분에 unable to find image locally 라는 메시지가 출력되었다. (도커가 이미지를 내려받음)
  3. 이미지를 내려받고 나면 내려받은 이미지를 사용해 컨테이너를 실행한다.

빌드, 공유, 실행
빌드- 애플리케이션을 컨테이너에서 실행할 수 있도록 패키징
공유- 다른사람이 패키지를 사용할 수 있도록 공유
실행 - 이 패키지를 내려받은 사람이 컨테이너를 통해 애플리케이션 실행!

2.2 컨테이너란 무엇인가?

도커 컨테이너는 말 그대로 물건을 담는 컨테이너이다.

  • 호스트명, IP주소, 파일시스템까지 모두 도커가 만들어낸 가상리소스다, 이들이 서로 엮여 애플리케이션이 동작할 수 있는 환경이 만들어진다.
  • 서로 독립적인 환경을 갖지만 상자가 실행되는 컴퓨터의 CPU와 메모리, 운영체제를 공유한다.

이러한 구도가 중요한 이유는 격리와 밀집 이라는 얼핏 보면 모슨돼 보이는 조건을 동시에 만족할 수 있기 때문.

밀집: 컴퓨터에 CPU와 메모리가 허용하는 한 되도록 많은 수의 애플리케이션을 실행하는것.

  • 서로 다른 여러 애플리케이션을 동시에 실행하는 데는 제약이 따른다. 런타임 버전이 다를 수 있고, 서로 호환되지 않는 버전의 라이브러리를 사용하는가 하면, 어느 한 애플리케이션의 과다한 리소스를 필요로해 다른 애플리케이션의 리소스가 부족할 수 있다. 이런면을 고려하면 애플리케이션은 서로 독립된 환경에서 실행돼야한다.

가상 머신과 컨테이너의 차이

가상머신

  • 가상 머신은 컨테이너와 달리 호스트 컴퓨터의 운영체제를 공유하지 않고 별도의 운영체제를 필요로한다.
  • 각각의 가상 머신은 각자의 운영체제를 갖는다. 이것은 애플리케이션이 사용해야 할 CPU와 메모리 자원을 상당량 차지 한다.
  • 운영체제의 라이선스 비용과 운영체제 업데이트 설치 부담이 추가로 생긴다.
  • 가상 머신은 격리는 달성하더라도 밀집은 제공하지 못한다.

컨테이너

  • 각각의 컨테이너는 호스트 컴퓨터의 운영체제를 공유하므로 필요한 리소스가 크게 경감된다.
  • 호스트 컴퓨터에서 가상 머신에 비해 더 많은 수 의 애플리케이션을 실행할 수 있따.
  • 독립된 환경을 제공한다. => 밀집과 격리 동시에 달성

2.3 컨테이너를 원격 컴퓨터처럼 사용하기

도커를 이용하면 도구와 스크립트를 하나의 이미지로 패키징해 추가적인 설치나 설정 작업없이 컨테이너로 스크립트를 바로 실행할 수 있다.

컨테이너를 다른 방식으로 활용할 수도 있다. 컨테이너를 실행하고 실행된 컨테이너에 마치 원격 컴퓨터에 접속하듯 터미널을 통해 접근해보자.

docker container run --interactive --tty diamol/base

--interactive : 컨테이너에 접속된 상태가 된다.
--tty: 터미널 세션을 통해 컨테이너를 조작한다는 의미이다.

  • 원격 컴퓨터에 접속한 것과 같은 로컬 터미널 세션이 열려 있다는 것과 연결된 컴퓨터가 현재 실행 중인 컨테이너라는 것이다.

  • 도커 컨테이너는 호스트 컴퓨터의 운영체제를 공유한다. => 호스트 컴퓨터가 리눅스 머신이라면 리눅스 셸이 뜬다.

  • 도커는 컨테이너를 실행할 떄마다 무작위로 생성한 ID값을 부여한다. 그리고 이 ID 값중 일부분이 호스트 명이 된다.

2.4 컨테이너를 사용해 웹 사이트 호스팅

  • 컨테이너 내부의 애플리케이션이 실행 중이어야 컨테이너의 상태도 실행 중이 된다. 애플리케이션 프로세스가 종료되면 컨테이너의 상태도 Existed가 된다. 종료된 컨테이너는 CPU 자원이나 메모리를 사용하지 않는다.

  • 컨테이너가 종료돼도 컨테이너는 사라지지 않는다. 종료된 컨테이너는 사라지지 않고 그대로 남아있다.

컨테이너를 백그러운드에서 계속 동작하게 하려면~?

docker contaienr run --detach --publish 8088:80 diamo/ch02-hello-diamo-web

이 명령어를 사용하면 이 컨테이너는 종료되지 않고 백그라운드에서 실행된다.

--detach: 컨테이너를 백그라운드에서 실행하며 컨테이너 ID를 출력한다.
--publish: 컨테이너의 포트를 호스트 컴퓨터에 공개한다.

도커를 설치하면 호스트 컴퓨터의 네트워크 계층에 도커가 끼어들게 되는데. 그러면 호스트 컴퓨터에서 들어 오고 나가는 네트워크 트래픽을 모두 도커가 가로채서 그중 필요한 것을 컨테이너에 전달 할 수 있다.

  • 컨테이너는 외부 환경에 노출되지 않는다. 각 컨테이너는 고유의 IP 주소를 갖지만 이 IP 주소는 도커가 관리하는 내부 가상 네트워크의 주소지 호스트 컴퓨터가 연결된 물리네트워크에 연결된 것이 아니다. (컨테이너의 포트를 공개한다는 것은 도커가 호스트 컴퓨터의 포트를 주시하다가 해당 포트로 들어오는 트래픽을 컨테이너로 전달해 주는 것이다.)

-호스트 컴퓨터가 연결된 물리 네트워크의 컴퓨터는 컨테이너의 가상 IP 주소에 접근할 수 없다. 왜냐하면 이 주소는 도커 내부에만 존재하기 때문이다. 그러나 컨테이너의 포트가 공개됐으므로 컨테이너로 트래픽을 전달 할 수 있다.

2.5 도커가 컨테이너를 실행하는 원리

  • 도커엔진: 도커의 관리 기능을 맡는 컴포넌트다. 로컬 이미지 캐시를 담당하므로 새로운 이미지가 필요하면 이미지를 내려 받으며, 기존 이미지가 있다면 전에 내려받은 이미지를 사용한다. 호스트 운영체제와 함께 컨테이너와 가상 네트워크 등 도커 리소스를 만드는 일도 담당한다. 도커 엔진은 항시 동작하는 백그라운드 프로세스다.

  • 도커 엔진은 도커 API를 통해 맡은 기능을 수행한다. 도커 API는 HTTP 기반 REST API 다. 도커 엔진의 설정을 수정하면 이 API를 네트워크를 경유해 외부 컴퓨터로부터 호출 할 수 없도록 차단 하거나 허용할 수 있다.

  • 도커 명령행 인터페이스: (도커 CLI)는 도커 API의 클라이언트다. 우리가 docker 명령을 사용할 때 실제로 도커 API를 호출하는 것이 바로 도커 CLI다.

2.6 연습문제: 컨테이너 파일 시스템 다루기

아래 명령어로 파일 시스템 접근해서 내용 수정

docker exec -it {컨테이너 ID or 컨테이너 이름} /bin/sh

profile
잼나게 코딩하면서 살고 싶어요 ^O^/
post-custom-banner

0개의 댓글