Docker CLI

강민석·2024년 10월 6일

Docker

목록 보기
2/3

이미지(Image) 다운로드

Docker에서 닌텐도의 칩과 같은 역할을 하는 개념이 이미지(image)라고 했었다.

이미지는 Dockerhub라는 곳에서 다운 받는데 Github처럼 이미지를 저장 및 다운받을 수 있는 저장소 역할을 한다.

# docker pull 이미지명
$ docker pull nginx

특정 버전의 이미지를 다운로드

# docker pull 이미지명:태그명
$ docker pull nginx:stable-perl

=> docker pull nginx는 :lastest가 생략되어 있어 기본적으로 가장 최신 버전을 다운받게 되어있다.

이미지(Image) 조회/삭제

다운받은 모든 이미지 조회

$ docker image ls

이미지 삭제(특정 이미지 삭제)

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

- rm : remove의 약자
- 이미지ID는 전체 ID를 입력하지 않고 일부만 입력해도 된다.

중지된 컨테이너에서 사용하고 있는 이미지는 삭제할 수 없으나

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

명령어를 통해 강제로 삭제시킬 수 있다.

컨테이너에서 실행하고 있는 이미지는 삭제할 수 없다

전체 이미지 삭제

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

// 컨테이너에서 사용하고 있는 이미지를 포함해서 전체 이미지 삭제
$ docker image rm -f $(docker images -q)

컨테이너 생성/실행

컨테이너 생성

이미지를 바탕으로 컨테이너를 생성한다.(닌텐도 칩을 실행시킬 미니 컴퓨터 생성)

docker create 이미지명[:태그명]
$ docker create nginx
  • 컨테이너를 생성만하고 실행은 하지 않는다.

다운받은 이미지가 없다면 자동으로 docker pull [이미지명]을 통해 다운받아진 후 컨테이너가 생성된다.

컨테이너 실행

생성된 컨테이너를 실행시킨다.

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

실행 중인 컨테이너 조회

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

-> 하지만 중단된 컨테이너는 조회되지 않는다

$ docker ps -a # 실행 중단된 컨테이너를 포함한 모든 컨테이너 조회

컨테이너 생성 + 실행

위에서는 docker create로 컨테이너를 생성하고 docker start로 생성된 컨테이너를 실행시켰다.

이미지를 바탕으로 컨테이너를 생성한 뒤, 실행까지 한 번에 시키는 명령어가 존재한다.

// docker run 이미지명[:태그명]
$ docker run nginx // 포그라운드에서 실행
  • 다운받은 이미지가 없다고 자동으로 이미지를 다운받아 컨테이너를 생성 및 실행시키는 명령어이다.

포그라운드 / 백그라운드

  • 포그라운드 : 내가 실행시킨 프로그램이 화면에서만 실행되고 출력되는 상태

프로그램이 시스템 내부까지 들어오지 않고 화면에서만 실행되기 때문에 다른 프로그램을 조작할 수 없다.
=> 프로그램이 실행되고 있는 로그를 실시간으로 확인할 수 있다.

$ docker run nginx // nginx를 컨테이너 안에서 포그라운드로 실행
  • 백그라운드 : 내가 실행시킨 프로그램이 컴퓨터 내부적으로 실행되고 있는 상태

프로그램이 어떻게 실행되고 있는지 로그를 확인할 수 없지만, 다른 명령어를 입력할 수도 있고, 다른 프로그램을 조작할 수도 있다.

# docker run -d 이미지명[:태그명]
$ docker run -d nginx // nginx를 컨테이너 안에서 백그라운드로 실행

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

컨테이너에 이름을 붙여 실행시킬 수 있다.

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

호스트 포트와 컨테이너 포트 연결

컨테이너는 호스트 컴퓨터 내부에 있는 미니 컴퓨터라고 언급했었다.
=> 컨테이너의 Port번호가 존재한다.

그렇기 때문에, 호스트 컴퓨터의 Port번호를 통해 localhost에 접속한다면 실행중인 컨테이너에 접속할 수 없을 것이다.

나의 컴퓨터 port번호 (localhost port)를 컨테이너 port번호 (미니 컴퓨터 port)에 연결시켜주어야 내 컴퓨터 port번호로 접속하여도 컨테이너로 접속할 수 있게 된다.

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

컨테이너 중지/삭제

컨테이너를 조회하는 명령어는 docker ps / docker ps -a를 통해 중다뇐 컨테이너까지 조회할 수 있다고 하였다.

  • 컨테이너를 어떻게 중단?
$ docker stop 컨테이너명[또는 컨테이너 ID]
$ docker kill 컨테이너명[또는 컨테이너 ID]

컴퓨터에 비유하자면 stop은 시스템 종료 버튼을 통해 정상적인 종료,
kill은 본체 버튼을 눌러 무식하게 종료하는 것을 의미

컨테이너 삭제

  • docker stop을 통해 중단되어 있는 특정 컨테이너를 삭제
$ docker rm 컨테이너명[또는 컨테이너 ID]
- rm : remove의 약자

실행 중인 컨테이너(docker run)는 중지한 후에만 삭제가 가능하다.
=> 실행 중인 특정 컨테이너를 강제적으로 삭제할 수는 있다.

  • 특정 컨테이너 강제 삭제
$ docker rm -f 컨테이너명[또는 컨테이너 ID]
  • 모든 컨테이너 삭제
$ docker rm $(docker ps -qa) // 중지된 모든 컨테이너 삭제
$ docker rm -f $(docker ps -qa) // 실행 중인 모든 컨테이너 삭제

컨테이너 로그 조회

포그라운드를 통해 실행시킨 컨테이너는 로그를 조회할 수 있지만 백그라운드로 실행시킨 컨테이너의 로그를 확인하는 방법은?

  • 특정컨테이너의 모든 로그 조회
# docker logs [컨테이너 ID 또는 컨테이너명]

$ docker run -d nginx // 컨테이너 백그라운드 실행
$ docker logs [nginx가 실행되고 있는 컨테이너 ID]
  • 최근 로그 N줄만 조회
# dokcer logs --tail [로그 끝부터 표시할 줄 수] [컨테이너 ID 또는 컨테이너명]
$ dokcer logs --tail N [컨테이너 ID 또는 컨테이너명]
  • __기존 로그 조회 + 생성되는 로그 실시간 조회
# docker logs -f [컨테이너 ID 또는 컨테이너명]

# Nginx의 컨테이너에 실시간으로 쌓이는 로그 확인하기
$ docker run -d -p 80:80 nginx // 호스트 port - 컨테이너 port연결
$ docker logs -f // 로그 실시간 조회
  • __ 기존 로그 조회X + 생성되는 로그 실시간 조회
$ docker logs --tail 0 -f [컨테이너 ID 또는 컨테이너명]

실행 중인 컨테이너 내부 접속

컨테이너는 미니 컴퓨터라고 하였음.

즉, 호스트 컴퓨터 안에 다른 컴퓨터 여러 개가 있는 것과 같으며 각 컨테이너는 자기만의 컴퓨터 공간(OS, 저장 공간, 프로그램 등)이 존재

# docker exec -it 컨테이너명[또는 컨테이너 ID] bash
// bash는 프롬프트(쉘) 종류

$ docker run -d nginx // 백그라운드로 nginx 실행

$ docker exec -it [Nginx가 실행되고 있는 컨테이너 ID] bash
$ ls // 컨테이너 내부 파일 조회(bash 명령어)
$ cd /etc/nginx // 컨테이너 내부에 있는 nginx(이미지)파일 접속

profile
많이 배우고 싶습니다

0개의 댓글