[Docker] 자주 사용하는 Docker CLI 정리하기

2025. 4. 27. 13:33Cloud & Infra/도커(Docker)

이미지 다운로드

컨테이너를 실행시키려면 이미지가 필요하다.

이미지: 닌텐도에 꽂는 게임 칩 같은 것임

 

docker pull {이미지명}
ex) docker pull nginx

이미지 조회/삭제

[이미지 조회]

이미지들을 docker hub에서 찾을 수 있음(https://hub.docker.com/)

 

- docker hub이란?: 깃허브처럼 이미지를 저장 및 다운 받을 수 있는 저장소 역할을 하는 곳

- 태그명: 해당 이미지의 특정 버전을 나타내는 이름

 

특정 버전의 이미지를 다운 받고 싶은 경우 태그명과 함께 다운받으면 됨

docker pull nginx

docker pull nginx:{버전}
ex) docker pull nginx:stable-alpine3.19-perl

 

- docker pull nginx: nginx:latest 버전 다운로드

- docker pull nginx:{버전}: 지정한 버전 다운로드

 

 

[이미지 삭제]

docker image rm {IMAGE ID}
ex) docker image rm 8c0ec5e32733

docker image rm -f {IMAGE ID}
ex) docker image rm -f 8c0ec5e32733

docker image rm $(docker images -q)

docker image rm -f $(docker images -q)

 

- docker image rm {IMAGE ID}: 컨테이너에서 사용하고 있지 않은 이미지만 삭제

- docker image rm -f {IMAGE ID}: 중단된 컨테이너가 사용하고 있는 이미지 삭제. 단, 실행 중인 컨테이너의 이미지는 삭제 불가능

- docker image rm $(docker images -q): 컨테이너에서 사용하고 있지 않은 전체 이미지를 삭제

- docker image rm -f $(docker images -q): 컨테이너에서 사용하고 있는 이미지 중 중단된 컨테이너에서 사용하고 있는 이미지들을 삭제

 

참고) IMAGE ID의 전문이 아닌 일부만 입력해줘도 삭제 가능


컨테이너 생성/실행

[컨테이너 생성]

= 내 컴퓨터 안에 미니 컴퓨터를 띄워보겠다는 뜻

 

현재 상태: 컨테이너는 생성됨. 즉, 컴퓨터는 배치는 했는데, 실행은 아직 시키지 않은 상태

 

docker start {CONTAINER ID}
ex) docker start c65bd646fe3a

 

- docker start {CONTAINER ID}: 컨테이너 시작하는 명령어

 

 

=> STATUS가 Created에서 바뀐 것을 알 수 있음

 

 

[컨테이너 실행]

이전에 도커를 생성 후 실행할 때 docker create, docker start 명령어를 입력했었는데, 

현업에서는 보통 두 개가 합쳐진 명령어를 사용한다.

 

컨테이너를 포그라운드에서 실행시키기

docker run nginx

 

위의 명령어를 이용해 컨테이너를 실행하면 다음과 같이 명령어를 추가 입력을 할 수 없게 된다.

 

 

그 이유는 바로 docker run nginx라는 명령어는 포그라운드에서 실행을 하기 때문이다.

 

  • 포그라운드(foreground):
    - 내가 실행시킨 프로그램의 내용이 화면에서 실행되고 출력되는 상태
    - 포그라운드 상태는 실행시킨 프로그램의 상태를 즉각적으로 계속 보내야 되기 때문에 내가 다른 프로그램을 조작할 수 없음
  • 백그라운드(background):
    - 내가 실행시킨 프로그램이 컴퓨터 내부적으로 실행되는 상태

 

컨테이너를 백그라운드에서 실행시키기

docker run -d nginx

 

 

컨테이너를 포그라운드로 실행할 경우와 달리 로그가 뜨지 않는다.

따라서 즉각적으로 프로그램이 어떻게 실행되고 있는지 확인을 할 수 없다.

대신에 다른 명령어들을 칠 수 있다.


컨테이너 조회/중지/삭제

[컨테이너 조회]

위에서 실행했던 nginx를 정리해줄 것이다.

docker ps
docker ps -a

 

- docker ps: 현재 '실행 중인' 컨테이너 목록들만 조회

- docker ps -a: 모든 컨테이너(실행 중 + 중단) 목록 조회

 

 

