Overview
- Docker는 애플리케이션을 개발, 배송 및 실행하기 위한 개방형 플랫폼
- Docker를 사용하면 더 빠르게 코드를 제공하고, 더 빠르게 테스트하고, 더 빠르게 배송하므로
코드 작성과 코드 실행 사이의 주기를 단축할 수 있음
Hello World
- docker run 명령어를 통해 hello-world 컨테이너를 실행
docker 데몬은 hello-world 이미지를 검색하지만 로컬에서 이미지를 찾지 못하므로
Docker Hub이라는 공용 레지스트리에서 이미지를 가져와서 해당 이미지에서 컨테이너를 생성하고 컨테이너를 실행
- Docker Hub에서 가져온 컨테이너 이미지를 살펴보기
이미지 ID로 SHA256 해시 형식을 가지며 이 필드는 프로비저닝된 Docker 이미지를 지정함
- 다시 hello-word 컨테이너를 실행
두 번째로 hello-world를 실행할 때는 docker 데몬은 로컬 레지스트리에서 이미지를 찾고 컨테이너를 실행함
- 실행 중인 컨테이너를 확인
이전에 실행한 hello-word 컨테이너는 이미 종료되었으므로 실행 중인 컨테이너가 없음
- 실행이 완료된 컨테이너를 포함하여 확인
모든 컨테이너가 보이므로 hello-world가 보이게 되며
컨테이너를 식별하기 위해 Docker에서 생성한 UUID 및 실행에 대한 추가 메타데이터가 표시되게 됨
Build
- 노드 애플리케이션을 기반으로 하는 Docker 이미지를 빌드하기 위해 test 폴더를 만들고 위치 전환
- Dockerfile 생성
이 파일은 이미지를 빌드하는 방법을 Docker 데몬에 지시함
(1) 기본 상위 이미지를 지정
(2) 컨테이너의 작업(현재) 디렉토리를 설정
(3) 현재 디렉토리의 내용을 컨테이너에 추가
(4) 컨테이너의 포트를 노출하여 해당 포트에서 연결을 수락
(5) node 명령을 실행하여 애플리케이션을 시작
- 노드 애플리케이션 작성
포트 80에서 수신 대기하고 "Hello World"를 반환하는 간단한 HTTP 서비스
- 이미지를 빌드
-t와 name:tag구문으로 이미지에 이름을 지정하고 태그를 지정할 수 있어 이미지를 구별하는데 도움을 줌
예) -t node-app:0.1 : 이미지의 이름은 node-app, 태그는 0.1
- 빌드한 이미지 확인
node는 node-app 이미지의 기본 이미지이며, node-app을 먼저 제거해야 node를 지울 수 있으며
노드 이미지를 더 줄이는 버전인 node:slim이나 node:alpine이 존재
Run
- 빌드한 이미지를 기반으로 컨테이너를 실행
--name 플래그를 사용하면 원하는 컨테이너의 이름을 지정할 수 있고
포트 매핑이 없으면 localhost의 컨테이너에 연결할 수 없으므로
-p의 경우 호스트의 포트를 컨테이너의 포트에 매핑하도록 Docker에 지시
- 서버 테스트
초기 터미널이 실행되는 동안 다른 터미널을 열고 컨테이너가 실행되는지 확인
- 초기 터미널을 닫고 컨테이너를 중지하고 제거한 후, 두 번째 터미널에서 컨테이너를 백그라운드에서 시작하고 실행과 로그 확인
- 애플리케이션을 수정하고 저장
텍스트 편집기를 열어 "Hello World"를 "Welcome to Cloud"로 변경하고 새 이미지를 빌드하고 태그를 0.2로 지정
- 새 이미지 버전으로 새로운 컨테이너 실행 및 서버 테스트
호스트의 포트를 4000:80에서 8080:80으로 매핑하도록 설정하여 컨테이너를 실행한 후 서버 테스트
첫 번째 컨테이너 4000을 확인하면 여전히 "Hello World"이고, 방금 시작한 컨테이너 8080은 "Welcome to Cloud"
Debug
- 컨테이너의 로그 보기
- 실행 중인 컨테이너 내에서 대화형 Bash 세션 시작
-it 플래그를 사용하면 pseudo-tty를 할당하고 표준 입력을 열린 상태로 유지하여 컨테이너와 상호 작용 가능
- Docker insepect를 사용해 Docker에서 컨테이너의 메타데이터를 검사하기
반환된 JSON에서 특정 필드를 검사하는데 --format 사용
Publish
- 이미지를 Google Container Registry(gcr)에 푸시
gcr에서 호스팅하는 비공개 레지스트리에 이미지를 푸시하려면 이미지에 레지스트리 이름을 태그해야 함
(1) [hostname] : gcr.io
(2) [project-id] : 프로젝트 ID
(3) [image] : 이미지 이름
(4) [tag] : 선택한 문자열 태그
- 웹 브라우저에서 이미지 레지스트리를 방문하여 이미지가 gcr에 있는지 확인
- 이미지를 테스트하기
새 VM을 시작하고 해당 VM에 ssh를 실행할 수 있고 gcloud를 설치할 수 있며
단순하게 테스트하기 위해 모든 컨테이너와 이미지를 제거하고 새로운 환경에서 시뮬레이션을 진행하도록 함
'Cloud > GCP' 카테고리의 다른 글
[Cloud Skills Boost] Kubernetes를 통한 클라우드 조정 (0) | 2022.07.05 |
---|---|
[Cloud Skills Boost] Kubernetes Engine (0) | 2022.07.02 |
[Cloud Skills Boost] Database Engineer learning path - 목차 (0) | 2022.02.17 |
[Cloud Skills Boost] Manage PostgreSQL Databases on Cloud SQL ⑤ (0) | 2022.02.17 |
[Cloud Skills Boost] Manage PostgreSQL Databases on Cloud SQL ④ (0) | 2022.02.15 |