Notice
Recent Posts
Recent Comments
Link
관리 메뉴

look-forest

현업에서 자주 사용하는 Docker CLI 익히기 본문

Infra/Docker

현업에서 자주 사용하는 Docker CLI 익히기

studyHub 2025. 8. 15. 15:29

이미지

이미지 다운로드

# docker pull 이미지명
$ docker pull nginx # docker pull nginx:latest와 동일하게 작동

# docker pull 이미지명:태그명
$ docker pull nginx:stable-perl
  • DockerHub에서 이미지를 다운받는 것이다. Dockerhub은 Github처럼 이미지를 저장 및 다운받을 수 있는 저장소 역할
  • 태그명은 이미지의 특정 버전을 의미한다. 태그명을 생략하면 자동으로 :lastest가 붙는다.

 

이미지 조회/삭제

다운받은 모든 이미지 조회

$ docker image ls(list)

 

  • REPOSITORY: 이미지명
  • TAG: 버전

이미지 삭제

$ docker image rm [이미지 ID 또는 이미지명]

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

# 컨테이너에서 사용하고 있는 이미지를 포함해서 전체 이미지 삭제
$ docker image rm -f $(docker images -q)
  • id는 기니까 앞자리 일부만 입력해도 된다.
  • 컨테이너에서 사용 중인 이미지를 삭제하려면 -f 옵션을 붙여야 한다. (단, 중단 상태여야 한다)
  • docker images -q : 시스템에 있는 모든 이미지의 ID를 반환한다. 
    여기서 -q 옵션은 quite를 의미하며, 상세 정보 대신에 각 이미지의 고유한 ID만 표시하도록 지시한다. 

컨테이너

컨테이너 생성/실행

컨테이너 생성

# docker create 이미지명[:태그명]
$ docker create nginx

$ docker ps -a # 모든 컨테이너 조회
  • 이미지를 바탕으로 컨테이너를 생성한다. 이 때, 컨테이너를 실행시키지는 않는다.
    (컨테이너를 실행하지 않고 생성만 하는 경우가 잘 없어서, 이 명령어는 잘 사용하지 않는다.)
  • 로컬 환경에 다운받은 이미지가 없다면 Dockerhub으로부터 이미지를 다운(docker pull)받아서 컨테이너를 생성한다.

컨테이너 실행

$ docker start 컨테이너명[또는 컨테이너 ID]

$ docker ps # 실행중인 컨테이너 조회

# Nginx 컨테이너 중단 후 삭제하기
$ docker ps # 실행 중인 컨테이너 조회
$ docker stop {nginx를 실행시킨 Contnainer ID} # 컨테이너 중단
$ docker rm {nginx를 실행시킨 Contnainer ID} # 컨테이너 삭제
$ docker image rm nginx # Nginx 이미지 삭제

 

컨테이너 생성 + 실행

# docker run 이미지명[:태그명]
$ docker run nginx # 포그라운드에서 실행 (추가적인 명령어 조작을 할 수가 없음)

# Ctrl + C로 종료할 수 있음
  • 이미지를 바탕으로 컨테이너를 생성한 뒤, 컨테이너를 실행까지 시킨다.
    (처음에 이미지를 바탕으로 컨테이너를 실행시키고 싶을 때, 이 명령어를 자주 사용한다.)
  • 로컬 환경에 다운받은 이미지가 없다면 Dockerhub으로부터 이미지를 다운(`docker pull`)받아서 실행시킨다.
  • Dockerhub으로부터 새롭게 갱신된 이미지를 다운 받고 싶다면 `docker pull` 명령어를 활용해야 한다.

 

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

기본적으로 foreground에서 실행되기 때문에 보통은 background에서 실행시킨다.

(실시간으로 로그 확인은 가능하지만, 다른 작업을 못하는 문제가 있어서)

# docker run -d 이미지명[:태그명]
$ docker run -d nginx

 

 

컨테이너에 이름 붙여서 생성 및 실행하기

# docker run -d --name [컨테이너 이름] 이미지명[:태그명]
$ docker run -d --name my-web-server nginx

 

 

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

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

 

docker run -d nginx으로 실행시키고 ps로 조회하면 아래와 같다.

이때 localhost:80으로 요청을 보내도 응답이 없다. 왜냐면 host 컴퓨터와 컨테이너는 네트워크가 분리되어 있기 때문이다.

 

