다음 명령을 실행하면 Hello World 컨테이너가 실행된다.
docker container run diamol/ch02-hello-diamol
빌드, 공유, 실행
빌드- 애플리케이션을 컨테이너에서 실행할 수 있도록 패키징
공유- 다른사람이 패키지를 사용할 수 있도록 공유
실행 - 이 패키지를 내려받은 사람이 컨테이너를 통해 애플리케이션 실행!
도커 컨테이너는 말 그대로 물건을 담는 컨테이너이다.
이러한 구도가 중요한 이유는 격리와 밀집 이라는 얼핏 보면 모슨돼 보이는 조건을 동시에 만족할 수 있기 때문.
밀집: 컴퓨터에 CPU와 메모리가 허용하는 한 되도록 많은 수의 애플리케이션을 실행하는것.
도커를 이용하면 도구와 스크립트를 하나의 이미지로 패키징해 추가적인 설치나 설정 작업없이 컨테이너로 스크립트를 바로 실행할 수 있다.
컨테이너를 다른 방식으로 활용할 수도 있다. 컨테이너를 실행하고 실행된 컨테이너에 마치 원격 컴퓨터에 접속하듯 터미널을 통해 접근해보자.
docker container run --interactive --tty diamol/base
--interactive : 컨테이너에 접속된 상태가 된다.
--tty: 터미널 세션을 통해 컨테이너를 조작한다는 의미이다.
원격 컴퓨터에 접속한 것과 같은 로컬 터미널 세션이 열려 있다는 것과 연결된 컴퓨터가 현재 실행 중인 컨테이너라는 것이다.
도커 컨테이너는 호스트 컴퓨터의 운영체제를 공유한다. => 호스트 컴퓨터가 리눅스 머신이라면 리눅스 셸이 뜬다.
도커는 컨테이너를 실행할 떄마다 무작위로 생성한 ID값을 부여한다. 그리고 이 ID 값중 일부분이 호스트 명이 된다.
컨테이너 내부의 애플리케이션이 실행 중이어야 컨테이너의 상태도 실행 중이 된다. 애플리케이션 프로세스가 종료되면 컨테이너의 상태도 Existed가 된다. 종료된 컨테이너는 CPU 자원이나 메모리를 사용하지 않는다.
컨테이너가 종료돼도 컨테이너는 사라지지 않는다. 종료된 컨테이너는 사라지지 않고 그대로 남아있다.
컨테이너를 백그러운드에서 계속 동작하게 하려면~?
docker contaienr run --detach --publish 8088:80 diamo/ch02-hello-diamo-web
이 명령어를 사용하면 이 컨테이너는 종료되지 않고 백그라운드에서 실행된다.
--detach: 컨테이너를 백그라운드에서 실행하며 컨테이너 ID를 출력한다.
--publish: 컨테이너의 포트를 호스트 컴퓨터에 공개한다.
도커를 설치하면 호스트 컴퓨터의 네트워크 계층에 도커가 끼어들게 되는데. 그러면 호스트 컴퓨터에서 들어 오고 나가는 네트워크 트래픽을 모두 도커가 가로채서 그중 필요한 것을 컨테이너에 전달 할 수 있다.
-호스트 컴퓨터가 연결된 물리 네트워크의 컴퓨터는 컨테이너의 가상 IP 주소에 접근할 수 없다. 왜냐하면 이 주소는 도커 내부에만 존재하기 때문이다. 그러나 컨테이너의 포트가 공개됐으므로 컨테이너로 트래픽을 전달 할 수 있다.
도커엔진: 도커의 관리 기능을 맡는 컴포넌트다. 로컬 이미지 캐시를 담당하므로 새로운 이미지가 필요하면 이미지를 내려 받으며, 기존 이미지가 있다면 전에 내려받은 이미지를 사용한다. 호스트 운영체제와 함께 컨테이너와 가상 네트워크 등 도커 리소스를 만드는 일도 담당한다. 도커 엔진은 항시 동작하는 백그라운드 프로세스다.
도커 엔진은 도커 API를 통해 맡은 기능을 수행한다. 도커 API는 HTTP 기반 REST API 다. 도커 엔진의 설정을 수정하면 이 API를 네트워크를 경유해 외부 컴퓨터로부터 호출 할 수 없도록 차단 하거나 허용할 수 있다.
도커 명령행 인터페이스: (도커 CLI)는 도커 API의 클라이언트다. 우리가 docker 명령을 사용할 때 실제로 도커 API를 호출하는 것이 바로 도커 CLI다.
아래 명령어로 파일 시스템 접근해서 내용 수정
docker exec -it {컨테이너 ID or 컨테이너 이름} /bin/sh