어플리케이션을 컨테이너 가상화 기반으로 운영한다.
Virtualization 가상화
물리적인 컴퓨터 리소스를 다른 시스템이나 어플리케이션에서 사용할 수 있도록 제공
- 플랫폼 가상화
- 리소스 가상화
하이퍼 바이저 - Virtual Machine Manager(VMM)
다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼
- Type 1 : Native or Bare-metal
- Type 2 : Hosted (일반적인 맥, 윈도우)

Container Virtualization
OS Virtualization
- Host OS 위에 Guest OS 전체를 가상화
- VMWare, VirtualBox
- 자유도가 높으나 시스템에 부하가 많고 느려짐

Container Virtualization
- Host OS 가 가진 리소스를 적게 사용하며 필요한 프로세스 실행 (중복적인 부분이 있다면 사용하지 않을 수 있다.)
- 최소한의 라이브러리와 도구만 포함
- Container의 생성속도 빠름

- Container Image : Container 실행에 필요한 설정값
- Container : Image 를 가지고 실체화

DockerFile
- Docker Image를 생성하기 위한 스크립트 파일
- 자체 DSL(Domain-Specific language) 언어 사용 -> 이미지 생성과정을 기술해뒀다고 볼 수 있다.

Docker Desktop

Docker 실행
docker info

docker image ls

docker container ls, docker ps

docker container ls -a, docker ps -a
종료된 컨테이너도 확인가능하다.

docker container rm [container_id]
컨테이너 삭제
컨테이너 실행
$ docker run [options] image[:tag|@digest] [command] [arg...]
create + start -> run 이라고 생각하면 된다. pull로 이미지를 다운받지 않아도 run을 사용하면 자동으로 이미지를 다운받는다.
예) docker run ubuntu:16.04
:tag는 버전 처럼 사용된다.

백그라운드 모드 : 데몬으로 실행될수 있다. -> 도커 창을 종료하더라도 실행되어 있다.
-it : 컨테이너가 실행된 다음에 부가적으로 컨테이너에 명령어를 전달하기 위해 사용
ubuntu 이미지 다운

ubuntu 실행

ubuntu 는 실행하면 바로 종료된다.
도커 파일 안에 프로세스를 지속적으로 사용하도록 하는 커맨드가 포함되어 있어야 하는데 ubuntu는 포함되어 있지 않다.
보통 ubuntu는 직접 사용된다기 보다는 base Image로써 사용되서 추가적인 어플리케이션이나 서비스와 함께 사용된다.
mysql 실행
docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql mysql:5.7
# -d : 실행될 때 백그라운드 모드로 실행된다.
# -P : 포트포워딩 (호스트 포트 : 컨테이너 포트)
# -e : 환경 변수(여기선 root 패스워드 지정하지 않는 옵션 부여. 원래는 부여해줘야 한다.)
# --name : 컨테이너 이름
# 마지막에 이미지 이름
docker exec -it mysql bash
# exec : 컨테이너에 추가적으로 커맨드를 전달하기 위해 사용 (실행)
# -it : 실행되고 있는 컨테이너에 키보드?? 로 커맨드를 전달하겠다.
# mysql : 이미지 이름
# bash : 사용할 커맨드 (여기선 bash 쉘)
Docker 파일을 이용해서 UserMicroservice의 이미지 생성

- java 베이스로 이미지 생성
- /tmp -> docker 엔진에 있는 가상의 디렉토리로 볼륨 설정
- copy 호스트파일 컨테이너파일로 복사 (호스트 파일은 이 도커파일과 같은 뎁스에 위치 해야한다.)
- ENTRYPOINT -> 실행 커맨드
# docker 파일을 이미지로 빌드
docker build -t cjswltjr159/user-service:1.0 .
# docker Hub 에 이미지 업로드
docker push cjswltjr159/user-service:1.0
# Hub 에서 이미지 가져옴
docker pull cjswltjr159/user-service:1.0
jar 파일 생성
❯ mvn clean compile package -DskipTests=true 로 jar 파일 생성

jar 파일 이름 변경 후 다시 생성
<groupId>com.example</groupId>
<artifactId>user-service</artifactId>
<version>1.0</version>
docker 파일 빌드해서 이미지 생성

docker 이미지 생성 확인

docker Hub 에 이미지 업로드


이미지 삭제 후 hub 에서 가져오기

지금은 도커 실행하면 필요한 db, rabbitmq 등 없어서 오류 발생
다음 시간에 전부 도커로 실행해본다.
'Spring > [인프런] Spring Cloud' 카테고리의 다른 글
어플리케이션 배포 - Docker Container (1) (0) | 2022.07.24 |
---|---|
Mircroservice 모니터링 (0) | 2022.07.08 |
장애 처리와 Microservice 분산 추적 (0) | 2022.07.05 |
데이터 동기화를 위한 Kafka 활용 2 (0) | 2022.07.04 |
데이터 동기화를 위한 Kafka 활용 1 (0) | 2022.06.30 |