Victoree's Blog

[etc] 혼란스러운 도커 입문자에게 본문

Infra/Docker

[etc] 혼란스러운 도커 입문자에게

victoree 2021. 5. 28. 15:10
728x90

Docker는 Virtual machine이 아니다!

  • $ docker run --name ubuntu_test ubuntu
    • 위 명령어를 실행시켜보면, 쉘창에서는 아무 변화없고 우분투 서버도 실행되지 않고 있다

      $ docker ps -a

      d8f31b2635d9 ubuntu "/bin/bash" 19 seconds ago Exited (0) 17 seconds ago ubuntu_test

    • Status가 "Exited"임을 볼 수 있다
  • 도커 컨테이너는 Virtual Machine과 같이 하나의 온전한 서버를 제공하는 것이 아니라 명령을 실행하는 환경만 제공하고 그 명령을 실행할 뿐이다
  • 우분투 컨테이너 실행 시, 서버를 실행시키는 것이 아니라 "/bin/bash"가 실행되는 것

일반적으로 OS를 실행시킨다?

기본적으로 Virtual Machine은 아래와 같은 속성을 가진다

다만, 여러 하드웨어 자원을 Host OS로 부터 할당받은 것만 사용하도록 되어있음

  • 프로그램 실행 기능
    • Memory, CPU 등의 하드웨어 자원을 이용하여 프로그램을 실행할 수 있는 환경을 제공
  • 네트워크 서비스 제공
    • NIC 등을 하드웨어 자원을 인식해서 네트워크 처리가 가능한 환경을 제공
  • 키보드, 모니터, 마우스 등과 같은 주변 장치의 입출력 처리
    • 사용자로부터 입력과 결과를 출력해주는 기능 제공
  • 외부에서 접속할 수 있는 환경
    • sshd등과 같은 데몬을 실행하여 서버 외부에서 네트워크를 이용하여 원격에서 접속할 수 있는 기능제공

컨테이너를 실행하면 Bash가 실행되어 prompt가 container의 bash prompt가 떠야하는 게 아닌가?

*Docker 컨테이너는 단지 명령만 실행하고 그 결과를 보여주는 기능을 수행한다*

  • 위에서는 우분투 이미지의 기본 명령인 "/bin/bash"를 실행하고 결과를 출력 후 종료한 것
  • 해당 "/bin/bash" 명령은 표준 출력(STDOUT), 표준 에러(STDERR)로 아무것도 출력을 하지 않기 때문에, 아무 일이 일어나지 않은 것처럼 보일뿐이다

Bash Shell에서 명령어 실행시키기

알고있던 -i-t 리뷰!

  • i
    • interactive 모드로 표준 입력과 표준 출력을 키보드와 화면을 통해 가능하도록 하는 옵션
  • t
    • 텍스트 기반의 터미널(TTY)을 애뮬레이션해주는 옵션

도커 컨테이너를 백그라운드로 실행하기?

  1. 1단계
  • -d
    • Docker 컨테이너를 백그라운드 프로세스로 실행하는 옵션
    • -d 옵션을 주고 실행해도 docker 컨테이너 상태가 Exited이다
  • docker 컨테이너를 실행하는 것 -> Host OS에서 프로세스를 실행하는 것과 동일한 개념
  • Docker 컨테이너에서 실행되는 명령이 계속 실행되는 것이 아니면, 그 명령이 종료되었을 때 컨테이너도 종료됨
  1. 2단계
  • $ docker run -d -it --name ubuntu_test ubuntu
  • 일단 백그라운드 모드로 실행하기는 성공
  • attach 명령을 이용하여 해당 컨테이너에 접속 가능
  • 하지만, exit으로 shell을 빠져나오면 컨테이너도 같이 종료되게 됨
    • 위 명령어는 -it 옵션을 백그라운드로 실행시킨 것
    • attach 명령어는 VM의 리모트쉘 접속같은 개념이 아니라 컨테이너의 현재 Host OS shell(local)의 stdout, stderr을 docker 컨테이너에 붙이는 명령일 뿐
  1. 3단계 => 정답은?
  • Docker의 컨테이너에서 실행되는 명령(위 예제에서는 /bin/bash)을 영원히 실행되게 하면 된다
    • 어플리케이션 서버를 무한루프로 동작하게 하면 됨
    • 그런데, 어플리케이션 서버들은 이미 무한루프로 동작하는 프로그램이다
  • 주의사항
    • Docker 컨테이너에서 실행되는 애플리케이션 서버(DB 서버 포함)은 back ground 모드가 아닌 fore ground 모드로 실행해야 한다.
    • Fore Ground로 띄워놓았기 때문에, 특정 옵션을 수정하고 재시작하면 컨테이너가 종료해버림
    • 옵션 하나 바꾸는 것도 컨테이너에서 직접 바꾸면 안되고 Dockerfile을 이용해서 바꾼 후 이미지를 빌드하고, 컨테이너를 시작해야만 적용할 수 있다

대부분의 컨테이너는 최소한의 구성만 갖춰져있다

  • 컨테이너 내부에 들어가면 어플리케이션 서버를 관리할 수 있는 요소가 아무것도 없다
  • Docker 컨테이너는 Minimalism을 중요시하기 때문에 딱 필요한 것만 설치한다
    • 그렇기 때문에, 기본 도구도 없는 경우가...ㅠ

참고문헌

728x90

'Infra > Docker' 카테고리의 다른 글

[8] Docker Compose  (0) 2021.05.28
[7] Docker Swarm  (0) 2021.05.28
[6] DockerDemon  (2) 2021.05.28
[5] Dockerfile  (0) 2021.05.28
[4] Docker 이미지  (0) 2021.04.26
Comments