일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 전문가를 위한 파이썬
- 플랫폼
- Refactoring
- Ethereum
- rust
- AWS
- Fast API
- Kubernetes
- 이더리움
- BAEKJOON
- Python
- Container
- 블록체인
- 파이썬
- BlockChain
- docker
- 알고리즘
- Algorithm
- IMAGE
- RabbitMQ
- dockerfile
- function
- 동시성
- 코어 이더리움 프로그래밍
- fluent python
- Thread
- guru
- Network
- 러스트
- 백준
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
[etc] 혼란스러운 도커 입문자에게 본문
728x90
Docker는 Virtual machine이 아니다!
$ docker run --name ubuntu_test ubuntu
- 위 명령어를 실행시켜보면, 쉘창에서는 아무 변화없고 우분투 서버도 실행되지 않고 있다
$ docker ps -a
d8f31b2635d9 ubuntu "/bin/bash" 19 seconds agoExited
(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단계
-d
- Docker 컨테이너를 백그라운드 프로세스로 실행하는 옵션
-d
옵션을 주고 실행해도 docker 컨테이너 상태가 Exited이다
- docker 컨테이너를 실행하는 것 -> Host OS에서 프로세스를 실행하는 것과 동일한 개념
- Docker 컨테이너에서 실행되는 명령이 계속 실행되는 것이 아니면, 그 명령이 종료되었을 때 컨테이너도 종료됨
- 2단계
$ docker run -d -it --name ubuntu_test ubuntu
- 일단 백그라운드 모드로 실행하기는 성공
attach
명령을 이용하여 해당 컨테이너에 접속 가능- 하지만, exit으로 shell을 빠져나오면 컨테이너도 같이 종료되게 됨
- 위 명령어는
-it
옵션을 백그라운드로 실행시킨 것 attach
명령어는 VM의 리모트쉘 접속같은 개념이 아니라 컨테이너의 현재 Host OS shell(local)의 stdout, stderr을 docker 컨테이너에 붙이는 명령일 뿐
- 위 명령어는
- 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