-
Notifications
You must be signed in to change notification settings - Fork 0
Docker and Git action 정리
기존의 가상 호스트를 사용하는 것이 아닌 호스트를 사용하는 컨테이너 기반의 가상화 도구
- 가상호스트는 도커상태에서도 제공됩니다.
- 기본적으로 설치시
host.docker.internal
host 를 자동지정하기도 합니다.- 이는 docker-dompose 등에서도 제공되며, docker 와 os host 간의 통신을 위해서 활용됩니다.
- 가상 호스트는 웹서버를 활용하여
IP:Domain = 1:N
을 제공하는 방식입니다.- 도커는 VHost 가 아닌 Virtual Machine(이하
VM
) 와 비교되는 기술 입니다.- VM 의 특징은 다양한 OS 지원이지만, 이를 위해 Hypervisor(VM 기반) 위에 OS 를 위한 자원의 소비량과 처리량 부담 이 큽니다.
- 이에 서버로 주로 이용되는 Unix 의 기본구성인 Kernel 을 활용하여 경량화 하기로 합니다.
- Kernel 은 네트워크, 저장공간, 프로세스 등의 자원을 Namespace 등을 기반으로 관리하도록 지원합니다.
- Docker 는 이러한 Kernel 의 관리기능을 활용하며, 각 논리적인 밀폐공간을 형성 해줍니다. 우리는 이를
Container
라고 부릅니다.- Docker 의 장점은 별도 OS 를 위한 시스템의 부담이 없다는 것입니다. 더욱이 밀폐공간을 Kernel 의 기본 기술로 제공하기에 안정성 이 좋습니다.
- 추가적으로 Docker 는 위와 같은 Container 기술 중 가장 보편화된 프로젝트의 이름 입니다.
- Cotainer 기술규격은 보통 Open Container Initiative (이하
OCI
) 란 명칭으로 Cloud Foundation 에서 기준을 관리 하고 입니다.
자세한 내용은 여기에 있습니다 (https://docs.docker.com/engine/reference/run/)
기본 docker 명령어
docker pull : docker hub에서 image 받아온다
docker run : image를 실행시킨다. image는 container로 실행된다.
- option : continer이름 --name= <사용자 이름>, 포트 지정-p :container:port, 데몬 옵션 -d, 볼륨설정 -v :
docker exec : 컨테이너에게 특정 명령어 수행 시킨다
- docker exec <컨테이너> <특정 명령어> ex) docker exec -it <컨테이너> /bin/sh
docker ps : 현재 실행중인 컨테이너 보기
자세한 내용은 여기에 있습니다(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"]
자세한 내용은 여기에 있습니다(https://docs.github.com/en/actions/learn-github-actions/essential-features-of-github-actions)
예제의 내용은 공유해주신 자료가 잘 설명되어 있어 자료 토대로 작성했습니다.
기본 예제
처음에 git action을 만들때 workflow를 검색하는 창이 있어서 쉽게 구축할 수 있습니다.
또한 workflow를 만들고 나서도 market place에서 커스텀 git action을 사용할 수 있습니다
tag가 v.x.x 에 매칭되는 tag 이벤트 발생시, 빌드 후에 docker hub에 이미지를 개시하는 예제 입니다
{{ }} 문법은 workflow 의 context 정보를 알기 위한 문법입니다.
context 정보는 여기서 확인할 수 있습니다 https://docs.github.com/en/actions/learn-github-actions/contexts
name: Java CI with Maven
# v 형
on:
push:
tags:
- 'v.*.*'
pull_request:
tags:
- 'v.*.*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: Login to DockerHub
uses: docker/[email protected]
with:
username: ${{secrets.DOCKERHUB_USERNAME}}
password: ${{secrets.DOCKERHUB_TOKEN}}
- name: build and release to DockerHub
env:
NAME: tjwjdgks43
REPO: code-etc-authserver
TAG : ${{github.ref_name}}
run: |
docker build -t $REPO .
docker tag $REPO:latest $NAME/$REPO:$TAG
docker push $NAME/$REPO:$TAG