Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Docker] 컨테이너를 생성하고 관리하는 도구인 도커(Docker)와 이미지 : 컨테이너 = 프로그램 : 프로세스 본문
Backend/Docker
[Docker] 컨테이너를 생성하고 관리하는 도구인 도커(Docker)와 이미지 : 컨테이너 = 프로그램 : 프로세스
Gaejirang-e 2023. 6. 27. 18:22
𐂂 '도커(Docker)'란 무엇일까?
'컨테이너'를 생성하고 관리하기 위한 '도구'다.
❓ 컨테이너란 무엇일까
애플리케이션 코드와 해당 코드를 실행하는데 필요한 종속성과 도구가 포함된
'표준화된 소프트웨어 유닛(small package)'이다.
🎯 목적:
동일한 코드와 동일한 종속성 및 도구가 있는
동일한 컨테이너는
동일한 버전을 사용하는 동일한 런타임에
항상 동일한 동작과 결과를 제공한다는 이점이 있다.
즉, 동일한 환경에서 동일한 애플리케이션을 실행할 수 있다.
⚠️ 컨테이너는 'stand alone(독립적)'으로 작동한다.
⚠️ 여기서 도커(Docker)는 컨테이너를 구축(생성하고 관리)하기 위한 도구일뿐이다.
❓ 컨테이너란 무엇일까
애플리케이션 코드와 해당 코드를 실행하는데 필요한 종속성과 도구가 포함된
'표준화된 소프트웨어 유닛(small package)'이다.
🎯 목적:
동일한 코드와 동일한 종속성 및 도구가 있는
동일한 컨테이너는
동일한 버전을 사용하는 동일한 런타임에
항상 동일한 동작과 결과를 제공한다는 이점이 있다.
즉, 동일한 환경에서 동일한 애플리케이션을 실행할 수 있다.
⚠️ 컨테이너는 'stand alone(독립적)'으로 작동한다.
⚠️ 여기서 도커(Docker)는 컨테이너를 구축(생성하고 관리)하기 위한 도구일뿐이다.
➼ 똑같은 개발환경을 갖는 것은 상당한 가치가 있다.
로컬 환경, 개발 환경에만
애플리케이션이 동작하는데 필요한 버전(version)의 프로그램이 설치되어있다면,
이 애플리케이션을 호스트되어야하는 서버의 일부 원격시스템에 배포할 경우,
해당 원격시스템에는 해당 버전의 프로그램이 없어
더 이상 동작하지 않을 수 있다.
하지만, 특정 버전의 실행환경을 도커 컨테이너에 고정한다면
애플리케이션이 항상 정확한 버전에서 실행될 수 있도록 한다.
즉, 항상 같은 환경을 사용한다는 '🧩 재현성'을 구현할 수 있다.
(관리하고 설치해야하는 더 복잡한 종속성이 있는 경우 더 가치가 있다)
컨테이너를 만듦으로써 애플리케이션 코드와,
코드가 필요로하는 모든것을 포함하는 환경을 가져
어디서나 동작하는 애플리케이션을 구현할 수 있다.
⚠️ 프로젝트가 여러개인 경우, 프로젝트를 전환할 때마다 버전에 맞는 환경을 구성하는데 용이하다.
⚠️ 애플리케이션에 종속된 실행환경이 호스트 컴퓨터가 아닌 각각의 컨테이너에 구현되어 있게 한다.
⚠️ 캡슐화된 가상 운영체제를 지닌 버츄얼 머신(virtual machine)으로도 문제를 해결할 수 있지만
버츄얼 머신에서 발생하는 오버헤드(메모리, CPU, 하드 드라이브 공간)는 크다.
하나의 애플리케이션 환경 구축을 위해 조그마한 컴퓨터 전체를 캡슐화하는 것은 성능 상에도 좋지 않다.
또한, 똑같은 방식으로 프로덕션(Production) 머신도 구성해야 한다.
🐋 도커 컨테이너는
하나의 머신에 가상의 머신을 여러개 설치하는 것이 아닌,
운영체제(os)의 내장 컨테이너가 작동하도록 처리한다.
그 위에 도커 엔진이라는 도구를 실행한다.
도커 엔진을 기반으로 각각의 도커 컨테이너를 가동할 수 있다.
도커는 구성파일을 사용하여, 컨테이너를 구성하고, 이를 공유하여 재구성할 수도 있다.
또한, 이미지에 빌드하여 그 이미지를 공유하여, 모든 사람이 동일한 컨테이너(실행환경)를 가질 수 있도록 할 수 있다.
즉, 구성파일과 이미지가 있기 때문에, 공유, 재구축 및 배포가 매우 쉬워진다.
(애플리케이션을 실행하는데 딱 필요한 것들만 캡슐화한다)
애플리케이션이 동작하는데 필요한 버전(version)의 프로그램이 설치되어있다면,
이 애플리케이션을 호스트되어야하는 서버의 일부 원격시스템에 배포할 경우,
해당 원격시스템에는 해당 버전의 프로그램이 없어
더 이상 동작하지 않을 수 있다.
하지만, 특정 버전의 실행환경을 도커 컨테이너에 고정한다면
애플리케이션이 항상 정확한 버전에서 실행될 수 있도록 한다.
즉, 항상 같은 환경을 사용한다는 '🧩 재현성'을 구현할 수 있다.
(관리하고 설치해야하는 더 복잡한 종속성이 있는 경우 더 가치가 있다)
컨테이너를 만듦으로써 애플리케이션 코드와,
코드가 필요로하는 모든것을 포함하는 환경을 가져
어디서나 동작하는 애플리케이션을 구현할 수 있다.
⚠️ 프로젝트가 여러개인 경우, 프로젝트를 전환할 때마다 버전에 맞는 환경을 구성하는데 용이하다.
⚠️ 애플리케이션에 종속된 실행환경이 호스트 컴퓨터가 아닌 각각의 컨테이너에 구현되어 있게 한다.
⚠️ 캡슐화된 가상 운영체제를 지닌 버츄얼 머신(virtual machine)으로도 문제를 해결할 수 있지만
버츄얼 머신에서 발생하는 오버헤드(메모리, CPU, 하드 드라이브 공간)는 크다.
하나의 애플리케이션 환경 구축을 위해 조그마한 컴퓨터 전체를 캡슐화하는 것은 성능 상에도 좋지 않다.
또한, 똑같은 방식으로 프로덕션(Production) 머신도 구성해야 한다.
🐋 도커 컨테이너는
하나의 머신에 가상의 머신을 여러개 설치하는 것이 아닌,
운영체제(os)의 내장 컨테이너가 작동하도록 처리한다.
그 위에 도커 엔진이라는 도구를 실행한다.
도커 엔진을 기반으로 각각의 도커 컨테이너를 가동할 수 있다.
도커는 구성파일을 사용하여, 컨테이너를 구성하고, 이를 공유하여 재구성할 수도 있다.
또한, 이미지에 빌드하여 그 이미지를 공유하여, 모든 사람이 동일한 컨테이너(실행환경)를 가질 수 있도록 할 수 있다.
즉, 구성파일과 이미지가 있기 때문에, 공유, 재구축 및 배포가 매우 쉬워진다.
(애플리케이션을 실행하는데 딱 필요한 것들만 캡슐화한다)
𐁍 이미지(Image)와 컨테이너
이미지는 컨테이너의 블루프린트로서 (템플릿코드와 애플리케이션을 포함),
모든 설정명령 및 도구와, 모든 코드가 포함된 공유가능한 패키지를 말한다.
즉, 이미지를 기반으로 컨테이너를 만들고 실행한다.
한번만 정의해놓으면, 다른 시스템과 다른 서버에서 여러번 실행할 수 있다. (똑같은 많은 컨테이너를 만들 수 있다)
컨테이너는 그러한 이미지의 구체적인 실행 인스턴스를 말한다.(실행 애플리케이션)
도커에서 이미지와, 이 이미지를 실행시킨 컨테이너는
프로그램과 프로그램을 실행시킨 프로세스 개념과 유사하다.
❓ 프로그램과 프로세스
: 프로그램(정적인 로직, in 디스크📀), 프로세스(실행중인 로직, in 메모리)
: 프로그램 한개를 설치하면 동시에 N개의 프로세스를 실행 가능하다.
모든 설정명령 및 도구와, 모든 코드가 포함된 공유가능한 패키지를 말한다.
즉, 이미지를 기반으로 컨테이너를 만들고 실행한다.
한번만 정의해놓으면, 다른 시스템과 다른 서버에서 여러번 실행할 수 있다. (똑같은 많은 컨테이너를 만들 수 있다)
컨테이너는 그러한 이미지의 구체적인 실행 인스턴스를 말한다.(실행 애플리케이션)
도커에서 이미지와, 이 이미지를 실행시킨 컨테이너는
프로그램과 프로그램을 실행시킨 프로세스 개념과 유사하다.
❓ 프로그램과 프로세스
: 프로그램(정적인 로직, in 디스크📀), 프로세스(실행중인 로직, in 메모리)
: 프로그램 한개를 설치하면 동시에 N개의 프로세스를 실행 가능하다.
'Backend > Docker' 카테고리의 다른 글
[Docker] 호스트 OS와 컨테이너 간 통신 (0) | 2023.06.28 |
---|---|
[Docker] 컨테이너 조회(ps)와 단발성/영속성 (0) | 2023.06.27 |
[CentOS9] 리눅스 사용자 생성 및 sudo 권한 부여 (0) | 2023.06.27 |
[CentOS9] SSH, PuTTY, SSHD와 호스트 전용 어댑터 (0) | 2023.06.27 |
[CentOS9] Oracle VM virtual box에 CentOS9 설치 (0) | 2023.06.22 |