티스토리 뷰

블로그를 옮겼습니다.
이곳을 클릭하거나 아래 링크를 참고해주세요!
mingoogle.tistory.com/ ) 



* 도커 엔진의 핵심 '도커이미지' 와 '컨테이너'



*도커 이미지


- 이미지는 컨테이너를 생성할 때 필요한요소

- 이미지는 도커명령어로 내려받을 수 있어 별도로 설치X

- 도커에서 사용하는 이미지명은 [저장소 이름]/[이미지 이름]:[태그]의 형태로 구성되어있음
   ex) testStorage/testDocket/ubuntu:14.04


저장소 : 이미지가 저장되는 장소 / 이미지 생성시 생략가능

이미지 이름 : 해당 이미지가 어떤 역할을 하는지 나타내는 용도 / 생략불가능 (필수)

태그 : 이미지의 버전관리 나 리버전(Revision) 관리용도로 사용



* 도커 컨테이너


- 도커 이미지는 리눅스 운영체제부터 데이터베이스 , 아파치 웹서버 , 애플리케이션 , 하둡 등 여러가지의 종류가 있다. 각각의 이미지로 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일 시스템과 각각의 이미지가 가지고있는 시스템 자원 및 네트워크를 사용할 수 있다. ( 독립된 공간 = 도커 컨테이너 )

- 일반적으로 도커 컨테이너가 생성될때 도커 이미지의 종류와 설정/파일을 가지고 있어 일반적으로 도커 이미지에 맞도록 사용됨
ex) 웹서버 도커이미지 안에 10개의 컨테이너 생성 ==> 10개의 웹 서버 생성 ( = 10개의 컨테이너 )

- 컨테이너는 도커 이미지를 읽기 전용으로만 사용하되 이미지에서 변경된 내용만 저장하므로 컨테이너에서 어떤 작업을 하든 도커 이미지는 영향을 받지 않는다.


- 각 컨테이너들은 각각의 독립된 파일시스템을 제공받으며 호스트와 분리되어있어, 특정 컨테이너에서 어떤 애플리케이션을 설치하거나 삭제해도 다른 컨테이너나 호스트는 영향을 받지 않는다.

ex) A컨테이너는 디비서버 B컨테이너는 웹서버로 설치가 됬더라도 서로 영향을 받지않음.





* 도커 컨테이너생성


1) 도커가 실행된상태에서 터미널에 입력 ( 도커실행 : http://min-it.tistory.com/18 참조)


$ docker run -i -t ubuntu:14.04

(  -i : 상호 입출력 

   -t : tty를 활성하여 배시 셸을 사용하도록 컨테이너를 설정 
    ==> 이 2가지 옵션을 사용하지 않으면 셸을 정상적으로 사용할 수 없다.
)





ubuntu:14.04이미지가 로컬 도커 엔진에 존재하지 않아 도커 허브(도커 중앙 이미지 저장소)에서 자동으로 이미지를 내려 받는다.

정상적으로 생성이 됬다면 셸의 이름이 바뀐것을 확인할 수 있다. 

root@aaca4b048a98:/# ==> 고유사용자@컨테이너고유ID )



2) 도커 컨테이너 나가기 
    a) 컨트롤 + D   Or   exit : 컨테이너 정지 + 컨테이너 나가기
    b)  컨트롤 + P ,Q : 컨테이너의 셸만 나감 ( 애플리케이션 개발시 많이 사용)



2) 도커 cantos이미지 내려받기 

    $ docker pull centos:7




3) 현재 도커엔진에 생성된 도커 이미지 보기


$ docker images



위에서 생성한 ubuntu 와 centos가 있다.



4) 컨테이너를 생성할 때 create로 생성해보기


$ docker create -i -t --name testcentos centos:7



 run 명령어와 달리 컨테이너 내부로 접속하지 않는다. 
 ==> create명령어는 컨테이너만 생성하지 컨테이너로 들어가진 않는다.



5) 컨테이너 시작


$ docker start testcentos




6) 컨테이너 내부접속하기


$ docker attach testcentos





==> a) run 명령어 : docker pull -> docker cereate -> docker start -> docker attach

 b) create 명령어 : docker pull -> docker create 



* TIP 도커 컨테이너 접근 시 사용자가 지정한 이름외의 고유ID값을 이용해도 접속가능
   ex) 
docker attach testcentos

       docker attach 538d84fc19f4 

docker attach 538d

( 고유ID값의 앞자리만 입력해도 된다. 앞자리가 중복일경우 에러가난다.)



7) 컨테이너 목록보기


$ docker ps




현재 실행중인 컨테이너만 출력한다. ( eixt로 나간것은 안보여줌 )

CONTAINER ID : 컨테이너 고유ID (컨테이너 상세정보조회 : $ docker inspect testcentos )

IMAGE : 컨테이너를 생성할 때 사용된 이미지

COMMAND : 컨테이너가 시작될 때 실행될 명령어

CREATED : 컨테이너가 생성되고 난 뒤 흐른 시간

STATUS : 컨테이너의 상태 ( 실행[UP] / 종료[Exited] )

PORTS : 개방한 포트와 연결한 포트를 나열 

NAMES : 컨테이너의 고유한 이름
( 컨테이너 생성시 --name 옵션값을 주지않는다면 도커 엔진이 자동으로 이름 생성 ) 



TIP) 컨테이너의 고유이름 변경 


$ docker rename angry_almeida angry_bird

$ docker rename [기존 컨테이너고유이름] [변경할 컨테이너고유이름]






$ docker ps -a



'정지'된 컨테이너를 포함한 모든 컨테이너를 출력해준다.



8) 컨테이너 삭제


$ docker rm angry_bird

$ docker rm 컨테이너고유이름or고유ID


'실행중인 컨테이너'일경우 다음과같은 에러가 뜬다. 

'실행중인 컨테이너'일 경우 -f 옵션값을 줘서 강제로 삭제할 수 있다.



9) 컨테이너 강제 삭제


$ docker rm testcentos -f

$ docker rm [컨테이너고유이름] -f



10) 컨테이너 모두삭제


$ docker container prune


정말 삭제할 건지 다시한번 묻는다.  Y를 입력하면 전체 삭제한다.





'실행중인 컨테이너'를 제외한 컨테이너들이 삭제된 것을 확인 할 수 있다.



TIP) 실행중이던 아니던 모든 컨테이너를 삭제하고 싶을때 다음과 같이 입력하면된다.


$ docker stop $(docker ps -a -q)


- 모든 컨테이너를 중단시킨다. 

-a 모든컨테이너 -q 컨테이너의 ID만 출력 


$ docker rm $(docker ps -a -q)


- '실행중이지 않은' 모든 컨테이너를 삭제한다.




















댓글