Docker Study - 도커 엔진 (1)
목차
도커 엔진에서 사용하는 기본 단위는 이미지와 컨테이너 입니다.
도커 이미지
도커 이미지란 컨테이너를 생성할 때 필요한 요소이며, 여러 계층으로 된 바이너리 파일로 존재하고, 컨테이너의 생성과 실행에서 읽기 전용으로 사용됩니다. 이미지의 이름은 기본적으로 [저장소 이름]/[이미지 이름]:[태그]로 구성되어 있습니다.
예제 : (저장소 이름)ailcek106 / (이미지 이름)ubuntu:(태그)14.04
도커 컨테이너
도커 이미지로 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일이 들어 있는 파일시스템과 격리도니 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성되고, 이것이 바로 도커 컨테이너가 됩니다.
대부분의 도커 컨테이너는 생성될 때 사용된 도커 이미지의 종류에 따라 알맞은 설정과 파일을 통해 이미지의 목적에 맞도록 사용되는 것이 일반적입니다. 그리고 읽기 전용으로 사용하되 수정 사항은 컨테이너 계층에 저장하므로 컨테이너에서 무엇을 하던지 원본 이미지에는 영향을 주지 못합니다.
도커 컨테이너 생성,삭제
docker -v #version check
docker run -i -t ubuntu:14.04 #우분투14.04버전 이미지를 사용하여 컨테이너 생성
도커엔진에서 컨테이너를 생성 시 이미지가 로컬에 존재하지 않으면 도커 허브에서 자동으로 내려받아서 생성을 진행하며 완료 시 실행되며 컨테이너 내부로 진입합니다.
명령어에서 -i 는 상호 입출력을 -t 옵션으로 tty를 활성화해서 bash 셸을 사용할 수 있도록 컨테이너를 설정했습니다.
root@0f4c5b82c03f:/\\# ls #독립된 컨테이너에선 아무것도 설치되어 있지 않다
root@0f4c5b82c03f:/\\# exit #Ctrl + D,P,Q들로 컨테이너를 나온다
이렇게 셸의 사용자명과 호스트명이 변경되었다면 컨테이너 내부라는 뜻입니다.
기본 사용자는 root이며 호스트명은 16진수 랜덤 해시값이며 무작위 유니크ID의 앞부분입니다.
docker images #도커 엔진에 존재하는 이미지들을 출력
docker create #run으로도 컨테이너 생성되지만 실행까지 되고, create는 생성만한다
docker create -i -t --name mycentos centos:7 #name으로 컨테이너의 이름을 지정할 수 있다
docker start mycentos # or attach 생성된 컨테이너명으로 컨테이너를 실행, 접속한다
docker stop #실행중인 컨테이너를 중지한다
docker ps #현재 실행중인 컨테이너를 출력 -a 옵션으로 모든 컨테이너를 출력할 수 있다
docker rm mycentos #컨테이너를 삭제 실행중이면 삭제할 수 없다
도커 컨테이너를 외부에 노출
컨테이너는 가상 머신과 마찬가지로 가상 IP주소를 할당받으며 컨테이너에 172.17.0.x 의 IP를 순차적으로 할당합니다 하지만 기본설정의 컨테이너만으로는 노출되지 않으며 도커가 설치된 호스트에서만 접근할 수 있습니다. 외부에 노출되기 위해서는 eth0의 IP와 port를 호스트에 바인딩해야 합니다.
docker run -i -t --name mywebserver -p 80:80 ubuntu:14.04
# -p 은 컨테이너 포트를 호스트에 바인딩해 연결합니다
# -p를 여러번 써서 여러개의 포트를 개방할수도 있습니다.
# 80:80 는 [호스트 포트]:[컨테이너 포트]
호스트의 IP와 port를 컨테이너와 연결한다는 개념은 아주 중요합니다. 예를 들어 Apache web server는 172대역을 가진 컨테이너의 NAT IP와 80번 port로 서비스하므로 여기에 접근하려면 172.17.0.x:80 의 주소로 접근해야 합니다.
- Host IP의 80번 포트로 접근
- 80번 포트는 컨테이너의 80번 포트로 포워딩
- 웹서버에 접근