인턴 기간 중에 배포 자동화를 담당하게 되었고, Docker에 대해 학습하게 되었다. (Docker를 이용하지 않고도 배포 자동화는 가능하지만, Docker를 이용하기로 했기 때문)
여기에 학습했던 내용들을 정리해본다.
1. Docker 기본 개념
- Docker란?
가장 간단하게 설명하면 컨테이너를 이용하여 각각의 프로그램을 분리된 환경에서 실행, 관리가 가능하게 하는 도구이다.
도커와 가상머신(VM)은 모두 가상화 기술로서, 하나의 서버에서 여러 개의 애플리케이션을 동시에 운영할 수 있게 한다.
가상머신은 호스트 운영체제와 완전히 분리되어 실행되기 때문에 다양한 운영체제에서 실행될 수 있다. 하지만 커널을 공유하지 않고, 또한 각각 독립적인 메모리 공간도 할당해야하기 때문에 성능 저하가 일어난다.
하지만 도커는 호스트 운영체제와 컨테이너의 운영체제가 동일하고 커널을 공유하기 때문에 더 많은 컨테이너를 한 대의 서버에서 실행할 수 있다. 그리고 컨테이너 이미지는 훨씬 더 작고 가볍기 때문에 빠르게 배포할 수 있다.
- Container(컨테이너)란?
컨테이너란 쉽고 간단하게 설명하면 하나의 컴퓨터 환경 내에 독립적인 컴퓨터 환경을 구성해, 각각의 환경에 프로그램을 별도로 설치, 실행할 수 있게 만든 개념이라고 생각하면 쉽다.
조금 더 자세히 설명하면 애플리케이션을 언제든 실행 가능하도록 필요한 모든 요소(소스코드, 구성요소, 종속성 등) 하나의 런타임 환경으로 패키징한 논리적 공간이라고 할 수 있다.
- Image(이미지)란?
이미지란 컨테이너를 만들기 위한 설계도라고 할 수 있다.
이미지는 프로그램을 실행하는 데 필요한 설치 과정, 설정, 버전정보 등 프로그램을 실행하는 데 필요한 모든 것을 포함하고 있다. 따라서 동일한 이미지를 사용하면 어디서나 동일한 환경에서 애플리케이션을 실행할 수 있다.
예를 들어 postgreSQL 서버를 이미지로 만들었다면 이 이미지를 실행시키는 순간 postgreSQL이 컨테이너 환경에서 실행된다. postgreSQL을 따로 설치할 필요없이 DB를 사용할 수 있게 되는 것이다.
- 도커를 사용하는 이유?
도커는 여러가지 장점이 있지만 역시 가장 큰 장점은 이식성이다. 이식성이란 특정 프로그램을 다른 곳으로 옮겨서 쉽게 설치 및 실행할 수 있는 특성을 말한다.
도커를 이용하면 매번 귀찮은 설치 과정을 거칠 필요도 없어지고 항상 일관되게 프로그램을 설치할 수 있다. 또한 각각의 프로그램들이 독립적인 환경에서 실행되기 때문에 프로그램 간의 충돌이 일어나지도 않는다.
2. Docker CLI 명령어
Docker를 학습할 때 CLI 명령어를 직접 입력하고 실습하면서 익히니 금방 이해가 되고 적응할 수 있었다. 여기에 간단하게 명령어들을 정리해보았다.
Docker 이미지 다운로드
먼저 DockerHub에 대해서 알아야한다. Docker 이미지를 저장하고 공유할 수 있는 클라우드 기반의 서비스로, GitHub과 유사하다. DockerHub에는 인기 있는 소프트웨어나 서비스들의 공식 이미지가 제공되어 이를 다운받아서 사용할 수 있다. (ubuntu, nginx, postgreSQL 등) 페이지에 사용법이 자세히 나와있으니 사용할 때 읽어보는 것이 좋다.
# docker pull 이미지명(:태그명)
$ docker pull redis:7.4-alpine
docker pull 명령어를 이용하면 이미지명과 태그명에 맞는 이미지를 다운받을 수 있다. 태그명을 생략하면 latest 가장 최신 버전을 다운 받는다.
Docker 이미지 조회 및 삭제
아래 명령어를 이용하면 모든 이미지를 조회할 수 있다.
# 모든 이미지 조회
$ docker images
# 모든 이미지 조회 (같은 기능이지만 최신 버전에서 권장)
$ docker image ls
아래와 같이 이미지명, 태그명, 이미지 ID, 이미지 생성 날짜, 이미지 크기 등을 확인할 수 있다.
특정 이미지를 삭제하려면 아래와 같이 이미지를 삭제할 수 있다.
# 특정 이미지 삭제
$ docker image rm (이미지 ID or 이미지명)
이때 이미지 ID의 경우 긴 이미지 ID를 모두 입력할 필요는 없다. 이미지 앞부분 최소 3자 이상을 입력해야하고 그것만 가지고 식별이 가능해야한다.
위 명령어를 이용해서 이미지 삭제를 시도했을 때 해당 이미지가 컨테이너에서 사용중이라면 삭제가 불가능하다.
# 컨테이너에서 사용하고 있는 이미지 강제 삭제
$ docker image rm -f (이미지 ID or 이미지명)
이렇게 -f 옵션을 이용해 컨테이너에서 사용하고 있는 이미지도 강제로 삭제할 수 있다.
모든 이미지를 삭제하려면 아래 명령어를 이용할 수 있다.
# 사용중이지 않은 이미지 모두 삭제
$ docker image rm $(docker images -q)
위 명령어는 모든 이미지를 삭제하려고 시도하지만 역시나 컨테이너에서 사용하고 있는 이미지는 삭제 되지 않는다.
컨테이너에서 사용하고 있는 이미지를 포함하여 모든 이미지를 삭제하려면 아래 명령어를 이용하면 된다.
# 사용중인 이미지 포함 모두 삭제
$ docker image rm -f $(docker images -q)
현재 사용되지 않는 모든 이미지를 삭제하려고 할 때 위의 명령어 말고 아래의 명령어를 이용할 수도 있다.
# 사용중이지 않은 이미지 모두 삭제
$ docker image prune -a
위 명령어는 Dangling 이미지와 사용되지 않는 이미지를 모두 삭제한다.
Dangling 이미지란 태그가 없는 이미지를 말한다. 빌드 과정에서 생성되는 중간 이미지인 경우 또는 다른 이미지에 의해 이름을 빼앗겨 태그가 없게된 이미지들이 그 예시이다.
위의 명령어를 사용해도 컨테이너에서 사용되지 않는 이미지를 모두 삭제할 수 있다.
'Docker' 카테고리의 다른 글
Docker Compose 개념 및 정리 (0) | 2024.12.02 |
---|---|
DockerFile 작성법 (0) | 2024.11.29 |
Docker Volume 개념 및 활용 (0) | 2024.11.28 |
Docker 기본 개념 및 CLI 명령어 (3) (0) | 2024.11.27 |
Docker 기본 개념 및 CLI 명령어 (2) (0) | 2024.11.26 |