[Docker] 도커 이미지와 컨테이너

easyone·2024년 11월 9일
0

Docker

목록 보기
2/3

이미지로 컨테이너 생성하기

이미지로 컨테이너를 생성하고, 생성한 컨테이너를 통해 응용 프로그램을 실행할 수 있다. 즉 이미지에는 응용프로그램을 실행하기 위한 것들이 포함되어 있어야 한다.

  • 컨테이너가 시작될 때 실행되어야 하는 명령어
  • 파일 스냅샷 : 실행하려는 대상의 디렉토리나 파일을 복사해오는 것을 말한다.
  1. docker 클라이언트에서 실행 명령어를 입력한다.
docker run [image명] 
  1. 파일 스냅샷(필요한 파일들)을 컨테이너 하드디스크로 옮긴다.
  2. 이미지에서 가지고 있는 명령어를 실행해준다. 그러면 컨테이너가 실행될 때 커널을 통해서 실행하고자 하는 프로그램이 실행되는 것이다.

도커 클라이언트 명령어

  1. 이미지 내부 파일 시스템 구조 보기
docker run [image명] ls 

ls 커맨드는 리눅스에서 현재 디렉토리의 파일 리스트를 보여주는 명령어인데, 이런 형식으로 사용하면 이미지 리스트를 출력하도록 한다. ls가 있는 자리는 이미지가 가지고 있는 시작 명령어를 무시하고, 해당 자리에 있는 명령어를 실행하도록 한다.

그런데 해당 명령어를 실행할 때, 이미지 파일 스냅샷 안에 ls 명령어를 사용 가능하게 하는 파일이 있어야만 사용이 가능하다. 예를 들어 Alpine 이미지의 경우 ls 명령어를 사용 가능하게 하는 파일이 스냅샷에 포함되어 있기 때문에 가능하지만, hello-world라는 이미지에는 없기 때문에 파일을 찾을 수 없다는 오류가 뜨게 된다.

  1. 실행중인 컨테이너 나열하기
docker ps 

다음 명령어를 입력하면 alpine이라는 컨테이너를 실행시킬 수 있다.

 docker run alpine ping localhost

실행시킨 뒤에 docker ps 명령을 입력하면, 다음과 같이 표시된다.

  • CONTAINER ID : 컨테이너의 고유한 아이디로 해쉬값이다. 훨씬 긴 값이지만 일부분만 표시된다.
  • IMAGE : 컨테이너를 생성할 때 사용한 도커 이미지명이다.
  • COMMAND : 이미지에 내장된, 컨테이너가 시작할 때 실행될 명령어이다.
  • CREATED : 컨테이너가 생성된 시간이다.
  • STATUS : 컨테이너의 상태이다.
  • PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트이다.
  • NAMES: 컨테이너의 고유한 이름으로, 컨테이너 생성 시 --name 옵션으로 설정할 수 있고 설정하지 않으면 임의로 도커 엔진이 설정한다.

포트 등의 옵션들을 컨테이너를 실행할 때 부여할 수 있다.

  1. 원하는 항목만 조회하기
docker ps --format 'table{{.Names}}\t table{{.Image}}'

위의 항목 중의 모든 항목을 표시하지 않고 원하는 항목만 조회하고 싶을 수가 있다. 원하는 항목을 --format 옵션과 table.{{}}을 사용해서 표시할 수 있다.

  1. 모든 컨테이너 나열하기
docker ps -a

종료된 컨테이너까지 나열하고 싶다면, -a 옵션을 사용하면 된다. 다음과 같이 종료된 컨테이너들도 표시되는 것을 알 수 있다.

도커 컨테이너의 생명주기

컨테이너 생성 및 실행

  1. docker create
docker create <이미지명> 

이미지를 기반으로 컨테이너를 생성하는 명령어이다. 컨테이너 내부 접근을 하거나 실행하는 것이 아니라 생성하기만 하고, 스냅숏만 생성되도록 하는 명령어이다. 해당 명령어를 실행하면, 컨테이너의 상태가 start가 아닌 created가 된다.

실행 시 다음과 같이 컨테이너 ID 값이 반환된다.

즉 도커 ps를 해보면 컨테이너가 실행 중이 아니기 때문에 방금 생성한 컨테이너는 표시되지 않는다. -a 옵션을 통해 확인해보면,

STATUS 항목이 created가 되어 있음을 알 수 있다.

  1. docker start
docker start <컨테이너 이름 / 아이디> 

이미 생성한 컨테이너를 시작하는, 즉 생성해둔 스냅숏을 동작시키는 명령어이다.

  1. docker run
docker [conatiner] run [옵션] <IMAGE명> [실행명령]

start와의 차이
run은 새로운 컨테이너를 이미지로부터 생성한다. start는 기존에 생성된 컨테이너를 실행시킨다는 점에서 차이가 있다.

컨테이너 중지

  1. docker stop
docker stop [컨테이너ID]

stop은 하고 있던 작업들을 완료하고 컨테이너를 중지시킨다.

  1. docker kill
docker kill [컨테이너ID]

kill을 할 경우 하고있던 작업을 멈추고 바로 컨테이너를 중지시킨다는 점에서 stop과 차이가 있다.

컨테이너 삭제

  1. 중지된 컨테이너 삭제
docker rm [아이디/이름]

일반적으로 컨테이너는 실행중이라면 중지한 뒤에 삭제할 수가 있다.

  1. 모든 컨테이너 삭제
docker rm `docker ps -a -q`

해당 명령어 실행 시 다음과 같이 실행 중인 컨테이너도 삭제된다.

또는 실행 중인 컨테이너를 삭제하고 싶다면, -f 옵션을 사용해주면 된다. 컨테이너가 강제 종료되며 삭제된다.

docker rm -f [컨테이너명]
  1. 이미지 삭제
docker rmi <이미지 ID>
  1. 컨테이너, 이미지, 네트워크 모두 삭제
docker system prune

공간을 절약하기 위해서 사용하지 않는 이미지,컨테이너 등을 지워두는 것이 좋다.

  1. 실행 중이지 않은 컨테이너 모두 삭제
docker container prune

실행 중이지 않은 컨테이너들도 저장공관을 차지하기 때문에, 위의 명령어를 통해 실행 중이지 않은 컨테이너를 모두 삭제할 수 있다.

실행중인 컨테이너에 접속하기

실행중인 컨테이너에 명령어 전달하기

docker exec [컨테이너ID] [전달할 명령]

위의 명령어를 사용해서 명령어를 전달할 수가 있다. 컨테이너를 먼저 실행하고, 위의 명령어를 실행하고 전달할 명령을 입력하면 된다. 아래의 명령어와 똑같은 결과를 반환한다. run은 실행할 때, exec은 실행 중인 컨테이너에 명령어를 전달한다는 점에서 차이가 있다.

docker run [이미지명] [실행할 명령]

실행중인 컨테이너에 터미널 환경으로 접속하기

컨테이너를 실행하고, 다음 명령어를 입력하면 터미널 환경으로 접속할 수 있다.

docker exec -it [컨테이너ID] sh
profile
백엔드 개발자 지망 대학생

0개의 댓글