카테고리 없음

docker와 git action 간단 정리

정한_s 2022. 2. 6. 23:27

서버 가상화 : 하나의 물리적 서버 호스트에서 여러 개의 서버 운영 체제를 게스트로 실행할 수 있는 소프트웨어 아키텍쳐

 

서버 가상화를 구현해주는 기술은 하이퍼바이저이다. 하이퍼바이저는 가상화 기술을 통해 여러개 운영체제를 하나의 호스트 os에 생성해서 사용할 수 있게 하는 소프트웨어

 

하이퍼바이저는 게스트 os들에게 자원을 나누며 조율하고, os들의 커널을 번역해 하드웨어에게 전달한다

 

가상화의 단점

가상화 작업은 하이퍼바이저를 반드시 거쳐야 한다, 또한 가상머신을 구현하기 위한 커널과 라이브러리를 포함하기 때문에 이미지가 커진다 

 

컨테이너 기반 가상화

프로세스 단위의 격리 환경을 만든다. 컨테이너 안에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일 만 존재한다. 

 

컨테이너는 이미지의 목적에 따라 생성되는 프로세스 단위의 격리 환경이다. 격리 환경을 제공함으로써 프로세스의 생명주기를 관리한다

 

컨테이너는 파일 시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간을 가진다

컨테이너가 실행되며, 프로세스가 실행되기에 필요한 자원들을 할당받고 프로세스를 실행한다. 이때 커널을 통해 필요한 자원들을 가져온다

 

컨테이너를 통해 host os와 격리함으로써 프로세스의 관리와 확장에 용이해진다 

컨터이너는 docker 엔진을 통해 괸리한다

 

일반적인 도커 명령어의 제어 단위는 컨테이너이다.

 

도커 엔진

  • 컨테이너 관리
  • 이미지 관리
  • 볼륨 관리
  • 네트워크 관리

dockerd(도커 데몬)은 컨테이너를 생성하고 실행하며 이미지를 관리하는 주체이다

 

*클러스터 

각기 다른 서버들을 하나로 묶어 하나의 시스템 같이 동작하게 하는 것

 

도커 스웜 - 스웜모드 지원

스웜 모드는 마이크로 서비스 아키텍처의 컨테이너를 다루기 위한 클러스터링 기능에 초점을 맞추고 있다

필요에 따라 유동적으로 컨테이너 수를 조절할 수 있다

컨테이너로의 연결을 분산하는 로드밸런싱 기능을 자체적으로 지원한다

스웜은 도커 엔진 자체에 내장되어 있음

 

워커 노드와 매니저 노드로 구성되어 있음

  • 워커 노드 : 실제 컨테이너가 생성되고 괸리되는 도커 서버
  • 매니저 노드 : 워커 노드 관리 + 워커 노드

도커 스웜에서 제어 단위는 서비스이다. 서비스는 같은 이미지에서 생성된 컨테이너의 집합

 

도커 컴포즈

여러개의 컨테이너를 하나의 서비스로 정의. 스웜 모드의 서비스와 유사하게 설정파일에 정의된 컨테이너의 수를 유동적으로 조절할 수 있다

도커 엔진 밖에 위치하고 있다. 도커 엔진 밖에 위치하기 때문에 도커에 내장되어 있지 않고 컴포즈를 직접 설치해야한다. 도커 컴포즈를 사용하기 위해서는 yml 파일으로 서비스 정의한다.

도커 컴포즈는 기본적으로 docker-compose.yml에 위치한 디렉터리 이름을 프로젝트 이름으로 사용한다

하나의 프로젝트는 여러개의 서비스로 이루어진다. 하나의 서비스에는 여러개 컨테이너가 존재할 수 있다.

 

 

docker 란

기존의 가상 호스트를 사용하는 것이 아닌 호스트를 사용하는 컨테이너 기반의 가상화 도구

 

docker 명령어 

자세한 내용은 여기에 있습니다 (https://docs.docker.com/engine/reference/run/)

 

기본 docker 명령어

 

docker pull : docker hub에서 image 받아온다

 

docker run : image를 실행시킨다. image는 container로 실행된다.

  • option : continer이름 --name=  <사용자 이름>, 포트 지정-p  <host-port>:<container:port>, 데몬 옵션 -d, 볼륨설정 -v <host-dir>:<container-dir>

docker exec : 컨테이너에게 특정 명령어 수행 시킨다  

  • docker exec <컨테이너> <특정 명령어>
  •  ex) docker exec -it <컨테이너> /bin/sh 

docker ps : 현재 실행중인 컨테이너 보기

 

DockerFile 문법

자세한 내용은 여기에 있습니다(https://docs.docker.com/engine/reference/builder/)

 

기본 DockerFile 명령어

FROM base 이미지 설정
WORKDIR 작업 디렉터리 설정
RUN 이미지 빌드 시 커맨드 실행
ENTRYPOINT 이미지 실행 시 항상 실행되야 하는 커맨드 설정
CMD 이미지 실행 시 디폴트 커맨드 또는 파라미터 설정 // 컨테이너 실행시 받은 인자로 대체될 수 있다
EXPOSE 컨테이너가 리스닝할 포트 및 프로토콜 설정
COPY/ADD 이미지의 파일 시스템으로 파일 또는 디렉터리 복사
ENV 환경 변수 설정
ARG 빌드 시 넘어올 수 있는 인자 설정

ex)

// base 이미지를 openjdk:11로 정한다
FROM openjdk:11
// ./target의 code-etc-auth-0.0.1-SNAPSHOT.jar를 /usr/src/myapp의 app.jar로 복사 
COPY /target/code-etc-auth-0.0.1-SNAPSHOT.jar /usr/src/myapp/app.jar
// 작업 디렉토리 설정 
WORKDIR /usr/src/myapp
// /usr/src/myapp 안에서 java -jar app.jar 명령어 실행
ENTRYPOINT ["java", "-jar","app.jar"]