docker run -p 4000:80 라고 명령어를 입력하게 되면, 도커를 실행하는 호스트의 4000번 포트를 컨테이너의 80번 포트로 연결하도록 설정한다.

host 컴퓨터의 4000번 포트로 요청을 보내면, 컨테이너의 80번 포트와 연결시키겠다.

 

 

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

컨테이너 조회

# 실행 중인 컨테이너들만 조회
$ docker ps

# 모든 컨테이너 조회 (작동 중인 컨테이너 + 작동을 멈춘 컨테이너)
$ docker ps -a

 

컨테이너 중지

$ docker stop 컨테이너명[또는 컨테이너 ID]
$ docker kill 컨테이너명[또는 컨테이너 ID] # stop이 안먹힐때 비정상적 강제 종료

 

컨테이너 삭제

# 중지되어 있는 특정 컨테이너 삭제
$ docker rm 컨테이너명[또는 컨테이너 ID]

# 실행되고 있는 특정 컨테이너 삭제 (강제 종료 후 삭제)
$ docker rm -f 컨테이너명[또는 컨테이너 ID]

# 중지되어 있는 모든 컨테이너 삭제
$ docker rm $(docker ps -qa)

# 실행되고 있는 모든 컨테이너 삭제
$ docker rm -f $(docker ps -qa)

 


컨테이너 로그 조회

# 모든 로그 조회
# docker logs [컨테이너 ID 또는 컨테이너명] 
$ docker logs [nginx가 실행되고 있는 컨테이너 ID] 

# 최근 로그 10줄만 조회
# dokcer logs --tail [로그 끝부터 표시할 줄 수] [컨테이너 ID 또는 컨테이너명]
$ dokcer logs --tail 10 [컨테이너 ID 또는 컨테이너명]

# 기존 로그 조회 + 생성되는 로그를 실시간으로 보고 싶은 경우
# docker logs -f [컨테이너 ID 또는 컨테이너명]
$ docker logs -f [컨테이너 ID 또는 컨테이너명]

# 기존 로그는 조회하지 않기 + 생성되는 로그를 실시간으로 보고 싶은 경우
$ docker logs --tail 0 -f [컨테이너 ID 또는 컨테이너명]
  • -f : follow의 약어

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

컨테이너는 미니 컴퓨터라고 표현했다. 즉, 호스트 컴퓨터 안에 다른 새로운 컴퓨터가 여러개 있는 것과 같다. 따라서 각각의 컨테이너는 자기만의 컴퓨터 공간(OS, 저장 공간, 프로그램 등)을 가지고 있다.

# docker exec -it 컨테이너명[또는 컨테이너 ID] bash
$ docker exec -it [Nginx가 실행되고 있는 컨테이너 ID] bash
  • bash : 쉘(Shell)의 일종 (bash를 이용해 접속하겠다)
  • -it : -it옵션을 사용해야 명령어를 입력하고 결과를 확인할 수 있다. 
    -it옵션을 적지 않으면 명령어를 1번만 실행시키고 종료되어 버린다. 즉, -it 옵션을 적어야 계속해서 명령어를 입력할 수 있다. 
  • 컨테이너 내부에서 나오려면 Ctrl + D 또는 exit을 입력하면 된다. 

[실습] 

  • 명령어에서 보통 컨테이너/이미지는 맨 끝에 적는다.
  • 호스트 컴퓨터와 컨테이너는 독립된 환경을 같는다. 네트워크도 달라서, 포트 매핑을 해줘야 접속할 수 있다.

Docker로 Redis 실행시켜보기

# Redis 이미지를 바탕으로 컨테이너 생성하고 실행시키기(백그라운드, 포트매핑)
$ docker run -d -p 6379:6379 redis

# 다운로드 된 이미지 확인하기
$ docker image ls

# 컨테이너가 잘 실행되고 있는 지 체크
$ docker ps

# 컨테이너 실행시킬 때 에러 없이 잘 실행됐는 지 로그 체크
$ docker logs [컨테이너 ID 또는 컨테이너명]

# Redis 컨테이너에 접속 (redis가 설치된 PC에 접속)
$ docker exec -it [컨테이너 ID 또는 컨테이너명] bash

# 컨테이너에서 redis 사용해보기
$ redis-cli

127.0.0.1:6379> set 1 jaeryang
127.0.0.1:6379> get 1


참고 자료 & 이미지 출처
비전공자도 이해할 수 있는 Docker 입문·실전