Skip to content

Docker and Git action 정리

Jack edited this page Feb 7, 2022 · 3 revisions

docker 란

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

  • 가상호스트는 도커상태에서도 제공됩니다.
  • 기본적으로 설치시 host.docker.internal host 를 자동지정하기도 합니다.
  • 이는 docker-dompose 등에서도 제공되며, docker 와 os host 간의 통신을 위해서 활용됩니다.

Docker vs Virtual Machine

  • 가상 호스트는 웹서버를 활용하여 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 에서 기준을 관리 하고 입니다.

docker 명령어

자세한 내용은 여기에 있습니다 (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 : 현재 실행중인 컨테이너 보기

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"]

git action 문법

자세한 내용은 여기에 있습니다(https://docs.github.com/en/actions/learn-github-actions/essential-features-of-github-actions)

예제의 내용은 공유해주신 자료가 잘 설명되어 있어 자료 토대로 작성했습니다.

자료 : https://velog.io/@soosungp33/Golang-Docker-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EA%B0%80%EB%B3%8D%EA%B2%8C-%EB%A7%8C%EB%93%A4%EA%B8%B0

기본 예제

처음에 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