Docker 101 - 3장: Docker CLI에 대해서 익혀봅시다

okkkkkky·2023년 8월 7일
0
post-thumbnail

이전 게시글에서는 직접 Dockerfile을 만들고, 이미지를 생성해서, 컨테이너까지 실행시켜봤다면, 이 모든 것들을 명령하는 Docker CLI에 대해서 간단하게 짚고 넘어가는 시간이 되겠습니다 !

Docker Architecture

Docker의 아키텍쳐에 대해서 1장에서 배워봤던 내용을 다시 짚어보도록 하겠습니다.
Docker Architecture

Docker client에서 이미지를 기반으로 컨테이너를 실행시키는 docker run, Dockerfile을 기반으로 이미지를 만드는 docker build, Docker 레포지토리 등 저장소에 있는 이미지를 다운받는 docker pull 등 다양한 커맨드 명령을 통해 Docker Host와 소통할 수 있습니다. 이 3가지를 포함하여 어떤 Docker CLI가 있는지 살펴봅시다.

docker build

Dockerfile을 기반으로 이미지를 생성할 때 사용하는 명령어입니다.

docker build [OPTIONS] PATH | URL | -

# Example
docker build -t getting-started .

위의 예시에서는 .으로 로컬 디렉토리의 path로 지정을 해주었지만, 아래와 같이 외부 url을 직접 명시해줌으로써 해당 url이 가리키는 레포지토리의 root에 있는 Dockerfile을 기반으로 이미지를 만들 수 있습니다.

docker build github.com/creack/docker-firefox

docker pull

저장소에서 이미지를 다운로드할 때 사용하는 명령어입니다.

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

# Example
docker pull httpd

보통은 Docker Hub에 등록된, 이미 만들어진 이미지를 base image로 사용하는 경우가 많습니다. 태그 없이 아래의 CLI를 사용하는 경우, 태그는 자동으로 :latest를 사용하게 되고, Docker Hub에서 latest 태그가 달린 이미지를 다운로드 받게 됩니다.

docker pull debian
>> Docker Hub로부터 debian:latest 이미지를 다운로드 받습니다.

docker images

Docker의 이미지들을 리스트업하는 명령어입니다. 이 외에도 다양한 option을 사용하여 특정 이미지만 확인할 수 있습니다. 조건에 부합하는 이미지가 없는 경우, 아무 이미지도 검색되지 않습니다.

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

docker image

이미지와 관련된 명령어입니다. 뒤에 어떤 커멘드 명령이 오느냐에 따라 수행하는 것들이 달라질 수 있습니다. 대표적인 3가지만 같이 확인해보도록 하겠습니다.

docker image COMMAND

docker image prune

사용되지 않는 이미지를 모두 삭제합니다. -a라는 옵션이 붙게 되면, 컨테이너에서 참조하지 않는 이미지들 모두 삭제처리를 하게 됩니다. 아래의 --filter라는 옵션 뒤에 "2017-01-04T00:00:00" 이전에 만들어진 이미지를 삭제한다는 내용을 추가적으로 적어주어, 선택적 삭제도 할 수 있습니다.

docker image prune
docker image prune -a --force --filter "until=2017-01-04T00:00:00"

docker image inspect

이미지의 세부정보를 보여줍니다. --format이라는 옵션과 함께 json형식이 아닌 다른 형식으로 세부정보를 확인할 수 있게끔 합니다.

docker image inspect httpd // httpd라는 이미지의 세부정보를 보여줍니다.

docker image tag

이미지에 태그를 생성하는 작업을 합니다.

docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

# Example
docker image tag my-httpd okcorn/my-httpd:latest

docker run

Docker의 이미지를 기반으로 새로운 컨테이너를 생성하고 실행시킵니다. 기존에 있던 컨테이너가 중지된 상태라면, run이 아닌 docker start를 통해 다시 실행시킬 수 있습니다. 중지된 모든 컨테이너를 확인하고자 한다면, docker ps -a을 실행시켜보세요 !

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

# Example
docker run -dp 3000:3000 getting-started
docker run httpd
docker run --name secondContainer httpd
docker run -p 8888:80 -v /Users/jk/wanted/2308/docker-pro-2308/lecture/1st:/usr/local/apache2/htdocs httpd

docker stop

Docker에서 실행되고 있는 단일 혹은 복수의 컨테이너를 중지시킵니다.

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

# Example
docker stop 9b0f49de746c
docker stop -a

docker start

docker start [OPTIONS] CONTAINER [CONTAINER...]

# Example
docker start c8274d6a6273

docker logs

컨테이너의 로그를 보여줍니다. 여러가지 옵션을 통해서 전체 로그가 아닌 필요한 로그를 확인할 수 있게끔 합니다.

docker logs [OPTIONS] CONTAINER

# Example
docker logs second
docker logs second -f

docker rm

Docker의 단일 혹은 복수의 컨테이너를 삭제합니다. 역시 여러가지 옵션을 줄 수 있는데요, 정지된 컨테이너들을 모두 삭제하는 명령어는 아래와 같이 작성해볼 수 있습니다.

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

# Example
docker rm 6026ab9b44cc
docker rm second -f
docker rm $(docker ps --filter status=exited -q) // 정지된 컨테이너 삭제

docker rmi

Docker의 단일 혹은 복수의 이미지를 삭제합니다.

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

# Example
docker rmi 6026ab9b44cc

docker exec

실행되고 있는 컨테이너에 커멘드를 실행하고자 하는 경우 사용합니다. 컨테이너의 기본프로세스가 실행 중일 때만 실행되고, 다시 시작되는 경우에는 이 커맨드 명령은 다시 실행되지 않습니다. 보통은 기본 디렉토리에서 실행이 되고, 꼭 실행되고 있는 상태에서만 작동합니다.

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

# Example
docker exec -it awesome_elion /bin/sh

docker container

컨테이너를 직접적으로 관리할 때 사용합니다. docker image와 마찬가지로 뒤에 어떤 명령어를 쓰느냐에 따라 수행하는 작업이 달라집니다.

docker container COMMAND

docker container prune

중지된 컨테이너를 모두 삭제합니다.

docker container prune

docker container stats

컨테이너들이 사용하고 있는 리소스의 통계치를 실시간으로 보여줍니다.

docker container stats

docker push

이미지를 레지스트리에 업로드합니다.

docker push [OPTIONS] NAME[:TAG]

# Example
docker push drumgrammer/my-httpd:latest

위의 CLI를 종합적으로 보자면, 아래에 정리되어있는 Docker 컨테이너의 lifecycle로 복습해볼 수 있겠습니다.

docker lifecycle

정말 후루루루룩 확인해보았는데요, 이렇게 나열하여 확인하기 보다는 실제 Docker 환경에서 어떻게 사용되는지 직접 실습을 통해 확인한다면, 더 빠른 시간안에 이해할 수 있을 것 같습니다:)

다음 장에서는 Docker network에 대해서 알아보도록 하겠습니다 !

참고
https://docs.docker.com/engine/reference/run/
https://techmormo.com/posts/docker-made-easy-3-container-lifecycle/
원티드 백엔드 챌린지 2023년 8월 학습내용

1개의 댓글

comment-user-thumbnail
2023년 8월 7일

좋은 글 감사합니다. 자주 방문할게요 :)

답글 달기