위의 사진에서 STATUS가 Up이라고 되어 있는 것이 지금 실행되고 있는 것이다.

 

[컨테이너 중지]

docker stop {CONTAINER ID}
docker stop {CONTAINER ID} {CONTAINER ID}...
docker kill {CONTAINER ID}

 

- docker stop {CONTAINER ID}: 컨테이너 중지

- docker stop {CONTAINER ID} {CONTAINER ID}: 한 번에 여러 컨테이너 중지

- docker kill {CONTAIENR ID}: 컨테이너를 강제로 중지

 

 

[컨테이너 삭제]

docker rm {CONTAINER ID}

 

- docker rm {CONTAINER ID}: 컨테이너 삭제

=> 단, 실행 중인 컨테이너는 삭제가 불가능함

=> 따라서 중지되어 있는 컨테이너만 삭제 가능

 

 

docker rm $(docker ps -qa)

 

- docker rm $(docker ps -qa): 중지되어 있는 모든 컨테이너를 삭제하고 싶을 때

 

 

docker rm -f {CONTAINER ID}

 

- docker rm -f {CONTAINER ID}: 실행되고 있는 컨테이너를 삭제

 

 

[이미지 삭제]

docker image ls

docker image rm nginx

 

- docker image ls: 이미지 목록 조회

- docker image rm {IMAGE}: 이미지 삭제

 


컨테이너에 이름을 붙여서 생성 및 실행하는 방법

컨테이너 실행 후 크롬 시크릿 모드에서 확인하기

docker run -d --name {NAME} {IMAGE}
ex) docker run -d --name my-web-server nginx

 

 

이름이 my-web-server로 잘 부여된 것을 확인할 수 있다.

 

 

 

 

docker image rm {IMAGE}
ex) docker image rm nginx

 

image를 삭제할 때 IMAGE ID가 아닌 이름으로도 삭제가 가능하다.

 

 

다시 nginx를 백그라운으로 실행하고 이를 크롬의 시크릿 모드에서 실행하면(일반 크롬에서 실행할 경우 캐싱이 되어있을 수 있기 때문에)

 

 

다음과 같이 사이트에 연결할 수 없다고 뜬다.

그 이유는

 

 

우리가 nginx를 띄웠다는 것은 호스트 컴퓨터 안에 미니 컴퓨터 환경을 띄운 것인데, 미니 컴퓨터 환경의 특징 중 하나가 독립적인 환경이라는 것이다.

즉, 호스트 컴퓨터의 네트워크와 컨테이너의 네트워크가 분리됐다는 것이다.

때문에 외부에서 접근할 수 없다.

호스트 컴퓨터만 접근이 가능하지, 컨테이너는 호스트 컴퓨터를 타고 들어가야 되는데, 지금 그것을 하지 못하는 것이다.

독립되어 있기 때문에!!

그래서 이것을 연결을 해서 컨테이너에 접속할 수 있게 만들어 주는 것이 ‘포트를 연결하는 기능’이다.

 

 

호스트의 포트와 컨테이너의 포트를 연결하기

 

docker run -d -p [호스트 포트]:[컨테이너 포트] 이미지명[:태그명]
ex) docker run -d -p 4000:80 nginx

 

 

위의 명령어는 사용자가 외부에서 4000번 포트로 요청을 보내면, 컨테이너의 80번 포트와 연결시키겠다는 뜻이다.

위의 명령어 실행 후 다시 시크릿 모드에서 localhost:4000을 입력하면, 하단의 사진과 같이 nginx가 실행되는 것을 확인할 수 있다.

 

 

 

 

참고로 localhost:80으로 접속은 불가능하다. 그 이유는 localhost:80번 포트와 내부와는 연결된 것이 없기 때문이다.

만약 localhost:80으로 접속하고 싶은 경우 다음과 같이 nginx를 실행하면 된다.

 

 


컨테이너 로그 조회

실행 시킨 컨테이너가 잘 실행되고 있는지, 에러가 발생한 것은 아닌지 로그를 확인하는 것도 중요하다.

 

포그라운드로 nginx를 실행시키면 실시간으로 로그를 확인할 수 있다.

 

 

단, 포그라운드는 다른 작업을 할 수 없는 것이 단점이다.

다음 명령어를 이용해 다시 백그라운드로 실행해보았다.

 

docker run -d nginx

 

