도커 기본 명령어 및 실습

도커에서 자주 사용하는 명령어를 읽히고 실습을 진행한다.

도커 기본 명령어 및 실습

기본적으로는 공식 문서를 참고하되, 자주 사용하는 명령어 몇 개만 나열해 본다.

docker run

이미지를 생성 및 실행해 주는 명령어이다. 원래는 분리된 생성(docker create)와 실행(docker start)을 한번에 실행시키는 명령어이다.

docker run [이미지 이름] [실행할 명령어]

위 그림은 docker run hello-wolrd를 실행했을 때 나오는 결과이다. 중간에 메시지에 나와 있는 것을 보면 처음에 봤던 도커 아키텍처가 자연스레 생각날 것이다.

참고로 [실행할 명령어]의 경우 옵셔널한 값이다. 기본적으로는 원래 이미지에 설정된 기본 실행 명령어가 실행되지만, [실행할 명령어] 자리에 명령어를 별도로 넣어주게 되면, 기존에 설정된 값을 무시하고 내가 입력한 명령어를 실행한다. 당연히 [실행할 명령어]는 도커 이미지에 설정된 명령어야 하며, 아닐 경우 에러가 발생한다.

  • docker run -it [이미지 이름] ls: 컨테이너 안의 파일 구조를 볼 수 있다.

  • -d 옵션: 컨테이너를 시작할 때 "분리(detached) 모드"로 백그라운드에서 실행할지 여부를 결정. 이 옵션을 따로 설정하지 않으면 기본 포그라운드 모드(default foreground mode)로 실행되는데, 콘솔을 프로세스의 표준 입력, 출력, 표준 오류에 연결할 수 있다.

  • -v 옵션: 볼륨의 약어(--volume)로 볼륨을 바인딩 한다. 콜론(:) 뒤에 나오는 파일 또는 디렉토리가 컨테이너에서 마운트 되는 경로이다. (-volume=[host-src:]container-dest[:<options>])

docker ps

도커의 현재 실행중인 프로세스 상태를 보여준다.

대부분은 위의 설명으로 알 수 있으나 status에 대해서만 추가적으로 작성하자면, 아래와 같은 상태값을 지닌다.

  • Up: 실행중

  • Exited: 종료

  • Pause: 일시 정지

만약 실행 중인 컨테이너 뿐만 아니라 다른 컨테이너도 다 보고 싶다면 옵션을 명령어에 추가해 주면된다.

$ docker ps -a

docker stop vs docker kill

컨테이너 중지 명령어 이며, 명령어 뒤에는 [중지할 container ID 또는 이름]을 입력한다.

  • docker stop: 진행 중이던 작업을 모두 마치고 컨테이너를 중지한다. (docker stop -> SIGTERM - 진행중인 프로세스 정리(Grace Period) -> SIGKILL)

  • docker kill: 즉시 컨테이너를 중지한다. (docker kill -> SIGKILL)

docker rm

컨테이너 삭제 명령이며, 명령어 뒤에는 [중지할 container ID 또는 이름]을 입력한다.

  • docker rm -f redis: 실행 중인 컨테이너를 강제로 제거

docker rmi

도커 컨테이너 뿐만 아니라 이미지를 삭제하고 싶을때 사용하는 명령어 이며, 이 명령어 뒤에는 [이미지 ID]를 입력한다. 참고로 docker images 명령어를 통해 도커 이미지 목록을 볼 수 있다.

물론 명령어도 쉽지만, 처음엔 조금 헷갈릴 수가 있는게 이미지 삭제를 바로 하면 에러 메시지가 나올 것이다. 이미지 삭제는 해당 이미지가 있는(실행중만이 아님, 실행 중이라면 당연히 정지 및 삭제 필요) 컨테이너를 모두 삭제해야 한다.

위 그림은 hello-world 이미지를 삭제하기 위한 노력이다. 처음엔 직접 꼭 이 과정을 거쳐보자. 그래야 다음 명령어의 소중함을 알게된다.

  • docker rm -f $(docker ps -aq --filter ancestor=hello-world)

  • docker image prune: prune은 불필요한 것을 제거한다는 의미로, 사용하지 않는 이미지만 삭제할 수 있다.

docker rm 'docker ps -a -q'

현재 중지된 모든 컨테이너를 삭제한다.

docker exec

실행중인 컨테이너에게 명령를 전달한다. 공식 문서 예제를 참고하자.

docker system [command]

  • docker system df: 도커 디스크 사용량을 볼 수 있다.

  • docker system events: 서버로 부터 실시간 이벤트를 받는다.

  • docker system info: 시스템 전체 정보를 보여준다.

  • docker system prune: 사용하지 않는 데이터를 삭제한다. 여기에는 중지된 모든 컨테이너와 네트워크, 이미지 등이 삭제되며 삭제한 목록과 확보한 공간의 크기를 알려준다.


레디스 설치해보기

자주 사용하는 레디스를 도커 환경에서 실행해 보자.

$ docker run redis

이제 redis-cli 명령어를 쓰기 위해서는 당연히 docker 컨테이너 안에서 실행시켜 주면된다. 이때 위에서 언급한 실행 중인 컨테이너에게 명령을 전달하는 docker exec를 이용하면 된다.

redis-cli 실행하기

# $ docker exec -it [컨테이너 ID] 명령어
$ docker exec -it f2cdcd1244a2 redis-cli

-it 옵션 없이 사용할 경우 아래 그림과 같이 레디스 클라이언트가 실행되자마자 종료되서 명령어를 입력할 수 없게 된다.

그래서 -i: interactive(대화형), -t: terminal(터미널) 옵션을 추가하여 레디스 클라이언트가 유지되면서 터미널로 메시지를 보낼 수 있게 해주었다.

실행 중인 컨테이너의 쉘 환경에 접속하는 법

위 명령어를 약간만 수정해 주면된다.

$ docker exec -it [컨테이너 ID] sh

참고로 쉘 환경을 나오는 단축키는 Control + D 이다.

Last updated