도커 기본 명령어

David kim·2022년 1월 8일
0

도커

목록 보기
3/8
post-thumbnail

도커는 도커 클라이언트를 통해서 도커 서버에 명령어를 전달하고 기능을 실행한다. 도커의 기본 명령어로 컨테이너 생성, 시작, 삭제 등을 연습해보자.

도커 컨테이너 생성

$ docker create <이미지 이름>

도커 이미지를 이용해 도커 컨테이너를 생성한다. 만약 해당 이미지가 local에 없다면 도커 허브에서 이미지를 pull 한 다음 컨테이너를 생성한다.

docker create 명령어는 도커 컨테이너를 생성하고 생성된 컨테이너의 ID 값을 리턴해준다. 그리고 이 명령어는 컨테이너를 생성하기만 할 뿐 동작시키지는 않는다. 따라서 docker ps 명령어를 사용했을 때 해당 도커의 ID를 가진 컨테이너가 나오지 않는다.

`8797d6c4b02d` 는 방금 생성한 redis의 컨테이너가 아니다. redis의 컨테이너의 ID(`3db01c...`)와 비교해 보면 알 수 있다.

도커 컨테이너 실행

$ docker start <컨테이너 ID/이름>

도커를 생성하고 나서는 도커를 실행해주어야 한다. 이때는 도커 컨테이너의 이름 혹은 ID 값을 이용한다.

docker ps 명령어를 사용했을 때 redis 이미지의 컨테이터가 실행 중임을 알 수 있다.

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

$ docker run <이미지 이름>

docker run 명령어는 도커 이미지로 부터 컨테이너를 생성하고 실행한다. 즉, docker creeat + docker start 의 결과라고 볼 수 있다. 따라서 docker run 명령어를 사용하면 생성과 동시에 실행하기 때문에 docker ps 에서 생성되고 실행중인 컨테이너를 볼 수 있다.

도커 이미지 내부파일 보기

$ docker run <이미지 이름> ls

도커 이미지의 내부파일을 보기 이전에 도커 이미지에 대해 알아야한다. 도커 이미지에는 실행 명령어와 파일 스냅샷이 들어있다. 이중에 파일 스냅샷은 해당 어플리케이션 설치에 필요한 파일과 디렉터리를 복사한 것이다. 위의 명령어는 파일 스냅샷에 들어있는 파일의 ls(list)를 보기 위한 명령어다. alpine 이미지를 이용해서 실습해보면 다음과 같은 결과를 볼 수 있다. (이미지 내부 파일을 본다라고 표현하는 것 보다 컨테이터 내부 파일을 본다라는 말이 더 맞는 말이 아닌가 생각한다.)

위 명령어는 docker run 명령어에 ls 명령어를 추가해준 것이기 때문에 컨테이너 또한 생성 및 실행된다. 아래의 사진에서 사용한 docker ps --format 명령어는 원하는 정보만 화면에 띄우는 명령어다.

도커 컨테이너 멈추기

$ docker stop <컨테이너 이름/ID>

위 명령어는 진행중인 프로세스에 SIGTERM 을 보내서 프로세스가 종료됨을 알린다. 그후 SIGKILL을 보내서 컨테이너를 중지시킨다. 따라서 해당 컨테이너의 작업을 중단하고 나서 종료한다. 이는 리눅스의 kill <PID> 와 같다.

$ docker kill <컨테이너 이름/ID>

위 명령어 또한 진행중인 컨테이너를 멈추게 한다. docker stop 과의 차이는 SIGTERM 없이 바로 컨테이너가 멈춘다는 점이다. 즉, 시스템 종료 보다는 강제 종료에 가깝다. 따라서 리눅스의 kill -9 <PID> 와 같다.

도커 컨테이너 삭제

$ docker rm <컨테이너 이름/ID>

실행중인 컨테이너는 삭제가 불가능하다.

$ docker rm `docker ps -a -q`

위 명령어는 중지된 컨테이너들을 삭제한다. docker ps -a-q 는 컨테이너의 ID 만 반환한다. 실행중인 컨테이너는 삭제가 불가능 하므로 ERROR를 반환하지만 중지된 컨테이너들은 ERROR 반환 없이 삭제된다.

도커 이미지 삭제

$ docker rmi <이미지 이름>

도커의 이미지는 하드디스크 용량을 많이 차지한다. 사용하지 않는 이미지가 있다면 수시로 정리해 주는 것이 좋다.

참고
[1] 따라하며 배우는 도커와 CI 환경, 위키북스, 안재원
[2] difference-kill-9-pid-and-kill-pid-command
profile
데이터 엔지니어

0개의 댓글