도커 컨테이너
이미지로 컨테이너를 생성하면 해당이미지의 목적에 맞는 파일이 들어있는 파일 시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성된다.
예를들어 웹 서버 도커 이미지로부터 여러개의 컨테이너를 생성하면 생성된 컨테이너의 개수만틈 웹서버가 생성되고, 이 컨테이너들은 외부에 웹 서비스를 제공하는데 사용된다.
컨테이너는 이미지를 읽기 전용으로 사용하고, 이미지에서 변경된 사항만 컨테이너 계층에 저장하므로 컨테이너에서 무엇을 하든지 원래 이미지에 영향을 받지 않는다.
생성된 컨테이너는 각기 독립된 파일시스템을 제공받으며 호스트와 분리되어 특정 컨테이너에서 어떤 어플리케이션을 설치하건 삭제하건 다른 컨테이너와 호스트는 변화가 없다.
도커 이미지로 두개의 컨테이너를 생성한 뒤 A컨테이너에 mysql을 설치.. B컨테이너에는 아파치 웹서버를 설치해도
각 컨테이너는 서로 영향을 주지 않으며 호스트에도 아무런 영향을 주지 않는다.
컨테이너 버전 확인
# docker -v
도커의 최신버전은 17.03.0-ce 이다. (2017년 3월)
도커는 오픈소스로서 약 1개월에 1번은 새로운 버전으로 배포되어 업데이트가 되므로, 도커 엔진의 버전을 확인하는것이 필요하다.
무엇보다 도커 홈페이지에서 확인하는게 확실할 것이다.
docker run
docker run 명령어는 컨테이너를 생성하고 실행을 한다.
# docker run -i -t imageName:10.10
컨테이너를 생성하기 위한 이미지의 이름이다.
컨테이너를 생서하면 다음의 메세지가 출력된다.
dorker run 명령어로 컨테이너 생성 시 -i 은 상호 입출력을 -t 는 tty 를 활성화 하여 배시(bash) 셸을 사용하도록 설정한다.
docker run 명령에서 두 옵션중 하나라도 사용하지 않으면 쏄을 정상적으로 사용할 수 없다.
unable to find image .... 10.10 : Pulling from library/imageName . .
docker create
다음 명령어를 입력해 centos:7 이미지 컨테이너 생성한다.
--name 옵션은 컨테이너의 이름을 설정한다.
# docker creage -i -t --name CentOS:7
create 명령어의 결과로 출력된 무작위 16진수 해시값 : 컨테이너의 고유 ID 이다.
길이가 너무 길어 일반적으로 git 과 같은 방법론, 앞 12자리만 사용한다.
docker inspect 명령어로 컨테이너의 ID를 다시 확인 할 수 있다.
docker start / attach
컨테이너 시작하고 내부로 들어가는 명령어.
# docker start CentOS CentOS # docker attach CentOS [root@000000000000 /] #
Docker 컨테이너에서 빠져나오는 방법 두가지
- 컨테이너 내부에서 Exit 입력 (컨테이너를 중지함)
- Ctrl + D
- Ctrl + P, Q 입력. (컨테이너를 중지하지 않고 빠져나옴)
컨테이너를 대상으로 모든 명령어는 컨테이너의 이름 대신 ID를 사용할 수 있음.
ID의 이름이 너무 길때 앞의 2~3자만 입력해도 됨 (git 방법론이랑 같음)
# docker start dd06c5cb6bf4
또는
# docker start dd0
ID 앞자리가 중복일 경우 에러 발생. → ID 앞자리는 2~3자리를 사용하는게 아닌 3~4자리 사용을 권장.
Docker 컨테이너 이름변경
# docker rename {containerName} {changeName}
Docker 컨테이너 삭제
# docker rm {containerName} # docker rm -f {containerName}
실행중인 컨테이너는 삭제할 수 없다. 실행중인 컨테이너를 삭제할 경우 docker stop 으로 정지한 후 삭제 해야 한다.
또는 -f 옵션을 사용하여 강제 삭제가 가능하다.
Docker 컨테이너 한번에 삭제
# docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] # docker ps -a -q {containerName} # docker stop $(docker ps -a -q) # docker rm $(docker ps -a -q)
-a 컨테이너 상태와 상관없이 모든 컨테이너 삭제 한다.
-q 컨테이너의 ID 만 출력한다.