들어가기 전

이번 포스팅에서는 도커의 이미지, 컨테이너, 컨테이너의 생명주기에 대해서 알아보겠습니다. 도커에 대해 알아보기 전에 도커에서 사용되는 컨테이너 가상화와 비교되는 하이퍼바이저 가상화 대해서 알아보겠습니다.

 

 

하이퍼바이저 가상화 VS 컨테이너 가상화

 

하이바이저 가상화

하이퍼바이저는 호스트 운영체제에 설치된 소프트웨어입니다.

하이퍼바이저는 호스트 운영체제에서 여러 개의 가상 머신 서버를 생성할 수 있습니다.

가상 머신은 각각 독립된 환경에서 실행되기 때문에 하나의 가상 머신에 문제가 생겨서 강제종료되더라도 다른 가상머신에는 영향을 주지 않습니다.

그리고 각각의 가상머신에는 운영체제가 있는데 이것을 게스트 운영체제라고 부릅니다.

 

 

컨테이너 가상화

컨테이너 가상화는 하이퍼바이저와 유사하게 호스트 운영체제에 여러 서버를 독립된 환경에서 생성하고 실행할 수 있습니다.

그런데 하이퍼바이저 같은 경우는 가상머신에 각각의 게스트 운영체제가 존재하지만 컨테이너 가상화에서는 게스트 운영체제가 존재하지 않아 하이퍼바이저에 비해 가볍습니다.

그리고 모든 컨테이너가 호스트 운영체제의 커널을 공유하고 있습니다.

 

 

 

하이퍼바이저 가상화와 컨테이너 가상화에 대해 간략하게 알아보았습니다. 이제 도커의 이미지, 컨테이너, 컨테이너의 생명주기에 대해서 알아보겠습니다.

 

 

이미지

도커의 이미지는 서비스 운영에 필요한 서버 프로그램, 소스 코드 및 라이브러리, 컴파일된 실행파일을 묶은 형태입니다.

즉 애플리케이션 실행에 필요한 구성요소를 모두 가지고 있다고 생각하시면 됩니다.

 

이미지는 로컬에서 다운로드할 수 있고 퍼블릭 레지스트리, 프라이빗 레지스트리에서 이미지를 다운로드할 수 있습니다.

퍼블릭 레지스트리는 도커 허브와 같은 누구나 접근 가능한 저장소이고 프라이빗은 특정 IP으로만 접근 가능한 레지스트리입니다.

레지스트리는 협업할 때 협업하는 개발자들과 같은 환경에서 작업할 수 있게 도커 이미지에 대한 정보를 저장하고 있습니다.

레지스트리는 GitHub와 같은 역할이라고 생각하시면 됩니다.

 

이미지를 다룰 수 있는 명령어에 대해서 알아보겠습니다.

 

 

도커 이미지에 대한 명령어

 

이미지 목록 확인

 

docker image ls

 

 

  • 위 명령어같이 실행시키면 로컬에 다운로드된 모든 이미지 목록을 확인할 수 있습니다.

 

이미지 다운로드 및 레지스트리 업로드

 

이미지를 다운로드하거나 레지스트리에 이미지를 업로드할 때 이미지 명명 규칙은 아래와 같습니다.

 

 

"레지스트리주소/프로젝트명/이미지명:이미지태그"

  • 레지스트리 주소 : 어떤 레지스트리를 사용할지 정하는 것. 생략해서 작성을 하면 기본값으로 지정된 레지스트리 주소 값 사용 
    • 이미지를 어디서 다운로드할지에 대한 주소 
    • 도커 허브 사용하면 기본값은 docker.io
  • 프로젝트명 : 이미지를 보관하는 폴더 개념
    • 도커 허브 같은 경우는 프로젝트 명이 가입한 계정명
  • 이미지명 : 다운로드할 이미지
  • 이미지 태그 : 이미지 버전 만약 빈값이면 최신버전이 기본값

 

docker pull mysql
docker pull 도커허브계정명/도커허브에서 다운로드 받을 이미지명:버전

docker tag mysql 도커허브계정명/test_mysql

docker push 도커허브계정명/test_mysql:latest

 

 

docker pull mysql

 

  • 위 명령어를 입력을 하면 아래 사진과 같이 mysql 이미지를 다운로드합니다.

 

 

 

docker tag mysql 도커허브계정명/test_mysql //docker tage 기존이미지명 추가할이미지명

