[Docker] 기본적인 CLI 명령어

BoongDev·2023년 4월 12일
0

Docker

목록 보기
2/3

도커 클라이언트 명령어

도커 이미지의 내부 파일 구조 보기

  • docker run ls
    • 명령어 진행 순서
      1. 이미지를 이용해 컨테이너 생성
      2. 이미지 안에 들어 있는 파일 스냅숏(bin, dev, etc 등 : 리눅스 커널 디렉토리 부터 다양한 파일과 프로그램들) 이 컨테이너 안에 있는 하드디스크로 다운로드
      3. 이미지 이름 뒤에 다른 명령어를 추가했기 때문에( ls ) 원래 이미지에 들어 있는 기본 명령어는 무시되고 ls 명령어가 실행되어 파일 구조를 확인할 수 있다.
    • 주의 : 모든 도커 이미지에서 ls 명령어를 실행 할 수 있는 것이 아닌 ls 명령어를 사용할 수 있는 파일이 들어 있는 경우 사용가능하다. 다른 명령어 또한 마찬가지이다.

컨테이너 나열하기

  • docker ps
    • ps = process status 약자이다.

    • 실행중인 도커 컨테이너를 나열하여 보여주는 명령어이다.

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

      원하는 항목만 보기

    • docker ps --format 'table {{.Name}} \t table {{.Image}}' 와 같이 쓴다.

      모든 도커 컨테이너를 나열

    • docker ps -a


도커 컨테이너의 생성과 실행

도커 컨테이너에는 생명 주기가 있다. 다음 생명 주기 별 명령어를 알아보겠다./

생성 → 시작 → 실행 → 중지(재시작 가능한 상태) → 삭제


도커 컨테이너를 생성하고 실행하기

  • docker run <이미지 이름>
    • 두 개의 명령어가 합쳐진 명령어이다.
      • docker create <이미지 이름> : 도커 이미지를 이용해 도커 컨테이너를 생성
        • 이미지 안 파일들을 도커 컨테이너의 하드디스크로 다운
      • docker start <컨테이너 ID/이름> : 생성된 도커 컨테이너 시작해서 실행
        • 이미지 안에 있는 시작 시 실행할 명령어 컨테이너 안에서 작동시킨다.
        • docker start -a <컨테이너 ID/이름>
          • -a 옵션 : attach 의 약자로 컨테이너를 실행한 후에 표준 입력(stdin), 표준 출력 (stdout), 표준 에러(stderr)를 가능하게 하고, 프로그램으로 입력 받은 내용을 터미널에 포여주는 역할을 하는 옵션

도커 컨테이너 멈추기

  • docker stop <중지할 컨테이너 ID/이름> or docker kill <중지할 컨테이너 ID/이름> 두 가지 명령어 사용
  • 차이점
    • docker stopGraceful(우아하게)하게 컨테이너를 중지시킨다.
      • Graceful 하다 == 하고 있던 작업들을 모두 마치고 컨테이너를 중지시키는 것을 뜻함
      • docker stop 명령어는 SIGTERM 이라는 것을 보내 진행 중인 프로세스를 정리하는 시간(Grace Period)을 갖게한 다음에 SIGKILL을 보내서 컨테이너를 중지 시킨다.
    • docker kill 은 어떠한 것도 기다리지 않고 즉시 컨테이너를 중지시킨다.
      • docker killSIGTERM 없이 SIGKILL 을 보내서 모든 프로세스를 멈추고 컨테이너를 중지 시킨다.

도커 컨테이너 삭제하기

  • docker rm <중지할 컨테이너 ID/이름>
    • 주의 : 삭제할 때에는 컨테이너가 중지된 상태여야 한다. 실행중이라면 오류 발생

중지된 모든 컨테이너 삭제하기

  • docker rm docker ps -a -q: `'` 홑 따옴표 아니다. (그레이브)` 이거다

도커 이미지 삭제하기

  • docker rmi <이미지 ID>

사용하지 않는 데이터 삭제하기

  • docker system prune

실행 중인 컨테이너에 명령어 전달하기

  • docker exec <컨테이너 ID> <명령어>
    • 이미 실행중인 도커 컨테이너에 명령어를 보낸다.

레디스를 이용해 도커 컨테이너 이해

docker run redis 로 레디스 서버 실행

redis-cli 로 레디스 클라이언트 실행

레디스 클라이언트 → 명령어 실행 set value1 hello → 레디스 서버

하지만 redis-cli 명령어로 레디스 클라이언트를 실행하면 에러가 난다.

  • 이유는?
    • 레디스 클라이언트 실행 redis-cli : 실행하려 하지만 도커 컨테이너 밖이라 실행이 안된다.
    • 도커 컨테이너 [ 레디스 서버 - 동작 중 ]
  • 해결은?
    • 도커 컨테이너 [ 레디스 클라이언트 → 레디스 서버 ] : 도커 컨테이너 안에서 실행하는 방법으로 해결해야 한다.
    • 도커 컨테이너 안에서 레디스 클라이언트를 실행하기 위해 앞에서 배운 exec 명령어를 사용한다
    • docker exec -it <레디스 컨테이너 ID> redis-cli
      • 여기서 -it 옵션은?
      • -i : interactive
      • -t : terminal
      • -it 옵션이 없으면 redis-cli 를 실행과 동시에 종료된다.
    • 레디스 클라이언트가 실행되고 명령어를 칠 수 있게 된다 set key1 hello, → get key1

실행 중인 컨테이너에서 터미널 사용하기

  • docker exec -it sh <컨테이너 ID> sh
  • 매번 docker exec -it <컨테이너 ID> <명령어> 명령어로 모두 입력하는 것은 비효율적인 작업이다. 비효율적인 면을 해결하기 위해 사용한다.
  • 도커 컨테이너에 셸이나 터미널 환경으로 접속해 사용하는 명령어
  • Ctrl + D 로 셸이나 터미널 환경에서 나올 수 있다.
profile
욕심 많은 주니어 개발자입니다.

0개의 댓글