반응형

1. 개요

 도커 클라이언트, 도커 호스트, 도커 레지스트리의 개념을 이해하고, 도커 기본 명령어를 알아보자.

 


2. 도커 전체 구조

앞서 말한 3개 개념은 도커 전체 구조에 대한 개념이다. 도커는 클라이언트, 호스트, 레지스트리라는 기본 구조를 갖는다.

도커 상세 구조 (출처 : https://velog.io/@koo8624)

 

2.1. 도커 클라이언트

 도커에 명령을 내릴 수 있는 CLI 도구이다. 도커 이미지 다운로드, 컨테이너 실행, 중지, 조회 등 도커를 관리할 수 있는 다양한 명령어를 제공한다.

 

2.2. 도커 호스트

도커를 설치한 서버 혹은 가상 머신을 말한다. 현재 내 PC에 도커를 설치했다면, 도커 호스트는 내 PC이다.

 

2.3. 도커 레지스트리

 도커 이미지를 저장하거나 배포하는 시스템이다. 만약 이미지가 필요하다면 도커 레지스트리로부터 다운받게 된다. 대표적으로 DockerHub(http://hub.docker.com)가 있다. 도커 이미지계의 깃허브라 할 수 있다.

 

위 홈페이지에 들어간 후 검색창에 원하는 도커 이미지를 검색하고,

DockerHub

 

 

상세 정보를 통해 도커 이미지를 다운받을 수 있는 명령어(ex. docker pull redis)를 확인할 수 있다. 이 명령어를 도커 클라이언트를 통해 입력하면 도커 레지스트리를 통해 이미지를 다운받게 된다. 명령어는 도커 호스트에 위치한 도커 데몬이 처리하게 된다.

도커 이미지 다운 명령어 확인

 

 

 

* 도커 데몬

 도커와 관련된 리소스를 관리하는 백그라운드 프로세스이다. 이미지 다운로드 명령어가 입력될 경우 도커 호스트(도커가 설치된 서버)에  도커 이미지 존재 여부를 체크한 후, 이미지가 없을 경우 도커 레지스트리로부터 이미지를 다운받게 된다.

 

* 도커 이미지

 컨테이너 형태로 소프트웨어를 배포하기 위해 필요한 모든 요소(코드, 라이브러리, 설정 등)를 실행할 수 있는 빌드된 패키지이다. 도커 이미지는 독립적이기때문에 의존성을 고려할 필요가 없다.

 

* 도커 컨테이너

 도커 이미지를 실행할 수 있는 인스턴스를 말한다. 도커 컨테이너는 도커 이미지로부터 생성된다. 도커 컨테이너는 자체 파일 시스템을 갖으며 외부와 시스템 리소스를 공유하지 않고 독립적으로 실행된다. 단, OS는 공유한다!

 

3. 도커 기본 명령어

 

도커 이미지 다운로드

docker image pull {이미지 이름:태그 이름}

 

 

도커 이미지 목록 확인

 docker image ls

 

컬럼명 내용
REPOSITORY 이미지 이름
TAG 이미지 태그
IMAGE ID 이미지 ID (로컬 PC에서 할당해주는 ID)
CREATED 이미지 생성 시간
SIZE 이미지 크기

 

 

도커 컨테이너 실행

docker container run {이미지명}

 

 

실행중인 도커 컨테이너 리스트 조회

docker container ls

 

 

 

** 컨테이너를 실행했는데 컨테이너 리스트에서 조회가 되지 않아요

 

docker container run 명령어를 통해 컨테이너를 실행했을때, 해당 컨테이너 내에서 실행되는 프로세스나 서비스가 없을 경우, 컨테이너가 자동으로 종료되기 때문이다. 대표적으로 ubuntu 컨테이너가 이에 해당하며, 컨테이너 내에서 프로세스 실행을 유지시키기 위해 /bin/bash 와 같은 명령어를 함께 입력한다.

 

이에반에 Redis나 MySQL의 경우 컨테이너 실행 시 백그라운드 서비스가 돌아가기 때문에 자동으로 종료되지 않는다.

 

 

모든(정지 상태 포함) 도커 컨테이너 리스트

docker container ls -a

 

 

컨테이너 종료

docker container stop {컨테이너 ID}

 

 

컨테이너 강제 종료

docker container kill {컨테이너 ID}

 

 

컨테이너 삭제

docker container rm {컨테이너 ID}

 

 

이미지 삭제

docker image rm {이미지 ID}

 

반응형
반응형

개요

  도커를 이해하기 위해서 필요한 사전지식인 운영체제, 프로그램, 스레드, 네임스페이스의 개념을 알아보자. 

Docker

운영체제

 컴퓨터는 하드웨어와 소프트웨어로 구성된다. 좁은 의미에서 하드웨어는 기계, 소프트웨어는 프로그램들을 말하는데 소프트웨어에는 '운영체제'라 부르는 시스템 소프트웨어가 존재한다. 운영체제는 하드웨어와 소프트웨어 자원을 관리하고, 프로그램이 실행될 수 있는 환경을 제공하는 역할을 한다.

 

프로그램

 실행 가능한 명령어의 집합을 의미한다. 디스크에 저장되어 있으나, 메모리에는 올라가지 않은 정적인 상태로 존재한다. 컴퓨터에 설치된 게임, 파워포인트, 우리가 개발하여 jar로 빌드한 파일 모두 프로그램이다.

 

프로세스

 실행중인 프로그램을 의미한다. 프로그램이 실행되면 메모리에 올라간다. 즉, 프로세스는 메모리에 올라간 상태로 존재한다.

 

스레드

 프로세스 내에 실행되는 여러 흐름의 단위를 의미한다. 예를들어 워드 프로그램을 실행시킨다면, 하나의 스레드는 화면상에 글자를 보여주는 일을, 다른 스레드는 사용자의 키 입력에 대응하는 일을, 또 다른 스레드는 오탈자와 문법을 확인하는 일을 한다.

 

 

정리하면, 컴퓨터를 구성하는 소프트웨어 중 '프로그램을 실행할 수 있는 환경을 제공'하는게 운영체제이고, '프로그램을 실행하면 프로세스'가 되며, '프로세스 내부에서 여러 스레드들이 동작' 하며 기능들을 수행한다.

 


네임스페이스

 프로세스를 실행할 때 시스템 리소스를 분리해서 실행할 수 있도록 도와주는 기능을 의미한다. 예를들어 여러 프로세스를 실행했을때, 각각의 프로세스가 모든 파일 시스템에 접근할 수 있는게 아닌, 첫번째 프로세스는 A 디렉토리에만, 두번째 프로세스는 B 디렉토리에만 접근할 수 있도록 하면 어떨까? 각각의 프로세스 입장에서 보면 하나는 A 디렉토리, 다른 하나는 B 디렉토리만을 할당받은 체로 동작하게 된다. 즉, 네임 스페이스를 잘 활용하면 같은 운영체제 내에 실행되는 프로세스들이 논리적으로 분리된 환경에서 실행 될 수 있는 것이다.

 

개념적으로는 이해되나, 네임스페이스들이 어떻게 상호작용하는지는 따로 공부가 필요할 것 같다. 잘 알려진 네임스페이스는 다음과 같다.

네임 스페이스 의미 역할
pid PID: ProcessID 리눅스 커널의 프로세스 ID를 분리합니다.
net NET: Networking 네트워크 인터페이스를 관리합니다.
ipc IPC: Inter Process Communication 프로세스 간 통신(IPC) 접근을 관리합니다.
mnt MNT: Mount 파일 시스템의 마운트를 관리합니다.
uts UTS: Unix Timesharing System 커널과 버전 식별자를 관리합니다.

 


도커란?

 운영체제 수준의 가상화 방식을 통해 소프트웨어를 배포하는 가상환경을 제공하는 소프트웨어이다. 사용자 입장에서는 OS 까지의 가상 환경을 제공받아 어플리케이션만 관리/배포하면 되니 도커를 PaaS 제품이라고도 부른다.

출처 - https://www.redhat.com/

 

 운영체제 수준의 가상화 방식은 뭘까? 운영체제가 가상화 즉, '논리적으로 분리된 환경'을 제공하는 방식을 말한다. 운영체제가 논리적으로 분리된 환경을 제공할 수 있을까? 있다! 시스템 리소스들을 분리한 후 환경별로 다른 시스템 리소스들을 제공하면 된다. 네임스페이스들을 통해서 말이다. 

 

도커를 활용한 어플리케이션 실행

 

위와 같이 운영체제에서 네임 스페이스를 통해 시스템 리소스들을 분리한 후, 서로 다른 네임 스페이스를 도커가 띄운 프로세스에게 제공하는 것이다. 그럼 이 프로세스는 운영체제 위에서 다른 프로세스들과는 격리된 환경으로 구성된 하나의 '패키지' 역할을 하게 되는데, 바로 이를 컨테이너라 한다.

 

컨테이너란?

 컨테이너는 소프트웨어를 배포할 때 필요한 코드, 라이브러리, 환경 설정 파일들을 한데 모아 격리시킨 후, 실행 가능한 패키지로 만든 것을 의미한다. 

반응형

+ Recent posts