Yoon.s

Docker 시작하기[2] -Ubuntu편 <컨테이너 생성, 목록, 접속> 본문

인프라/Docker

Docker 시작하기[2] -Ubuntu편 <컨테이너 생성, 목록, 접속>

yo_onHJ 2020. 7. 16. 18:07

2020/07/16 - [분류 전체보기] - Docker 시작하기 - Ubuntu편 <도커 설치, 이미지>

ubuntu에 도커를 설치하시고 이번 내용을 따라하시길 바랍니다!! 

 

 

Docker Container

정의 : Docker image를 실행한 상태

특징 : 하나의 이미지로 여러 개의 container 생성

 

1. 컨테이너 생성

docker run <옵션><이미지><실행 app>

옵션.

-i(interactive), -t(terminal mode), -d(daemon)형으로 백그라운드에서 동작 

--name 컨테이너 이름

--rm 컨테이너 삭제

-v host_dir : container_dir host.dir.에 data 저장

 

  • docker run -itd --name ex ubuntu /bin/bash : 백그라운드에서 동작하도록 하고, ubnutu 이미지를 가지고 bash 셸에서 컨테이너 이름은 ex로 해서 컨테이너 생성

 

 

2. 컨테이너 목록

docker ps <옵션> 

: 기본 출력은 실행 중인 컨테이너만 출력

옵션.

-a : 정지된 컨테이너 포함

-q : 컨테이너 id만 보여줌

 

컨테이너 생성 및 목록

↑ 위의 출력 결과에서 ex이라는 컨테이너를 만들었는데 docker ps로 목록을 확인했을 때 출력되지 않았습니다. 

그 이유는 생성될 때 별도로 바로 실행하라는 옵션을 주지 않았기 때문에 docker ps 의 경우 실행중인 컨테이너만 출력되고 있고, ps -a 명령을 줘야 정지(Exited)된 컨테이너를 포함한 결과를 출력할 수 있습니다!!

 


3. 컨테이너 시작

docker [start|restart|stop|...] <컨테이너 id | name>
  • start : 컨테이너 시작
  • restart : 컨테이너 재시작
  • stop : 컨테이너 종료
  • pause : 일시 정지
  • unpause : 일시 정지 해제 

컨테이너 시작 및 제거

start 했지만 왜 exited 상태인가? 

ex를 만들때 옵션 -itd를 주지 않았기 때문에 실행과 동시에 끝나는 컨테이너이다! (ps 목록에도 당연히 안나타남)

 

 

4. 컨테이너 제거

docker rm <컨테이너 id | name>
  • rm : 정지된 컨테이너가 제거 

↑ 삭제할 때는 해당 컨테이너가 중지된 상태이어야 삭제가 가능합니다!!  (up상태면 삭제 불가능)


5. 컨테이너 접속

docker attach <컨테이너 id | name>

컨테이너 생성 후 접속

↑생성하고 바로 실행되도록 하기위해,

컨테이너 생성(run)할 때 -itd를 추가하여 백그라운드에서 실행되도록 합니다! 

그 후 docker attach를 통해 컨테이너에 접속합니다!! 접속한 상태에서는 docker명령이 적용되지 않아용

exit를 실행하여 컨테이너를 종료합니다. (이때, 컨테이너가 종료되면서 접속도 해제됩니다.)

 

하지만, 컨테이너가 종료되지 않고 접속 해제하기 위해서는 

^P (Ctrl+P)  -> ^Q (Ctrl+Q) 를 연달아 눌러줍니다!! (백그라운드에서 진행하는 것처럼)

 

docker run -it <이미지><실행 app>

-d 옵션이 없기 때문에 포어그라운드에서 컨테이너가 생성되면서 그 안의 내용이 진행중이다. 

그렇기에 docker 명령어들은 적용되지 않고 ps 등의 명령만 실행 가능

 exit 실행해 컨테이너 종료하면 접속도 해제된다.

 

위와 동일하게 컨테이너가 종료되지 않고 접속 해제하기 위해서는 

^P (Ctrl+P)  -> ^Q (Ctrl+Q) 를 연달아 눌러줍니다!! 

 

 

docker exec <컨테이너 id | name><command><argument>

: 위의 2방식과는 다르게 컨테이너에 접속 없이 명령을 실행하기 때문에 가장 많이 사용하는 방법입니다! 

컨테이너에 접속 없이 host에서 컨테이너에 명령을 실행 (대신, 컨테이너는 실행중이어야 함)

백그라운드에서 ex2가 실행중이기 때문에 ps명령을 보면, 현재 login(hostname)으로 실행중이다. 

또한 접속은 하였지만 백그라운드로 빠져나온 상태이기에 docker명령이 적용되는 것을 확인 할 수 있다. 

Comments