그 후 백그라운드의 로그를 확인하기 위해 다음 명령어를 실행했다.

 

docker logs {CONTAINER ID}
ex) docker logs bc0

 

- docker logs {CONTAINER ID}: 백그라운드로 실행한 컨테이너의 로그를 확인하는 방법

 

 

로그가 너무 많아서 다 보기 어려울 경우 다음 명령어를 실행하면 된다.

 

docker logs --tail 10 {CONTAINER ID}
ex) docker lgos --tail 10 bc0

 

- docker logs --tail 10 {CONTAINER ID}: 로그가 너무 많아서 다 보기 어려울 경우. 끝에 있는 10줄만 보고 싶은 경우

 

 

실시간으로 생성되는 로그들을 보고 싶을 때는 다음 명령어를 실행하면 된다.

 

docker logs =f {CONTAINER ID}
ex) docker logs -f 5e2

 

- docker logs -f {CONTAINER ID}: 실시간으로 생성되는 로그들을 보고 싶을 때 사용

 

위의 명령어를 실행 후 크롬 > 시크릿 모드에서 localhost:80에 접속 후 새로고침을 하면 로그가 계속 쌓이는 것을 확인할 수 있다.

 

 

 

지금부터 생성되는 로그만 실시간으로 확인하고 싶은 경우, 다음 명령어를 실행하면 된다.

 

docker logs --tail 0 -f {CONTAINER ID}
ex) docker logs --tail 0 -f 5e2

 

- docker logs —tail 0 -f {CONTAINER ID}: 지금부터 생성되는 로그만 실시간으로 확인하고 싶은 경우, 기존 로그 안 봄 & 실시간으로 확인


실행 중인 컨테이너 내부에 접속하기(exec -it)

 

앞서 말한 것과 같이, 컨테이너는 미니 컴퓨터이다.

미니 컴퓨터라는 것은 호스트 컴퓨터 안에 다른 새로운 컴퓨터가 여러 개를 띄울 수 있는 형태의 미니 컴퓨터가 있다라는 뜻과 같다.

따라서 각각의 컨테이너는 자기 만의 컴퓨터 공간을 가지고 있다.

 

호스트 컴퓨터의 경우 ls 같은 명령어를 치면서 디버깅도 해볼 수 있고, 여러 가지 명령어도 쳐볼 수 있다.

그리고 어떤 파일들이 저장되어 있는지도 확인할 수 있다.

이처럼 컨테이너 컴퓨터 환경에서도 이런 것들을 확인하고 싶을 수 있다.

이럴 때 사용하는 것이 실행 중인 컨테이너 내부에 접속하는 명령어이다.

 

 

docker exec it {CONTAINER ID} bash
ex) docker exec it 2c1 bash

 

- docker exec it {CONTAINER ID} bash: 컴퓨터를 bash 환경으로 접속하겠다는 뜻

⇒ 해당 명령어를 입력하면 컨테이너 환경에 접속한 것을 확인할 수 있음

 

이 컨테이너 안에는 nginx가 깔려있다.

이 nginx로 접속해보겠다.

 

 

nginx의 nginx.conf 파일에 접속해보겠다.

 

 

이처럼 컨테이너 내부의 코드도 읽을 수 있다.

 

컨테이너 컴퓨터에서 나와서 다시 호스트 컴퓨터로 가고 싶은 경우

 

 

exit를 치면 다시 내 컴퓨터 환경으로 돌아온 것을 확인할 수 있다.


[실습] Docker로 Redis 실행시키기

  1. 이미지 다운받기 위해서는 우선 존재하는지 확인하기(docker hub에서 검색해보기)
  2. docker run -d -p 6379:6379 redis
    - run 명령어를 치면 local 환경에 redis가 있는지 우선 찾고, 없다면 자동으로 다운로드
    - -d: 백그라운드에서 실행

 

 

  • docker log {CONTAINER ID}: 로그 확인
  • docker exec -it {CONTAINER ID} bash: 컨테이너에 들어가기
  • redis-cli: redis가 잘 실행되는지 확인

 

컨테이너 강제 종료 후 삭제

 

 

 

 

 

출처: 인프런 비전공자도 이해할 수 있는 Docker 입문/실전

 

'Cloud & Infra > 도커(Docker)' 카테고리의 다른 글

[Docker] Docker로 Nginx 웹서버 구동하기  (0) 2025.04.26