본문 바로가기
Infra/Docker

도커를 배우자03 - 기본 명령어

by 윤루트 2021. 11. 18.

컨테이너 목록 확인하기 (ps)

컨테이너 목록을 확인하는 명령어는 다음과 같다.

docker ps [OPTIONS]

docker ps를 입력하면 현재 실행 중인 컨테이너 목록을 보여준다. 어떤 이미지를 기반으로, 어떤 포트와 연결되어 있는지 등 간단한 내용을 보여준다. 현재 실행 중인 컨테이너가 없으므로 다음과 같이 빈 항목으로 나온다.

 

docker ps

 

옵션을 알아보기 위해 'docker ps --help'를 입력해본다.

 

docker ps --help

 

-a 옵션을 실행하면 다음과 같다.

docker ps -a

docker ps -a

-a 옵션은 모든 컨테이너를 보여주는 옵션이다.

23시간 전에 실행했다가 종료한 컨테이너가 보인다. 컨테이너는 종료되어도 삭제되지 않고 남아있다. 종료된 건 다시 시작할 수 있고 컨테이너의 읽기/쓰기 레이어는 그대로 존재한다. 명시적으로 삭제하면 깔끔하게 컨테이너가 제거된다. 

 

컨테이너 중지하기 (stop)

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

docker stop [OPTIONS] CONTAINER [CONTAINER...]

옵션은 특별한게 없고 실행 중인 컨테이너를 하나 이상 중지할 수 있다. 여러개를 중지하고 싶은 경우 띄어쓰기로 구분하여 입력한다.

 

해당 명령어를 테스트하기 위해 tensorflow 컨테이너를 만들어본다.

docker run -d -p 8888:8888 -p 6006:6006 teamlab/pydata-tensorflow:0.1

설치 후 'docker ps'를 입력해 보면 다음과 같이 실행 중인 컨테이너가 추가된 것을 확인할 수 있다.

docker ps

이때 컨테이너를 중지하기 위해 위에서 알 수 있는 CONTAINER ID를 사용한다.

docker stop 310020f1b86c

컨테이너 중지 후 ps로 확인

성공적으로 중지된 것을 알 수 있다.

 

컨테이너 제거하기 (rm)

종료된 컨테이너를 완전히 제거하는 명령어는 다음과 같다.

docker rm [OPTIONS] CONTAINER [CONTAINER...]

종료 명령어도 옵션은 특별한게 없다. 종료된 컨테이너를 하나 이상 삭제할 수 있다. 종료된 tensorflow 컨테이너를 삭제해 보자.

먼저 'docker ps -a' 를 통해 종료할 컨테이너의 id를 알아낸 후 'docker rm' 명령어로 제거한 후 'docker ps -a' 명령어로 성공적으로 제거되었는지 확인한다.

docker rm 310020f1b86c

docker rm 후 확인

성공적으로 컨테이너가 제거된 것을 확인할 수 있다.

 

중지된 컨테이너 ID를 가져와서 한 번에 삭제하는 방법은 다음과 같다.

docker rm -v ${docker ps -a -q -f status=exited)

 

이미지 목록 확인하기(images)

도커가 다운로드한 이미지 목록을 보는 명령어는 다음과 같다.

docker images [OPTIONS] [REPOSITORY[:TAG]]

옵션은 다음과 같다.

docker images --help

간단하게 도커 이미지 목록을 확인해 보자

docker images

docker images

이미지 주소와 태그, ID, 생성 시점, 용량이 출력된다.

이미지가 너무 많이 쌓인다면 용량을 차지하기 때문에 사용하지 않는 이미지는 지우는 것이 좋다.

 

이미지 다운로드하기 (pull)

이미지를 다운로드하는 명령어는 다음과 같다.

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

ubuntu:14.04를 다운받아 보자.

docker pull ubuntu:14.04

이미지 다운로드 완료

run 명령어를 입력하면 이미지가 없을 때 자동으로 다운로드 받는다.

pull은 최신 버전으로 다시 다운로드 받는다.

같은 태그지만 이미지가 업데이트된 경우는 pull 명령어를 통해 새로 다운로드 받을 수 있다.

 

이미지 삭제하기 (rmi)

이미지를 삭제하는 방법은 다음과 같다.

docker rmi [OPTIONS] IMAGE [IMAGE...]

images 명령어를 통해 얻은 이미지 목록에서 이미지 ID를 입력하면 삭제된다.

단, 컨테이너가 실행 중인 이미지는 삭제되지 않는다. 컨테이너는 이미지들의 레이어를 기반으로 실행 중이므로 당연히 삭제할 수 없다.

 

사용하지 않을 tensorflow 이미지를 삭제해보자

tensorflow 이미지 제거

