Docker란?
2013년 Docker사에서 Go 언어로 개발한 오픈소스 플랫폼으로 리눅스 컨테이너를 더 쉽게 관리하고 실행할 수 있다.
도커의 특징
- 서버를 코드 형태로 정의
도커는 이미지를 사용해 컨테이너를 실행
컨테이너는 하나의 애플리케이션을 실행하는 서버처럼 동작
이미지를 제작할 때 코드 형태로 정의하여 작성할 수 있다. - 이식성
애플리케이션 개발 단계
1. 개발단계
2. 테스트단계
3. 서비스단계
로 나눠져있는데 도커를 사용하면 컨테이너에 모든 환경을 구축하기 때문에 이식성이 좋다. - 상호운용성
다양한 벤더에서 지원하기 때문에다양한 벤더의 시스템 및 오픈소스와 연계하여 사용할 수 있다.
도커의 구조
- 이미지
도커로 리눅스 컨테이너를 생성하려면 미리 제작된 이미지가 있어야한다.
이미지는 여러개의 레어어로 이루어져 있으며, 각 레이어는 Read Only상태로 사용
이미지로 컨테이너를 실행하여 파일을 생성하거나 삭제한다면 새로운 레이어를 만들어 내용을 저장. - 저장소
컨테이너를 생성하려면 이미지가 있어야하고, 이미지는 호스트가 아닌 외부에 저장되어 공유할 수 있어야한다.
외부 = 저장소
범위에 따라 퍼블릭, 프라이빗 이미지 저장소로 나눌 수 있다.
이미지 저장소는 대표적으로 도커 허브가 있으며 도커 허브에는 퍼블릭, 프라이빗 둘 다 사용할 수 있다.
Habor와 도커 레지스트리같은 프라이빗 이미지 저장소를 만들어 별도로 운영할 수 있다,
퍼블릭 클라우드 서비스는 자체 이미지 저장소 서비스가 있다. - 컨테이너
이미지의 실행 형태.
이미지가 메모리에 올라가면 컨테이너고, 컨테이너가 디스크에 저장되어 있으면 이미지다.
하나의 컨테이너 당 하나의 애플리케이션만 실행되는 것을 권장
도커의 기능
- 이미지 생성
대표적 & 일반적으로 Dockerfile
docker commit : 컨테이너를 이미지로 생성
docker export, docker import : 컨테이너의 파일 시스템으로 이미지를 생성 - 이미지 공유
저장소를 사용해 이미지를 공유
도커 허브뿐만 아니라 다른 프라이빗 이미지 저장소도 사용할 수 있다. - 컨테이너 생성
도커 = 컨테이너 런타임 : 컨테이너를 생성하고 관리할 수 있다.
컨테이너를 생성하고 네트워크 또는 볼륨과 같은 도커 오브젝트를 생성한 뒤 컨테이너에 연결하여 사용할 수도 있다.
Docker Hub
도커 허브란?
도커의 기본 이미지 저장소
도커 허브의 기능
이미지 공유 [ 저장소 이름:태그 ]
오피셜 이미지의 저장소 이름은 단순히 [ 저장소의 이름 ] 으로 나타낸다.
그 외의 이미지들은 [ 허브의 ID / 저장소 이름 ] 으로 되어있다.
$ docker search
docker search 이미지명
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
NAME : 이미지의 저장소 이름
DESCRIPTION : 이미지에 대한 설명
STARS : 이미지에 대한 평가점수
OFFICIAL : 공식 이미지 여부
AUTOMATED : 자동화 빌드 여부
Docker Volume
컨테이너에 생성되는 모든 파일은 컨테이너 레이어에 저장된다. 저장된 데이터들은 컨테이너와 함게 삭제되는 런타임 데이터이다. 이 데이터를 영구적으로 저장하려면 반드시 볼륨을 사용해야한다.
도커에서 볼륨을 사용하는 방법으로 2가지가 있다.
1. Bind Mount
초기 도커부터 사용했던 방식.
호스트의 특정 디렉토리와 컨테이너의 디렉토리를 연결하는 방식
쉽게 사용할 수 있지만 도커에 의해 관리되지 않기 때문에 따로 기록하지 않으면 관리하기 쉽지않다.
성능이 뛰어나지만 호스트의 파일 시스템에 대한 의존도가 높다.
호스트의 민감한 파일가지 접근할 수 잇어 보안 측면인 문제가 발생할 수 있다.
사용 사례
- 호스트와 컨테이너가 /etc/resolv.comf와 같은 설정 파일을 공유할 때
- 호스트와 컨테이너가 개발환경 사이에서 소스코드나 빌드 아티팩트를 공유할 때
- 호스트의 파일 또는 디렉토리 구조가 컨테이너의 Bind Mount와 일치하도록 보장된 경우
2. Volume
도커에 의해 관리되는 스토리지.
docker 명령을 사용해 생성. 사용하지 않을경우 한번에 삭제 가능.
이미지의 볼륨부분에 어떤 값이 지정되어 있으면 컨테이너로 실행할 때 볼륨을 지정해야 임의의 이름으로 볼륨이 생성되지 않고 어떤 데이터가 어디에 저장되고 있어 관리가 수월하다.
볼륨은 다양한 드라이버를 지원한다
사용 사례
- 다수의 실행 중인 컨테이너 사이에 데이터를 공유할 때
- 컨테이너에서 호스트 구성을 분리할 때
- 컨테이너 데이터를 원격의 호스트 도는 클라우드 업체에 저장하고 싶을 때
- 다른 호스트로 데이터를 백업하거나 복원할 때
네트워크 유형
기본 네트워크 드라이버
- bridge
- host
- null
그 외 다른 방법
- overlay
- macvlan
- bridge
컨테이너가 사용하는 프라이빗 네트워크
같은 bridge dp dusrufehldj dlTdmaus zjsxpdlsjdml IP주소로 통신할 수 있다.
외부로 통신할 때 NAPT 통신 사용.
외부에서 bridge 로 통신하려면 포트포워딩을 사용해야 함. - host
호스트에서 컨테이너의 네트워크 격리를 해제하여 호스트의 네트워크 정보를 공유해 사용하는 방법.
컨테이너는 호스트 입장에서 하나의 프로세스이기 때문에 가상머신과 다르게 네트워크 정보를 공유할 수 있다.
컨테이너가 이 네트워크를 사용할 때 컨테이너의 포트가 호스트에서 사용하는 포트와 충돌해서는 안된다. - null (none)
null드라이버는 컨테이너의 네트워크 기능을 사용하지 않고 사용자 정의 네트워크 드라이버와 함께 사용한다. - overlay
서로 다른 도커 호스트를 연결하여 통신할 수 있도록 한다.
드라이버를 사용하면 서로다른 도커 호스트의 컨테이너가 서로 통신할 수 있다.
단일 호스트인 경우 사용하지않고 도커스웜(docker Swarm)과 같은 클러스터 서비스에 사용 - macvlan
MAC 주소를 컨테이너에 할당하여 도커 데몬이 트래픽을 컨테이너의 MAC주소로 라우팅할 수 있게 한다.
호스트의 네트워크를 통해 라우팅하는게 아니라 컨테이너가 실제 네트워크에 직접 연결해야 할 때 사용.
Dockerfile
도커는 Dockerfile을 사용해 이미지를 제작할 수 있다.
코드형태의 텍스트 문서로 여러 가지 지시어를 사용하여 이미지를 제작할 수 있다.
Dockerfile을 많이 사용하는 이유는 컨테이너가 실행하는 CMD또는 ENTRYPOINT는 commit 나 import로 지정하기 어렵다.
Docker Compose
일반적으로하나의 서비스를 제공하는 서버는 다수의 시스템들이 연결되어 있다.
이 다수의 시스템들을 다수의 컨테이너로 관리할 수 있게 사용된다.
서로 연결되어 있는 다수의 컨테이너를 하나로 통합하여 관리할 수 있는 도구로 GitHub에 공개되어 있다.
프라이빗 이미지 저장소
도커의 기본적인 이미지 저장소인 도커 허브는 퍼블릭 이미지 저장소로 사용해 기업이 자체적으로 이미지를 보관하려면 별도로 프라이빗 이미지 저장소를 구성.
기업이 사내에 구축하여 내부 또는 외부에서 사용할 수 잇도록 만든 이미지 저장소
도커 허브도 프라이빗 이미지 저장소를 구성할 수 있지만 하나의 리포지토리만 가능해 이미지 자체를 사내에서 보유하지 않아 부련하다면 사내 저장소를 구축하는 방법으로가장 적합하다.
퍼블릭 클라우드 업체들은 프라이빗 이미지 저장소를 서비스 형태로 제공
프라이빗 이미지 저장소 종류
- 도커 레지스트리
초기 도커는 레지스트리를 수동으로 구성했지만 요즘엔 이미지 형태로 제공되어 여러 가지 옵션을 함께 사용하여 컨테이너로 실행하면 프라이빗 이미지 저장소로 사용할 수 있다.
다른 서비스에 비해 기능이 적다 - Nexus
Maven Repository를 관라하기 위한 프로젝트
Nexus2 버전은 Maven Repository를 사설로 구축하여 공통 라이브러리 배포용도나 다른 Maven Repository의 캐시하여 빠르게 다운로드
Nexus3 버전은 npm프라이빗 저장소와 프라이빗 이미지 저장소까지 구축 가능 - JFrog Artifactory
도커 외에도 쿠버네티스 배포를 위한 Helm Chart저장소를 제공
빌드 환경과 통합해 안정적인 원격 프라이빗 이미지 저장소를 제공 - Portus
오픈소스 사용자 인증 기능과 LDAP 연동을 제공.
프라이빗 이미지 저장소로 간단한 htpasswd 사용자 인증 기능만 제공 - Harbor
RBAC기반으로 CNCF에서 관리하는 오픈 소스 컨테이너 이미지 레지스트리.
웹 인터페이스, 이미지 취약점 스캐닝, 멀티테넌트, 복제, 이미지 서명 등 기능을 제공.
다양한 서드파티 제품들과 호환되기 때문에 편리.
정온 Tistory
이 티스토리는 학생이 제작하고 있습니다
수정사항이 있다면 댓글이나 방명록에 남겨주세요
'CCCR ACADEMY 4기 > Docker' 카테고리의 다른 글
Jenkins설치 (0) | 2021.09.29 |
---|---|
IaC (0) | 2021.07.29 |
가상화 (0) | 2021.07.15 |