Docker

Docker 명령어 실습 (2)

Joon0464 2021. 7. 7. 16:04

컨테이너 생성 및 접속하기

컨테이너 생성시 이미지에 크게 두 가지 종류가 있다.

1. httpd, ftp, bind와 같이 자체 쉘이 없는 데몬 이미지

2. centos7, ubuntu와 같은 운영체제 이미지

 

두 종류는 서로 컨테이너 실행시 옵션을 다르게 주어야 정상적으로 동작하고 접속이 가능하다.

하지만 결과적으로 똑같이 실행시키는 방법도 있고 마지막에 소개할 예정이다.

 

1. 쉘이 없는 데몬 이미지를 컨테이너에 실행 및 접근 방법

httpd 패키지를 사용하여 실습을 진행한다.
docker create httpd(:latest)를 해주면 해당 이미지를 컨테이너가 생성된다. 이름은 랜덤하게 지정된다.

docker create [이미지 명]: 지정한 이미지를 가진 컨테이너 생성

docker ps: 동작중인 컨테이너 확인

docker ps -a: 동작중이지 않은 컨테이너까지 모두 확인

컨테이너에 이미지가 실행된 모습이다.

docker start [컨테이너 명]: 컨테이너 실행

도커 컨테이너에 접속한 모습이다.

docker exec -it [컨테이너 명] [쉘]: 컨테이너에 접속하기 위한 명령어

exit을 입력하여 빠져나올 수 있다.

즉, 데몬 이미지는 컨테이너 생성 및 실행에서는 쉘이 필요없지만 접근할 때만 쉘이 필요하므로 docker exec 명령어에 -it 옵션을 사용하여 쉘을 지정하여 접근하는 방식이다.

2. centos7, ubuntu와 같은 운영체제 이미지

Centos:7 이미지로 실습을 진행한다.
centos:7 이미지를 가진 컨테이너가 생성된 모습이다.

docker create -it [이미지 명]: 쉘을 환경변수에 가진 이미지는 -it옵션을 사용하여 컨테이너를 생성한다.

컨테이너가 정상적으로 동작되는 모습이다.

docker start [컨테이너 명]: 지정한 컨테이너를 실행한다.

컨테이너에 접속한 모습니다.

docker attach [컨테이너 명]: 지정한 컨테이너에 접근하는 명령어다. 쉘을 환경변수에 이미 가지고 있는 경우에 이와 같이 접근한다.

컨테이너에서 빠져나오기 위해서는 ctrl+p+q를 입력한다.

만약 exit를 입력하여 컨테이너에서 나가게 되면 컨테이너 자체가 종료되므로 주의해야한다. 

 

이와 같이 쉘을 환경변수에 이미 가지고 있는 운영체제와 같은 이미지들은 컨테이너를 실행하기 위해서 쉘이 반드시 필요하므로 docker create 명령어에 it옵션을 사용하여 환경변수에 등록되어있는 쉘을 실행시키면서 컨테이너를 생성해야한다.

컨테이너에 접근할 때는 이미 쉘과 함께 컨테이너가 동작중이기 때문에 attach 명령어를 사용하여 접근하면 된다.

 

3. docker run 명령어 사용

컨테이너를 생성 및 실행까지 한 번에 진행하는 모습이다.

docker run -d [데몬형 이미지]: 쉘을 가지고 있지 않은 데몬형 이미지로 컨테이너 생성 및 실행까지 한 번에 진행. -d는 dettach의 의미로 접속하지 않고 실행까지만 진행함을 의미한다.

centos:7 이미지로 컨테이너 생성, 실행, 접속까지 한 번에 진행된 모습이다.

docker run -it [쉘을 가진 이미지]: 지정한 이미지로 컨테이너를 생성, 실행, 접속까지 한 번에 진행된다.

centos:7 이미지로 컨테이너 생성 및 실행까지만 진행한 모습이다.

docker run -itd [쉘을 가진 이미지]: 지정한 이미지로 컨테이너를 생성 및 실행까지 한 번에 진행. -d는 dettach의 의미로 접속하지 않고 실행까지만 진행함을 의미한다.

이미지 유형에 관계없이 -itd옵션으로 컨테이너를 실행시킨 모습이다.

만약 어떤 옵션을 써야하는지 햇갈린다면 docker run에 -itd 옵션을 사용하여 컨테이너를 실행시키면 어떤 형태의 이미지(정상적으로 만들어진)라도 실행이 잘 된다.

 

컨테이너  중지, 제거, 일시중지, 재실행 

컨테이너 중지

docker stop [컨테이너 명]: 실행중인 컨테이너를 중지시킨다. stop 명령어는 사용중인 자원을 반납한다.

docker start를 사용하여 재 실행이 가능하다.

docker pause [컨테이너 명]: 실행중인 컨테이너를 일시중지한다. pause 명령어는 자원을 반납하지 않음.

docker unpause [컨테이너 명]: 일시중지된 컨테이너를 다시 실행시킨다.

중지된 컨테이너 제거

docker rm [컨테이너 명] or [컨테이너 ID]: 실행이 중지된 컨테이너중에 지정하여 제거하는 명령어

docker rm -f [컨테이너 명] or [컨테이너 ID]: 실행중과 상관 없이 강제로 컨테이너를 제거한다.

모든 컨테이너 한번에 제거하는 명령어

docker rm -f $(docker ps -a -q)를 사용하면 docker ps -a -q에 의해 모든 도커 컨테이너 ID가 변수로써 불러와지기 때문에 한 번에 모든 컨테이너를 삭제할 수 있다.