이미지는 여러 개의 레이어로 구성되어 있기 때문에 모든 레이어가 삭제된 것을 알 수 있다.

 

컨테이너 로그 보기 (logs)

컨테이너가 정상적으로 동작하는지 확인하는 방법은 log를 확인하는 것이다. log를 확인하는 방법은 다음과 같다.

docker logs [OPTIONS] CONTAINER

옵션은 다음과 같다.

docker logs --help

로그를 확인하기 전에 MySQL 컨테이너를 하나 생성하자

docker run -d -p 3306:3306 \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
  --name mysql \
  mysql

 

MySQL Docker hub 페이지에 접속하면 간단한 사용법과 환경변수에 대한 설명이 있다.

패스워드 없이 root 계정을 만들기 위해 MYSQL_ALLOW_EMPTY_PASSWORD 환경 변수를 설정한다. 그리고 컨테이너의 이름은 mysql로 할당하고 백그라운드 모드로 띄우기 위해 -d 옵션을 준다. 포트는 3306 포트를 사용하겠다.

 

* 이때 m1 버전의 도커 사용 시 다음과 같이 platform 을 추가해 준다.

docker run -d -p 3306:3306 \
  --platform linux/x86_64 \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
  --name mysql \
  mysql

mysql 설치 완료

이제 실행 중인 컨테이너의 로그를 확인해보기 위해 다음과 같이 입력한다.

docker ps
docker logs 3cbb36c5ce6f

엄청난 양의 로그 데이터가 출력되는 것을 확인할 수 있을 것이다.

너무 많으니 --tail 옵션으로 마지막 10줄만 출력해 본다.

docker logs --tail 10 3cbb36c5ce6f

마지막 로그 10개만 출력

-f 옵션은 실시간으로 로그 생성되는 것을 확인할 수 있다.

docker logs -f 3cbb36c5ce6f

로그 보기를 중지하기 위해선 ctrl + c를 입력한다.

 

 

* 로그에 대한 자세한 이야기

프로그램마다 로그 파일은 제각각 생길텐데 어떻게 로그가 나올까 의문이 생길 것이다.

도커는 로그파일을 자동으로 알아채는 것이 아닌 표준 스트림 중 'stdout', 'stderr'를 수집한다. 따라서, 컨테이너에서 실행되는 프로그램의 로그 설정을 파일이 아닌 표준 출력으로 바꿔야 한다. 단지 출력 방식ㄷ만 바꾸는 것으로 모든 컨테이너는 로그에 대해 같은 방식으로 관리할 수 있게 된다.

 

또 하나 중요한 점은 컨테이너의 로그 파일은 json 방식으로 어딘가에 저장된다. 로그가 많으면 은근히 파일이 차지하는 용량이 커지므로 주의해야 한다. 도커는 다양한 플러그인을 지원하여 json이 아닌 특정 로그 서비스에 스트림을 전달할 수 있다. 어느 정도 앱의 규모가 커진다면, 기본적인 방식 대신 로그 서비스를 이용하는 것을 고려해야 한다.

 

컨테이너 명령어 실행하기 (exec)

컨테이너를 관리하다 보면 실행 중인 컨테이너에 들어가보거나 컨테이너의 파일을 실행하고 싶을 때가 있다. 컨테이너에 SSH를 설치하면 되지 않을까 싶지만, SSH는 권장하지 않는다. 예전에는 nsenter라는 프로그램을 이용했는데, docker에 'exec'라는 명령어로 흡수되었다.

 

컨테이너 명령어를 실행하는 방법은 다음과 같다.

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

'run' 명령어와 유사하지만, 차이는 다음과 같다.

run: 새로 컨테이너를 만들어서 실행하는 명령어

exec: 실행 중인 컨테이너에 명령어를 내리는 명령어

 

MySQL 컨테이너에 접속해 보자

docker exec -it mysql /bin/bash

mysql로 접속하여 명령어를 실행 후 종료

키보드 명령이 필요하기 때문에 -it 옵션을 주었고 bash 쉘로 접속하여 마치 가상 머신에 들어온 느낌이 든다. 접속한 이후 어떠한 작업도 할 수 있다. 

 

쉘로 완전한 권한을 얻는 방법말고 바로 mysql 명령어를 실행할 수도 있다.

docker exec -it mysql mysql -uroot

바로 mysql 명령어 실행

 

지금까지 기본적인 도커 명령어에 대해 알아보았다.

다음에는 컨테이너 업데이트하는 방법과 compose를 알아보자

'Infra > Docker' 카테고리의 다른 글

도커를 배우자02 - 설치 및 실행  (0) 2021.11.17
도커를 배우자01 - 도커란?  (0) 2021.11.16

댓글