docker image ls

 

  • 다운로드한 mysql을 커스텀 image로 만듭니다.
  • 이미지 목록을 확인하면 사진과 같은 이미지 목록을 확인할 수 있습니다.

 

 

  • imageID를 확인해 보면 같은 ID 값을 가지고 있습니다. 이름만 다를 뿐 같은 이미지를 의미합니다.

 

docker push 도커허브계정명/test_mysql

 

 

 

 

 

 

  • 도커 허브에 커스텀 Image가 업로드된 것을 확인할 수 있습니다. 그리고  다운로드 횟수는 0으로 되어있는 것을 확인할 수 있습니다.

 

docker pull 도커허브계정명/test_mysql

 

  • 위와 같이 도커허브에 업로드된 이미지를 다운로드하면 다운로드 횟수가 올라갑니다.

 

 

이미지 삭제

 

docker image rm 이미지명 || IMAGE ID

 

  • 삭제할 이미지명 또는 IMAGE ID값을 사용하여 이미지를 삭제할 수 있습니다.

 

지금까지 도커 이미지를 다루는 방법에 대해서 알아보았습니다. 이제 컨테이너를 다루는 방법에 대해서 알아보겠습니다.

 

컨테이너

컨테이너는 이미지를 실행한 형태로 애플리케이션과 해당 애플리케이션을 실행시키는 환경을 함께 패키징 하는 것입니다.

여러 개의 컨테이너를 생성할 수 있고 각각의 컨테이너는 격리된 환경에서 실행되기 때문에 하나의 컨테이너에서 문제가 발생하더라도 다른 컨테이너에 영향이 없습니다.

 

컨테이너의 생명주기

 

 

 

도커 컨테이너에 대한 명령어

 

컨테이너 목록 확인

 

docker ps

docker ps -a

 

  • docker ps : 현재 실행 중인 컨테이너 목록 확인
  • docker ps -a : 컨테이너 전체 목록 확인

 

 

 

컨테이너 생성

 

docker create --name 생성할컨테이너명 이미지명

 

  • --name : 컨테이너 이름 지정
  • 위에서 다운로드한 이미지로 "create" 명령어를 통해 컨테이너가 생성된 것을 확인할 수 있습니다.
  • 생성만 되었을 뿐 실행된 상태가 아니라 "docker ps -a" 명령어를 통해 생성된 것을 확인할 수 있습니다.

 

 

 

컨테이너 실행

 

docker start 컨테이너명 또는 컨테이너ID

 

  • 컨테이너를 실행하고 "docker ps" 명령어를 입력하면 실행 중인 도커 컨테이너 목록에 확인해 보면 방금 명령어를 통해 실행되고 있는  컨테이너를 확인할 수 있습니다.

 

 

컨테이너 일시정지 및 재시작

 

컨테이너 일시 정지

docker pause 컨테이너명 또는 컨테이너ID

 

  • "pause" 명령어를 통해 컨테이너를 일시 정지할 수 있습니다. "docker ps" 명령어를 통해 목록을 확인하고 Status값을 확인해 보면 "Paused" 상태인 것을 확인할 수 있습니다.

 

 

컨테이너 일시정지 -> 재시작

 

docker unpause 컨테이너명 또는 컨테이너ID

 

  • "unpause" 명령어를 통해 일시정지 되어있던 컨테이너를 다시 실행시킬 수 있습니다. "docker ps" 명령어를 통해 목록을 확인해 보면 Status에서 "Paused" 값이 바뀐 걸 확인할 수 있습니다.

 

 

 

 

컨테이너  재시작

 

docker restart 컨테이너명 또는 컨테이너ID

 

  • "restart" 명령어를 통해 컨테이너를 재시작할 수 있습니다. 해당 명령어를 입력하고 10초 뒤에 컨테이너는 재시작됩니다.

 

컨테이너 종료

 

docker stop 컨테이너명 또는 컨테이너ID

 

  • "stop" 명령어를 통해 실행 중인 컨테이너를 종료시킬 수 있습니다.

 

 

컨테이너 삭제

 

실행 중인 컨테이너 삭제

 

docker rm -f 컨테이너명 또는 컨테이너ID

 

  • 실행 중인 컨테이너를 -f 옵션을 통해 삭제할 수 있습니다.

 

 

종료된 컨테이너 삭제

 

docker rm 컨테이너명 또는 컨테이너ID

 

 

컨테이너 여러 개 삭제

 

docker rm -f 컨테이너명 컨테이너명 컨테이너명 

docker rm 컨테이너명 컨테이너명 컨테이너명