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 16:24] – alex | public:computer:docker [2021/08/08 21:00] (current) – [A.3 Cloud Console 사용법] alex | ||
|---|---|---|---|
| Line 1342: | Line 1342: | ||
| === 명령 실행(RUN 실행) === | === 명령 실행(RUN 실행) === | ||
| + | <alert type=" | ||
| + | |||
| + | - Shell 형식으로 기술; 쉘 경유. | ||
| + | - Exec 형식으로 기술; 쉘을 경유하지 않고 직접 실행 | ||
| + | |||
| + | |||
| + | <sxh> | ||
| + | # Shell 형식 | ||
| + | RUN apt-get install -y nginx | ||
| + | |||
| + | # Exec 형식 | ||
| + | RUN ["/ | ||
| + | </ | ||
| + | |||
| + | * RUN 명령을 여러 개 지정하면 명령 줄만큼의 레이어 생성 | ||
| + | * RUN 명령을 한 줄로 지정하면 하나의 레이어 생성; RUN 명령의 줄 바꿈은 \ | ||
| === 데몬 실행(CMD 명령) === | === 데몬 실행(CMD 명령) === | ||
| + | * RUN 명령은 이미지를 작성하기 위해 실행하는 명령을 기술, 이미지를 바탕으로 생성된 컨테이너 안에서 명령을 실행하려면 CMD | ||
| + | * Dockerfile에는 하나의 CMD 명령. 여러 개 지정시 마지막 명령만 유효 | ||
| + | |||
| + | <alert type=" | ||
| + | |||
| + | - Exec 형식으로 기술 | ||
| + | - Shell 형식으로 기술 | ||
| + | - ENTRYPOINT 명령의 인수로 CMD 명령 사용 | ||
| + | |||
| + | * 패키지 관리 시스템 | ||
| + | * YUM(Yellowdog Updater Modified); CentOS, Fedora, Red Hat 계열 -> DNF(Dandified Yum) | ||
| + | * APT(Advanced Packaging Tool); Debian, Ubuntu, Debian 계열 | ||
| === 데몬 실행(ENTRYPOINT 명령) === | === 데몬 실행(ENTRYPOINT 명령) === | ||
| + | * ENTRYPOINT 명령에서 지정한 명령은 Dockerfile에서 빌드한 이미지로부터 Docker 컨테이너를 시작하기 때문에 docker container run 명령을 실행했을 때 실행 | ||
| + | |||
| + | <alert type=" | ||
| + | |||
| + | - Exec 형식으로 기술 | ||
| + | - Shell 형식으로 기술 | ||
| + | |||
| + | * ENTRYPOINT vs. CMD; | ||
| + | * CMD; 컨테이너 시작 시에 실행하고 싶은 명령을 정의해도 docker container run 명령 실행 시에 인수로 새로운 명령을 지정한 경우 이것을 우선 실행 | ||
| + | * ENTRYPOINT; 지정한 명령은 반드시 컨테이너에서 실행, 실행 시에 명령 인수를 지정하고 싶을 때는 CMD 명령과 조합하여 사용. | ||
| === 빌드 완료 후에 실행되는 명령(ONBUILD 명령) === | === 빌드 완료 후에 실행되는 명령(ONBUILD 명령) === | ||
| + | |||
| + | <alert type=" | ||
| === 시스템 콜 시그널의 설정(STOPSIGNAL 명령) === | === 시스템 콜 시그널의 설정(STOPSIGNAL 명령) === | ||
| + | <alert type=" | ||
| === 컨테이너의 헬스 체크 명령(HEALTHCHECK 명령) === | === 컨테이너의 헬스 체크 명령(HEALTHCHECK 명령) === | ||
| + | <alert type=" | ||
| + | |||
| + | ^ 지정할 수 있는 옵션 | ||
| + | ^ 옵션 | ||
| + | | --interval=n | ||
| + | | --timeout=n | ||
| + | | --retries=n | ||
| + | |||
| ==== 환경 및 네트워크 설정 ==== | ==== 환경 및 네트워크 설정 ==== | ||
| + | > Dockerfile 안에서 이용할 수 있는 환경변수나 컨테이너 안에서의 작업 디렉토리 지정 | ||
| === 환경변수 설정(ENV 명령) === | === 환경변수 설정(ENV 명령) === | ||
| + | <alert type=" | ||
| + | <alert type=" | ||
| === 작업 디렉토리 지정(WORKDIR 명령) === | === 작업 디렉토리 지정(WORKDIR 명령) === | ||
| + | <alert type=" | ||
| + | |||
| + | * RUN, CMD, ENTRYPOINT, COPY, ADD 명령에 대한 작업 디렉토리 지정 | ||
| === 사용자 지정(USER 명령) === | === 사용자 지정(USER 명령) === | ||
| + | * RUN, CMD, ENTRYPOINT 명령을 실행하기 위한 사용자 지정 | ||
| + | |||
| + | <alert type=" | ||
| + | |||
| === 라벨 지정(LABEL 명령) === | === 라벨 지정(LABEL 명령) === | ||
| + | * 이미지에 버전 정보나 작성자 정보, 코멘트 등과 같은 정보를 제공할 때 사용 | ||
| + | |||
| + | <alert type=" | ||
| + | |||
| === 포트 설정(EXPOSE 명령) === | === 포트 설정(EXPOSE 명령) === | ||
| + | * 컨테이너의 공개 포트 번호를 지정 | ||
| + | |||
| + | <alert type=" | ||
| === Dockerfile 내 변수의 설정(ARG 명령) === | === Dockerfile 내 변수의 설정(ARG 명령) === | ||
| + | * Dockerfile 안에서 사용할 변수를 정의할 때 사용 | ||
| + | |||
| + | <alert type=" | ||
| + | |||
| === 기본 쉘 설정(SHELL 명령) === | === 기본 쉘 설정(SHELL 명령) === | ||
| + | * 쉘 형식으로 명령을 실행할 때 기본 쉘 설정 | ||
| + | |||
| + | <alert type=" | ||
| ==== 파일 설정 ==== | ==== 파일 설정 ==== | ||
| === 파일 및 디렉토리 추가(ADD 명령) === | === 파일 및 디렉토리 추가(ADD 명령) === | ||
| + | * 이미지에 호스트 상의 파일이나 디렉토리를 추가할 때 사용 | ||
| + | |||
| + | <alert type=" | ||
| + | <alert type=" | ||
| + | |||
| + | * 빌드에 불필요한 파일 제외; .dockerignore 파일 작성 | ||
| + | |||
| === 파일 복사(COPY 명령) === | === 파일 복사(COPY 명령) === | ||
| + | * 이미지에 호스트 상의 파일이나 디렉토리를 복사할 때 사용 | ||
| + | |||
| + | <alert type=" | ||
| + | <alert type=" | ||
| + | |||
| + | * Dockerfile의 저장 위치; 빌드에 필요 없는 파일은 Dockerfile과 똑같은 디렉토리에 두지 않도록 주의 | ||
| === 볼룸 마운트(VOLUME 명령) === | === 볼룸 마운트(VOLUME 명령) === | ||
| + | * 이미지에 볼륨을 할당 | ||
| + | |||
| + | <alert type=" | ||
| Line 1385: | Line 1474: | ||
| ==== Docker 이미지의 자동 생성 및 공개 ==== | ==== Docker 이미지의 자동 생성 및 공개 ==== | ||
| - | === Automated Build의 흐름 | + | * Automated Build의 흐름; Docker Hub에는 버전 관리 툴인 GitHub 및 Bitbucket과 연결하여 Dockerfile로부터 Docker 이미지를 자동으로 생성하는 ' |
| - | + | | |
| - | === GitHub에 공개하기 | + | |
| - | + | | |
| - | === Docker Hub의 링크 설정 | + | |
| - | + | ||
| - | === Dockerfile의 빌드 | + | |
| - | + | ||
| - | === Docker 이미지 확인 | + | |
| ==== Docker Registry를 사용한 프라이빗 레지스트리 구축 ==== | ==== Docker Registry를 사용한 프라이빗 레지스트리 구축 ==== | ||
| - | === 로컬 환경에 Docker 레지스트리 구축하기 | + | - 로컬 환경에 Docker 레지스트리 구축하기; Docker Store에 공개되어 있는 공식 이미지 ' |
| - | + | | |
| - | === Docker 이미지 업로드 | + | |
| - | + | ||
| - | === Docker 이미지의 다운로드와 작동 확인 | + | |
| ==== 클라우드 서비스를 사용한 프라이빗 레지스트리 구축 ==== | ==== 클라우드 서비스를 사용한 프라이빗 레지스트리 구축 ==== | ||
| - | === Google Container Registry 준비하기 | + | * GCP(Google Cloud Platform)은 Docker 이미지를 프라이빗으로 관리할 수 있는 ' |
| - | + | - Google Container Registry 준비하기 | |
| - | === Docker 이미지의 업로드 | + | |
| - | + | | |
| - | === Docker 이미지의 다운로드와 작동 확인 | + | |
| Line 1417: | 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: | |
| - | === 서비스의 의존관계 | + | |
| - | + | ||
| - | === 컨테이너 환경변수 지정(environment/ | + | #데이터 볼륨 |
| - | + | volumes: | |
| - | === 컨테이너 정보 설정(container_name/labels) === | + | |
| + | </cli> | ||
| - | === 컨테이너 데이터 관리(volumes/ | + | - 이미지 지정(image) |
| + | - 이미지 빌드(build) === | ||
| + | - 컨테이너 안에서 작동하는 명령 지정(command/ | ||
| + | - 컨테이너 간 연결(links) === | ||
| + | - 컨테이너 간 통신(ports/ | ||
| + | - 서비스의 의존관계 정의(depends_on) === | ||
| + | - 컨테이너 환경변수 지정(environment/ | ||
| + | - 컨테이너 정보 설정(container_name/ | ||
| + | - 컨테이너 데이터 관리(volumes/ | ||
| ==== 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 1482: | 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 1521: | 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 1541: | Line 1880: | ||
| === Kubernetes의 구조 === | === Kubernetes의 구조 === | ||
| + | * 마스터(Master); | ||
| + | * 데이터 스토어(etcd) | ||
| + | * 노드(Node); | ||
| ==== GCP를 사용한 Docker 애플리케이션 개발 ==== | ==== GCP를 사용한 Docker 애플리케이션 개발 ==== | ||
| Line 1549: | 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 1574: | 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 1588: | Line 1956: | ||
| === Kubernetes의 리소스 작성/ | === Kubernetes의 리소스 작성/ | ||
| + | * 리소스 작성 | ||
| + | * 리소스 삭제 | ||
| + | * 리소스 변경 | ||
| === Kubernetes의 업그레이드/ | === Kubernetes의 업그레이드/ | ||
| Line 1678: | 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 사용법 ==== | ||