본문 바로가기

Container/Docker

[Docker] 기본적인 도커 클라이언트 명령어

728x90
반응형

도커 이미지의 내부 파일 구조 보기 - docker run ls

도커 이미지의 내부 파일 구조를 보는 명령어는 다음과 같다.

docker run <도커 이미지 이름> ls
  • docker : 도커 클라이언트 언급
  • run : 컨테이너 생성 및 실행
  • <이미지 이름> : 이 컨테이너를 위한 이미지
  • ls : 이미지의 기본 시작 명령어 대신 실행할 명령어(ls는 파일 목록을 출력)

 

실행 예시

실행 과정

  • alpine 이미지를 이용해 컨테이너 생성

  • 컨테이너를 생성할 때 alpine 이미지 안에 들어 있던 파일 스냅숏(bin, dev, etc 등....)이 컨테이너 안에 있는 하드디스크로 다운로드된다.

  • 이미지 이름 뒤에 다른 명령어를 추가했기 때문에(docker run alpine ls) 원래 이미지에 들어 있는 기본 명령어는 무시되고, ls 명령어가 실행된다.

 

모든 도커 이미지에서 ls를 사용할 수 있는 것은 아니다. 이렇게 ls 명령어를 사용할 수 있는 이유는 이미지의 파일 스냅숏 안에 ls 명령어를 사용할 수 있는 파일이 들어 있기 때문이다.

 

 

컨테이너 나열하기 - docker ps

현재 어떤 컨테이너를 실행 중인지 나열하는 명령어는 다음과 같다.

docker ps
  • docker : 도커 클라이언트 언급
  • ps : process status의 약자

 

실행 예시(ping 명령어를 유지하기 위해 ping google.com을 입력)

  • CONTAINER ID : 컨테이너의 고유한 아이디 해시값, 실제로는 더 길지만 일부분만 출력됨.
  • IMAGE : 컨테이너 생성 시 사용한 도커 이미지 이름.
  • COMMAND : 컨테이너 시작 시 실행될 명령어, 대부분 이미지에 내장되어 있어 별도 설정 필요하지 않음.
  • CREATED : 컨테이너가 생성된 시각
  • STATUS : 컨테이너의 상태, 실행중은 Up, 종료는 Exited, 일시정지는 Pause
  • PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트, 특별한 설정을 하지 않은 경우 출력되지 않음. 
  • NAMES : 컨테이너의 고유한 이름, 컨테이너 생성 시 --name 옵션으로 이름을 설정하지 않으면 도커 엔진이 임의로 설정, 중복을 허용하지 않고, 'docker rename <원래이름> <변경할 이름>'로 이름을 변경할 수 있다.

 

나열 시 원하는 항목만 볼 수도 있다.

docker ps --format 'table {{.Names}} \t table {{.Image}}'
  • docker : 도커 클라이언트 언급
  • ps : process status의 약자
  • --format : 원하는 항목만 보기
  • 'table {{.Names}} : 컨테이너의 고유한 이름
  • \t : 탭
  • table {{.Image}}' : 도커 이미지

 

또 중단된 컨테이너를 포함한 모든 도커 컨테이너를 나열 할 수도 있다.

docker ps -a
  • docker : 도커 클라이언트 언급
  • ps : process status의 약자
  • -a : all

 

 

도커 컨테이너 생성 및 실행 - docker run <이미지 이름>

도커 컨테이너는 다음과 같은 명령어를 통해 생성하고 실행 할 수 있다.

docker run <이미지 이름>

docker run <이미지 이름> 명령어는 docker create <이미지 이름>와 docker start <컨테이너 아이디/이름> 명령어로 쪼개어 볼 수 있다.

  • docker create <이미지 이름> : 도커 이미지를 이용해 도커 컨테이너를 생성한다.

  • docker start <컨테이너 아이디/이름> : 생성된 컨테이너를 시작해서 실행한다.

 

 

도커 컨테이너를 중지하기 - docker stop <컨테이너 ID/이름>

docker stop은 SIGTERM이라는 것을 보내서 진행 중인 프로세스를 정리하는 시간을 갖고 SIGKILL을 보내서 컨테이너를 중지 시킨다.

 

 

도커 컨테이너를 즉시 중지하기 - docker kill <컨테이너 ID/이름>

docker kill은 명령어를 입력하는 순간 바로 SIGKILL을 보내서 모든 프로세스를 멈추고 도커 컨테이너를 중지 시킨다.

 

 

도커 컨테이너 삭제 - docker rm <컨테이너 ID/이름>

중지된 도커 컨테이너를 삭제하는 명령어로 반드시 삭제할 컨테이너는 중지되어있는 상태여야 한다. 만약 실행 중인 컨테이너를 삭제하려고 하면 오류가 발생한다.

 

docker rm`docker ps -a -q`를 사용하면 중지된 모든 컨테이너를 삭제할 수 있다.

docker rm`docker ps -a -q`

docker rmi <이미지 id>를 사용하면 도커 이미지를 삭제할 수 있다.

docker rmi <이미지 id>

 

 

사용하지 않는 데이터 삭제하기 - docker system prune 

중지된 모든 컨테이너와 네트워크, 이미지 등이 삭제되고, 삭제된 목록들과 삭제하므로써 확보한 공간의 사이즈를 알려준다.

 

 

 실행 중인 컨테이너에 명령 전달하기 - docker exec 

컨테이너 실행 중에 명령어를 전달해야 하는 경우가 있는데 이때 docker exec <컨테이너 ID> <명령어>를 사용한다.

docker exec <컨테이너 ID> <명령어>

 

또 실행 중인 컨테이너에서 터미널을 사용할 수 있다.

 

실행 중인 컨테이너에 명령을 여러번 전달해야 할 경우 다음과 같은 명령어를 전달할 때 마다 입력하는 것은 비효율적이다.

docker exec -it <컨테이너 ID> 명령어

그래서 컨테이너에 셸이나 터미널 환경으로 접속하는 방법이 따로 존재한다.

docker exec -it <컨테이너 ID> sh

다음과 같은 명령어를 사용하면 된다.

쉘 환경에서 빠져 나오려면 Control + D를 이용해 빠져 나올 수 있다.

728x90
반응형