Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
public:computer:docker [2021/08/08 17:14] – alex | public:computer:docker [2021/08/08 21:00] (current) – [A.3 Cloud Console 사용법] alex | ||
---|---|---|---|
Line 1499: | Line 1499: | ||
---- | ---- | ||
===== 여러 컨테이너의 운용 관리 ===== | ===== 여러 컨테이너의 운용 관리 ===== | ||
+ | > Docker에서 움직이는 웹 애플리케이션을 제품 환경에서 운용할 때는 애플리케이션 서버, 로그 서버, 프록시 서버 등과 같이 여러 개의 컨테이너들을 연계하여 작동 | ||
==== 여러 컨테이너 관리의 개요 ==== | ==== 여러 컨테이너 관리의 개요 ==== | ||
=== 웹 3계층 시스템 아키텍처 === | === 웹 3계층 시스템 아키텍처 === | ||
+ | * 프론트 서버; 웹 프론트 서버 혹은 웹 서버, Nginx, Microsoft의 IIS(Internet Information Services) 등. | ||
+ | * 애플리케이션 서버; 결제 처리, 수주 처리 등 애플리케이션의 처리를 실행하는 프로그램의 실행 환경 | ||
+ | * 데이터베이스(DB) 서버; | ||
+ | * RDBMS(Relational Database Management System) -> MySQL, PostgreSQL, Oracle Database 등. | ||
+ | * NoSQL -> KVS(Key-Value Store), 도큐먼트 지향 데이터 베이스(도큐먼트 데이터베이스) 등. | ||
+ | |||
=== 영구 데이터의 관리 === | === 영구 데이터의 관리 === | ||
+ | * 데이터의 백업 및 복원 | ||
+ | * 로그 수집 | ||
=== Docker Compose === | === Docker Compose === | ||
+ | * 여러 컨테이너를 모아서 관리하기 위한 툴 | ||
+ | * docker-compose.yml; | ||
==== 웹 애플리케이션을 로컬에서 움직여 보자 ==== | ==== 웹 애플리케이션을 로컬에서 움직여 보자 ==== | ||
- | === Compose 구성 파일의 작성 | + | - Compose 구성 파일의 작성; 소스 파일 확인 -> 구성 정의 |
+ | - 여러 Docker 컨테이너 시작; $ docker-compose up | ||
+ | - docker-compose ps | ||
+ | - 여러 Docker 컨테이너 정지; $ docker-compose stop | ||
+ | - docker-compose down; 리소스 삭제 | ||
- | === 여러 | + | ==== Docker Compose를 사용한 |
+ | > ' | ||
- | === 여러 Docker 컨테이너 정지 === | + | * YAML |
- | ==== Docker Compose를 사용한 여러 컨테이너의 구성 관리 ==== | ||
=== docker-compose.yml의 개요 === | === docker-compose.yml의 개요 === | ||
+ | * 버전 | ||
+ | <cli> | ||
+ | version: 3.3 | ||
+ | </ | ||
- | === 이미지 지정(image) === | + | ^ Compose |
+ | ^ Compose 정의 파일의 버전 | ||
+ | | 3.3 | 17.06.0 | ||
+ | | 3.2 | 17.04.0 | ||
+ | | 3.1 | 1.13.1 | ||
+ | | 3.0 | 1.13.0 | ||
+ | | 2.3 | 17.06.0 | ||
+ | | 2.2 | 1.130.0 | ||
+ | | 2.1 | 1.12.0 | ||
+ | | 2.0 | 1.10.0 | ||
+ | | 1.0 | 1.9.1 | | ||
- | === 이미지 빌드(build) === | + | <cli yml> |
+ | # 버전을 | ||
+ | version: " | ||
- | === 컨테이너 안에서 작동하는 명령 지정(command/ | + | # 서비스 |
+ | services: | ||
+ | webserver: | ||
+ | image: ubuntu | ||
+ | ports: | ||
+ | - " | ||
+ | networks: | ||
+ | - webnet | ||
- | === 컨테이너 간 연결(links) === | + | redis: |
+ | image: redis | ||
+ | networks: | ||
+ | - webnet | ||
- | === 컨테이너 간 통신(ports/ | + | # 네트워크 정의 |
- | + | networks: | |
- | === 서비스의 의존관계 | + | |
+ | |||
+ | #데이터 볼륨 | ||
+ | volumes: | ||
+ | data-volume: | ||
+ | </ | ||
- | === 컨테이너 환경변수 지정(environment/ | + | - 이미지 지정(image) |
- | + | - 이미지 빌드(build) === | |
- | === 컨테이너 정보 설정(container_name/ | + | - 컨테이너 안에서 작동하는 명령 지정(command/ |
- | + | - 컨테이너 간 연결(links) === | |
- | === 컨테이너 데이터 관리(volumes/ | + | - 컨테이너 간 통신(ports/ |
+ | - 서비스의 의존관계 정의(depends_on) === | ||
+ | - 컨테이너 환경변수 지정(environment/ | ||
+ | | ||
+ | | ||
==== Docker Compose를 사용한 여러 컨테이너의 운용 ==== | ==== Docker Compose를 사용한 여러 컨테이너의 운용 ==== | ||
=== Docker Compose의 버전 확인 === | === Docker Compose의 버전 확인 === | ||
+ | |||
+ | <cli prompt=" | ||
+ | $ docker-compose --version | ||
+ | </ | ||
=== Docker COmpose의 기본 명령 === | === Docker COmpose의 기본 명령 === | ||
+ | |||
+ | ^ Docker Compose의 주요 서브 명령 | ||
+ | ^ 서브 명령 | ||
+ | | up | 컨테이너 생성/ | ||
+ | | ps | 컨테이너 목록 표시 | ||
+ | | logs | 컨테이너 로그 출력 | ||
+ | | run | 컨테이너 실행 | ||
+ | | start | 컨테이너 시작 | ||
+ | | stop | 컨테이너 정지 | ||
+ | | restart | ||
+ | | pause | 컨테이너 일시 정지 | ||
+ | | unpause | ||
+ | | port | 공개 포트 번호 표시 | ||
+ | | config | ||
+ | | kill | 실행 중인 컨테이너 강제 정지 | ||
+ | | rm | 컨테이너 삭제 | ||
+ | | down | 리소스 삭제 | ||
+ | |||
+ | |||
+ | <cli prompt=" | ||
+ | $ docker-compose -f ./ | ||
+ | $ docker-compose stop webserver | ||
+ | </ | ||
+ | |||
=== 여러 컨테이너의 생성(up) === | === 여러 컨테이너의 생성(up) === | ||
+ | < | ||
+ | <col sm=" | ||
+ | <panel type=" | ||
+ | < | ||
+ | <alert type=" | ||
+ | |||
+ | ^ 지정할 수 있는 주요 옵션 | ||
+ | ^ 옵션 | ||
+ | | -d | 백그라운드에서 실행한다. | ||
+ | | --no-depos | ||
+ | | --build | ||
+ | | --no-build | ||
+ | | -t, --timeout | ||
+ | | --scale SERVICE=서비스 수 | 서비스 수를 지정한다. | ||
+ | |||
+ | </ | ||
+ | <alert type=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
=== 여러 컨테이너 확인(ps/ | === 여러 컨테이너 확인(ps/ | ||
+ | <cli prompt=" | ||
+ | $ docker-compose ps # 여러 컨테이너의 상태 확인 | ||
+ | $ docker-compose -q # 컨테이너 ID 확인 | ||
+ | $ docker-compose logs # docker 령령을 사용한 로그 확인 | ||
+ | </ | ||
=== 컨테이너에서 명령 실행(run) === | === 컨테이너에서 명령 실행(run) === | ||
+ | <cli prompt=" | ||
+ | $ docker-compose run server_a /bin/bash | ||
+ | </ | ||
=== 여러 컨테이너 시작/ | === 여러 컨테이너 시작/ | ||
+ | * 컨테이너 일관 시작/ | ||
+ | |||
+ | <cli prompt=" | ||
+ | $ docker-compose start | ||
+ | $ docker-compose stop | ||
+ | $ docker-compose restart | ||
+ | </ | ||
+ | |||
+ | * 특정 컨테이너 재시작 | ||
+ | |||
+ | <cli prompt=" | ||
+ | $ docker-compose restart server_a | ||
+ | </ | ||
=== 여러 컨테이너 일시 정시/ | === 여러 컨테이너 일시 정시/ | ||
+ | <cli prompt=" | ||
+ | $ docker-compose pause # 컨테이너 일시 정지 | ||
+ | $ docker-compose unpause | ||
+ | </ | ||
=== 서비스의 구성 확인(port/ | === 서비스의 구성 확인(port/ | ||
+ | |||
+ | <alert type=" | ||
+ | |||
+ | ^ 지정할 수 있는 주요 옵션 | ||
+ | ^ 옵션 | ||
+ | | --protocol=proto | ||
+ | | --index=index | ||
+ | |||
+ | <cli prompt=" | ||
+ | $ docker-compose port webserver 80 # 공개 포트 확인 | ||
+ | </ | ||
+ | |||
+ | <cli prompt=" | ||
+ | $ docker-compose config | ||
+ | </ | ||
+ | |||
=== 여러 컨테이너 강제 정지/ | === 여러 컨테이너 강제 정지/ | ||
+ | <cli prompt=" | ||
+ | $ docker-compose kill -s SIGINT | ||
+ | </ | ||
+ | |||
+ | <cli prompt=" | ||
+ | $ docker-compose rm # 여러 컨테이너 일괄 삭제 | ||
+ | </ | ||
+ | |||
+ | * Linux의 시그널; POSIX.1-1990 규격 | ||
+ | |||
+ | ^ Docker Compose의 주요 서브 명령 | ||
+ | ^ 시그널 | ||
+ | | SIGHUP | ||
+ | | SIGINT | ||
+ | | SIGQUIT | ||
+ | | SIGTERM | ||
+ | | SIGKILL | ||
+ | | SIGSTOP | ||
=== 여러 리소스의 일괄 삭제(down) === | === 여러 리소스의 일괄 삭제(down) === | ||
+ | |||
+ | <alert type=" | ||
+ | |||
+ | ^ 지정할 수 있는 주요 옵션 | ||
+ | ^ 옵션 | ||
+ | | --rmi all | 모든 이미지를 삭제 | ||
+ | | --rmi local | 커스텀 태그가 없는 이미지만 삭제 | ||
+ | | -v, --volumes | ||
+ | |||
+ | <cli prompt=" | ||
+ | $ docker-compose down --rmi all # 여러 이미지 삭제 | ||
+ | </ | ||
Line 1564: | Line 1732: | ||
---- | ---- | ||
===== 멀티호스트 환경에서 Docker 실행 환경 구축 ===== | ===== 멀티호스트 환경에서 Docker 실행 환경 구축 ===== | ||
- | |||
==== 멀티호스트 환경에서 컨테이너 관리의 개요 ==== | ==== 멀티호스트 환경에서 컨테이너 관리의 개요 ==== | ||
=== 멀티호스트 환경과 클러스터링 === | === 멀티호스트 환경과 클러스터링 === | ||
+ | * 클러스터링; | ||
+ | * 가용성(Availability); | ||
+ | * 확장성(Scalability); | ||
+ | |||
=== Docker Machine이란? | === Docker Machine이란? | ||
+ | * 호스트 머신/ | ||
+ | * https:// | ||
+ | |||
==== 웹 애플리케이션을 서비스 공개해 보자 ==== | ==== 웹 애플리케이션을 서비스 공개해 보자 ==== | ||
- | === Docker 실행 환경 작성 | + | - Docker 실행 환경 작성 |
- | + | | |
- | === 웹 애플리케이션 전개 | + | |
- | + | ||
- | === Docker 실행 환경 삭제 | + | |
==== Docker Machine을 사용한 실행 환경 구축 ==== | ==== Docker Machine을 사용한 실행 환경 구축 ==== | ||
=== Docker Machine의 기본 명령 === | === Docker Machine의 기본 명령 === | ||
+ | |||
+ | <cli prompt=" | ||
+ | $ docker-machine --version | ||
+ | </ | ||
+ | |||
+ | ^ Docker Machine의 서브 명령 | ||
+ | ^ 서브 명령 | ||
+ | | create | ||
+ | | ls | 실행 환경 목록 표시 | ||
+ | | status | ||
+ | | url | 실행 환경 URL 표시 | ||
+ | | ssh | 실행 환경에 대한 SSH 연결 | ||
+ | | start | 실행 환경 시작 | ||
+ | | stop | 실행 환경 정지 | ||
+ | | restart | ||
+ | | scp | 실행 환경에서 파일 다운로드 | ||
+ | | rm | 실행 환경 삭제 | ||
+ | | kill | 실행 환경 강제 정지 | ||
+ | | ip | 실행 환경 IP 주소 확인 | ||
+ | | inspect | ||
+ | |||
=== 실행 환경 작성(create) === | === 실행 환경 작성(create) === | ||
+ | <alert type=" | ||
+ | |||
+ | * Docker Machine에서 이용할 수 있는 드라이버 목록; https:// | ||
+ | |||
=== 실행 환경 목록 표시(ls/ | === 실행 환경 목록 표시(ls/ | ||
+ | <alert type=" | ||
+ | |||
+ | ^ 지정할 수 있는 주요 옵션 | ||
+ | ^ 옵션 | ||
+ | | --quite, -q | 머신명만 표시한다 | ||
+ | | --filter | ||
+ | |||
+ | <cli prompt=" | ||
+ | $ docker-machine status host1 # 실행 환경의 스테이터스 확인 | ||
+ | $ docker-machine url host1 # 실행 환경의 URL 확인 | ||
+ | </ | ||
=== 실행 환경에 대한 SSH 연결(ssh) === | === 실행 환경에 대한 SSH 연결(ssh) === | ||
+ | <alert type=" | ||
+ | |||
+ | <cli prompt=" | ||
+ | $ docker-machine ssh host1 | ||
+ | </ | ||
+ | |||
=== 실행 환경 시작/ | === 실행 환경 시작/ | ||
+ | <cli prompt=" | ||
+ | $ docker-machine start host1 # 실행 환경 시작 | ||
+ | $ docker-machine stop host1 # 실행 환경 정지 | ||
+ | $ docker-machine restart host1 # 실행 환경 재시작 | ||
+ | </ | ||
=== 실행 환경으로부터 파일 다운로드(scp) === | === 실행 환경으로부터 파일 다운로드(scp) === | ||
+ | <cli prompt=" | ||
+ | $ docker-machine scp host1:/ | ||
+ | </ | ||
+ | |||
+ | * SCP(Secure Copy Protocol); SSH의 기능을 사용하여 파일을 전송하기 위한 명령 Secure Copy Protocol로 인증 정보와 데이터를 암호화하여 네트워크로 전송 | ||
=== 실행 환경 삭제(rm/ | === 실행 환경 삭제(rm/ | ||
+ | <cli prompt=" | ||
+ | $ docker-machine rm -f host1 # 실행 환경 삭제 | ||
+ | $ docker-machine kill host1 # 실행 환경 강제 정지 | ||
+ | </ | ||
=== 실행 환경 정보 확인(ip/ | === 실행 환경 정보 확인(ip/ | ||
+ | <cli prompt=" | ||
+ | $ docker-machine ip host1 # IP 주소 확인 | ||
+ | </ | ||
+ | <alert type=" | ||
Line 1603: | Line 1835: | ||
---- | ---- | ||
===== 클라우드를 사용한 Docker 실행 환경 구축 ===== | ===== 클라우드를 사용한 Docker 실행 환경 구축 ===== | ||
+ | > GKE(Google Kubernetes Engine) | ||
==== 클라우드 환경에서 Docker 오케스트레이션하기 ==== | ==== 클라우드 환경에서 Docker 오케스트레이션하기 ==== | ||
=== 분산 환경에서의 컨테이너 운용 관리 === | === 분산 환경에서의 컨테이너 운용 관리 === | ||
+ | * Kubernetes | ||
+ | * Docker Enging(Swarm 모드) | ||
+ | * Apache Mesos, Marathon | ||
+ | |||
=== 퍼블릭 클라우드가 제공하는 매니지드 서비스 === | === 퍼블릭 클라우드가 제공하는 매니지드 서비스 === | ||
+ | * Amazon EC2 Container Service | ||
+ | * Azure Container Service(AKS) | ||
+ | * Google Kubernetes Engine(GKE) | ||
+ | |||
=== Google Cloud Platform의 컨테이너 관련 서비스 === | === Google Cloud Platform의 컨테이너 관련 서비스 === | ||
+ | * Google Container Builder | ||
+ | * Google Kubernetes Enging | ||
+ | * Google Container Registry | ||
+ | |||
==== Kubernetes의 개요 ==== | ==== Kubernetes의 개요 ==== | ||
+ | * 여러 서버들에서의 컨테이너 관리 | ||
+ | * 컨테이너 간 네트워크 관리 | ||
+ | * 컨테이너의 부하분산 | ||
+ | * 컨테이너의 감시 | ||
+ | * 무정지로 업데이트 | ||
=== Kubernetes의 서버 구성 === | === Kubernetes의 서버 구성 === | ||
+ | * 마스터 서버(Kubernetes Master) | ||
+ | * 백엔드 데이터베이서(etcd) | ||
+ | * 노드(Node) | ||
+ | |||
=== 애플리케이션 구성 관리(Pod, ReplicaSet, Deployment) === | === 애플리케이션 구성 관리(Pod, ReplicaSet, Deployment) === | ||
+ | * Pod(포드) | ||
+ | * ReplicaSet(리플리카 셋) | ||
+ | * Deployment(디플로이먼트, | ||
=== 네트워크 관리(Service) === | === 네트워크 관리(Service) === | ||
Line 1623: | Line 1880: | ||
=== Kubernetes의 구조 === | === Kubernetes의 구조 === | ||
+ | * 마스터(Master); | ||
+ | * 데이터 스토어(etcd) | ||
+ | * 노드(Node); | ||
==== GCP를 사용한 Docker 애플리케이션 개발 ==== | ==== GCP를 사용한 Docker 애플리케이션 개발 ==== | ||
Line 1631: | Line 1891: | ||
=== Docker 이미지 빌드(Cloud Container Builder) === | === Docker 이미지 빌드(Cloud Container Builder) === | ||
+ | * API 유효화하기 | ||
+ | * Google Kubernetes Engine API | ||
+ | * Google Container Registry API | ||
+ | * Google Cloud Build API | ||
+ | * Docker 이미지 빌드 파일; 빌드 스텝 -> 이미지 -> | ||
==== GCP를 사용한 Docker 애플리케이션 실행 환경 구축 ==== | ==== GCP를 사용한 Docker 애플리케이션 실행 환경 구축 ==== | ||
Line 1656: | Line 1921: | ||
=== 가용성 관리 === | === 가용성 관리 === | ||
+ | * 콜드 스탠바이 방식; 스탠바이 기기는 장애가 발생하면 액티브 기기와 교체 | ||
+ | * 핫 스탠바이 방식; 액티브 기기에서 장애가 발생하면 자동으로 스탠바이 기기로 교체 | ||
+ | * 헬스 체크 | ||
+ | * ICMP 감시(레이어 3); Ping 등의 응답을 확인 | ||
+ | * 포트 감시(레이어 4); 웹서비스의 경우는 80번 포트로부터 응답이 있는지 확인 | ||
+ | * 서비스 감시(레이어 7); HTTP 통신을 확인하는 경우 특정 페이지가 올바르게 표시되는지를 확인 | ||
+ | * 로드 밸런싱(load balancing) | ||
+ | |||
+ | |||
+ | * Disaster Recovery System | ||
+ | * RTO(Recovery Time Objective); 서비스를 복구할 때까지 필요한 경과 시간 | ||
+ | * RPO(Recovery Point Objective); 재해 등으로 시스템이 정지되었을 때 어떤 시점까지 거슬러 올라가서 데이터를 복구시킬지에 대한 지표 | ||
=== 수용성(Capacity) 관리 === | === 수용성(Capacity) 관리 === | ||
=== 시스템 감시 === | === 시스템 감시 === | ||
+ | * 머신의 활동 감시 | ||
+ | * 서비스의 가동 감시 | ||
+ | * 서버/ | ||
+ | * 잡 감시 | ||
+ | * 장애 대응 | ||
==== GKE를 사용한 Docker 실행 환경의 운용 ==== | ==== GKE를 사용한 Docker 실행 환경의 운용 ==== | ||
=== Kubernetes의 스테이터스 확인 === | === Kubernetes의 스테이터스 확인 === | ||
+ | * 클러스터의 상태 확인 | ||
+ | * 노드의 스테이터스 확인 | ||
+ | * Pod의 상태 확인 | ||
+ | * 서비스 확인 | ||
=== Kubernetes의 Pod 관리 === | === Kubernetes의 Pod 관리 === | ||
Line 1670: | Line 1956: | ||
=== Kubernetes의 리소스 작성/ | === Kubernetes의 리소스 작성/ | ||
+ | * 리소스 작성 | ||
+ | * 리소스 삭제 | ||
+ | * 리소스 변경 | ||
=== Kubernetes의 업그레이드/ | === Kubernetes의 업그레이드/ | ||
Line 1760: | Line 2049: | ||
===== Google Cloud Platform 사용법 ===== | ===== Google Cloud Platform 사용법 ===== | ||
==== A.1 계정 등록 ==== | ==== A.1 계정 등록 ==== | ||
+ | * Google 계정, 신용카드 또는 은행 계좌 | ||
+ | |||
+ | - 등록 시작 | ||
+ | - 계정 정보 등록 | ||
- | [1] 등록 시작 | ||
- | [2] 계정 정보 등록 | ||
==== A.2 프로젝트 작성과 삭제 ==== | ==== A.2 프로젝트 작성과 삭제 ==== | ||
- | [1] 프로젝트 작성 | + | - 프로젝트 작성 |
- | [2] 프로젝트명 설정 | + | |
- | [3] 프로젝트 삭제 | + | |
==== A.3 Cloud Console 사용법 ==== | ==== A.3 Cloud Console 사용법 ==== | ||
- | 툴과 서비스 | + | * 툴과 서비스 |
- | 대시보드 | + | |
==== A.4 Cloud Shell 사용법 ==== | ==== A.4 Cloud Shell 사용법 ==== | ||