Skip to content

2JaeSung/Git-Docker-Practice

Repository files navigation

git 내용 정리

2 Git의 기초

2.1 Git 저장소 만들기

다음 두가지 방법으로 Git 저장소 사용 가능

  • 로컬 디렉토리 선택해서 적용 (적용할 디렉토리에서 git init)
  • clone 해서 사용 (git clone url)

2.2 수정하고 저장소에 저장하기

  • 파일 상태 확인 (git status)
  • 파일 새로 추적 (git add file)
  • 변경사항 커밋 (git commit)
  • 파일 삭제 (git rm file)
  • 파일 이름 변경 (git mv file)

2.3 커밋 히스토리 조회하기

  • 히스토리 조회하기 (git log) 시간 순으로 출력하고 각 커밋의 SHA-1 체크섬, 저자 이름, 저자 이메일, 커밋한 날짜, 커밋 메시지를 보여준다.
  • 다양한 옵션 존재 (ex -p, --stat 등등)

2.4 되돌리기

  • 완료한 커밋을 수정할때 (git commit --amend)
  • unstaged 상태로 만들기 (git reset)
  • 수정된 파일 되돌리기 (git checkout -- file)
  • 프로젝트 공유할때 (git push 리모트 저장소 이름, 브랜치 이름)

2.5 리모트 저장소

  • 현재 프로젝트에 등록된 리모트 저장소 확인 (git remote)
  • 리모트 저장소에서 데이터 가져오기 (git fetch remote)
  • 리모트 저장소 이름 바꾸기 (git remote rename)
  • 리모트 저장소 삭제하기 (git remote rm)

2.6 태그

  • 태그 조회하기, 생성하기
  • 태크 종류 (lightweight, annotated)

2.7 Git Alias

  • config 사용하여 각 명령의 alias 쉽게 만들 수 있다.

3 Git 브랜치

3.1 브랜치란 무엇인가

  • 브랜치란 커밋 사이를 가볍게 이동할 수 있는 포인터 같은 것
  • 처음 커밋하면 master 브랜치(기본)거 생성된 커밋을 가리킨다.
  • 새 브랜치 생성 (git branch name)
  • 브랜치 이동하기 (git checkout name)
  • git log로 정보 확인 가능

3.2 브랜치와 Merge의 기초

  • merge의 진행 방식은 다음과 같다.
  • 작업 진행 -> 새로운 이슈 처리할 새 branch 생성 -> 새 branch에서 작업 진행 -> 이전 브랜치에서 merge 진행

3.3 브랜치 관리

  • 브랜치 목록 확인 (git branch)
  • -v 사용하면 커밋 메시지 확인가능
  • -d 명령으로 삭제 가능

3.4 브랜치 워크플로

  • 배포한 코드는 master 브랜치에 두고 개발을 진행하거나 안정화하는 브랜치는 추가로 따로 브랜치를 만들어서 관리한다.
  • 테스트를 거쳐서 안정적이라 판단하면 해당 브랜치를 master 브랜치와 merge 하는 원리

3.5 리모트 브랜치

  • 리모트 트래킹 브랜치 일종의 북마크 같은 역할 (로컬에 있지만 임의로 움직일 수 없음)
  • 리모트 트래킹 브랜치의 이름은 remote/branch 형식
  • git fetch로 서버의 데이터 내려받을 수 있음
  • 리모트 트래킹 브랜치를 로컬 브랜치로 checkout하면 자동으로 트래킹 브랜치 만들어짐
  • git pull 명령은 fetch 명령 이후에 merge 명령을 실행하는 것일 뿐이다.

3.6 Rebase 하기

  • 변경된 사항을 patch로 만들고 이를 원래에 다시 적용시키는 방식
  • git checkout... -> git rebase... 식으로 실행
  • merge와는 달리 히스토리가 깔끔해진다. merge와 기능은 같다.
  • 주의) 공개 저장소에 push한 커밋을 rebase 하면 코드가 엉키게 된다.

6 GitHub

6.1 계정 만들고 설정하기

6.2 GitHub 프로젝트에 기여하기

  • 프로젝트 fork 하기 (프로젝트를 통째로 복사해준다)
  • pull request (push 한 변경 내용을 원래 저장소로 보내는 것) 1.Fork 한 개인 저장소를 로컬에 Clone 한다. 2.무슨 일인지 설명이 되는 이름의 토픽 브랜치를 만든다. 3.코드를 수정한다. 4.잘 고쳤는지 확인한다. 5.토픽 브랜치에 커밋한다. 6.GitHub의 개인 저장소에 토픽 브랜치를 Push 한다.
  • pull request는 토론을 통해 결정

6.3 GitHub 프로젝트 관리하기

6.4 Organization 관리하기

6.5 GitHub 스크립팅

  • 서비스 (설정하면 누군가 저장소에 push 할 때마다 이메일이 날라감, 다양한 이벤트 처리가능, 보통은 push 할 때 그 데이터를 가지고 한다.)
  • 훅 (서비스에 없는 사이트나 외부 서비스와 연동하고 싶을 때 사용, url로 http 페이로드를 보내줌)
  • API (API에 연결하면 이슈에 코멘트하고, pull request의 상태 변경 등 가능)

docker 내용 정리

1 시스템과 인프라 기초 지식

1.1 시스템 기반의 기초 지식

  • 시스템 기반의 구성 요소

    • 하드웨어
      • 시스템 기반을 구성하는 물리적인 요소
    • 네트워크
      • 원격지에서 액세스 할 수 있도록 서버들을 연결
    • OS (운영체제)
      • 하드웨어나 네트워크 장비를 제어하기 위한 기본 소프트웨어
    • 미들웨어
      • OS 상에서 서버가 특정 역할을 하기 위한 기능을 갖고 있는 소프트웨어
  • 클라우드와 온프레미스

    • 온프레미스
      • 자사에서 데이터센터를 보유하고 모든 과정을 수행하는 형태
    • 퍼블릭 클라우드
      • 인터넷을 통해 불특정 다수에게 제공되는 클라우드 서비스
    • 프라이빗 클라우드
      • 특정 그룹에게만 제공되는 클라우드 서비스
  • 시스템 기반의 구축/ 운용 흐름

    • 시스템화 계획 요구사항 정의 -> 인프라 설계 -> 인프라 구축 -> 운용

1.2 하드웨어와 네트워크 기초 지식

  • 서버 장비

    • CPU
      • 프로그램의 설계나 처리를 수행하는 전자회로 부품
    • 메모리
      • CPU가 직접 액세스 할 수 있는 기억장치
    • 스토리지
      • 데이터베이스에 기록하는 데이터 등과 같은 영구적인 데이터를 저장하는 디바이스
  • 네트워크 주소

    • MAC 주소 (물리 주소, 이더넷 주소, 16진수로 표기)
    • IP 주소 (네트워크 장비에 할당되는 식별 번호, 10진수 4개를 나열하여 나태냄)

1.3 리눅스(OS) 기초 지식

  • 리눅스 커널
    • 리눅스 커널은 하드웨어 제어에 관한 OS의 핵심이 되는 기능을 말하는 것
    • 주요 기능
      • 디바이스 관리
      • 프로세스 관리
      • 메모리 관리

1.4 미들웨어 기초 지식

  • 웹 서버
    • 클라이언트의 브라우저가 보내온 HTTP의 요청을 받아, 웹 콘텐츠를 응답으로 반환하거나 다른 서버사이드 프로그램을 호출하는 기능을 가지고 있는 서버
  • 데이터베이스 서버
    • 시스템이 생성하는 다양한 데이터를 관리하기 위한 미들웨어
  • 시스템 감시 툴
    • 시스템이 안정적으로 가동되는지 감시

1.5 인프라 구성 관리 기초 지식

  • 인프라 구성 관리

    • 인프라를 구성하는 하드웨어, 네트워크, OS, 미들웨어, 애플리케이션의 구성 정보를 관리하고 적절한 상태로 유지하는 작업
  • 대표적인 인프라 구성 관리 툴

    • KickStart, Vagrant, Chef, Puppet, Kubernetes 등
  • 지속적 인티그레이션

    • 애플리케이션의 코드를 추가 및 수정할 때마다 테스트를 실행하고 확실하게 작동하는 코드를 유지하는 방법
  • 지속적 딜리버리

    • 모든 기능을 한 번에 다 만드는 것이 아니라 기능을 추가할 때마다 애플리케이션을 제품 환경에 배포하는 방법

2 컨테이너 기술과 Docker의 개요

2.1 컨테이너 기술의 개요

  • 컨테이너
    • 호스트 OS상에 논리적인 구획을 만들고 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션 등을 하나로 모아 별도의 서버인 것처럼 활용

2.2 Docker의 개요

  • 애플리케이션의 실행에 필요한 환경을 하나의 이미지로 모음
  • 이미지를 사용하여 다양한 환경에서 애플리케이션 실행 환경을 구축 및 운용
  • 오픈 소스 플랫폼, 내부에서 컨테이너 기술을 사용
  • 도커는 인프라 환경을 컨테이너로 관리

2.3 Docker의 기능

  • 도커 이미지를 만드는 기능
    • 애플리케이션 실행에 필요한 파일들이 저장된 디렉토리
  • 도커 이미지를 공유하는 기능
    • 도커 레지스트리에서 공유가능(도커 허브)
  • 도커 컨테이너를 작동시키는 기능
    • 도커는 컨테이너 단위로 서버 기능을 작동(이미지 필요)
    • 도커는 컨테이너를 독립된 공간으로서 관리

2.4 Docker의 작동 구조

  • 컨테이너를 구획화하는 장치(namespace)

    • namespace : 한 덩어리의 데이터에 이름을 붙여 분할함으로써 충돌 가능성을 줄이고, 쉽게 참조할 수 있게 하는 개념
    • 리눅스 커널의 namespace 기능은 리눅스의 오브젝트에 이름을 붙여 총 6개의 독립된 환경 구축 가능
  • 릴리스 관리 장치

    • 도커는 리눅스 커널의 기능인 'control groups' 기능을 사용하여 자원의 할당 등을 관리
    • 컨테이너 안의 프로세스에 대해 그룹별로 제한을 둘 수 있다.
    • 프로세스를 그룹화하여 관리 가능
  • 네트워크 구성

    • 가상 브리지 / 가상 NIC 이용
  • 도커 이미지의 데이터 관리 장치

    • Copy on Write 방식으로 컨테이너의 이미지를 관리

3 Docker 설치와 튜토리얼

3.1 Docker 설치와 작동 확인

  • 도커 버전 롹인 (docker version)

    • 도커의 버전, Go 언어의 버전, OS, 아키텍처 확인 가능
  • 도커 실행환경, 디스크 이용 상황 확인 가능

3.2 웹 서버를 작동시켜 보자

  • nginx 예제 확인

4 Docker 명령

4.1 Docker 이미지 조작

  • 도커 허브

    • 도커의 공식 리포지토리 서비스 (이미지 배포나 다운로드 가능)
  • 이미지 다운로드 (docker image pull)

  • 이미지 목록 표시 (docker image ls)

  • 이미지 상세 정보 확인 (docker image inspect)

    • 이미지 ID, 작성일, 도커 버전, CPU 아키텍쳐 표시
  • 이미지 태그 설정 (docker image tag)

  • 이미지 검색 및 삭제 (docker search & dockeer image rm)

  • 이미지 업로드 (docker image push)

4.2 Docker 컨테이너 생성/시작/정지

  • 컨테이너 생성 및 시작 (docker container run 콘솔에 결과를 출력하는 옵션, 컨테이너명, 이미지명, 컨테이너에서 실행한 명령)
  • 컨테이너 백그라운드 실행 (docker container run 실행 옵션, 이미지명, 인수)
    • 컨테이너 로그를 통해서 실행되고 있는지 확인 가능 (restart를 통해 재시작 조건 설정 가능)
  • 컨테이너 네트워크 설정 (docker container run 네트워크 옵션, 이미지명, 인수)
  • 자원 지정하여 컨테이너 생성 및 실행(docker container run 자원 옵션, 이미지명, 인수)
    • CPU 시간의 상대 비율과 메모리 설정 등
  • 가동 컨테이너 목록 표시 (docker container ls 옵션)
  • 컨테이너 가동 확인 (docker container stats 컨테이너 식별자)
  • 컨테이너 시작 (docker container start 옵션, 컨테이너 식별자)
  • 컨테이너 정지 (docker container stop)
  • 컨테이너 재시작 (docker container restart)
  • 컨테이너 삭제 (docker container rm)
  • 컨테이너 중단/재개 (docker container pause/docker container unpause)

4.3 Docker 컨테이너 네트워크

  • 네트워크 목록 표시 (docker network ls)
    • 옵션으로 ID, 네트워크 타입 등의 정보 확인 가능
  • 네트워크 작성 (docker network create)
    • 지정할 수 있는 네트워크 드라이버는 'bridge' 또는 'overlay'
  • 네트워크 연결 (docker network connect/docker network disconnect)
  • 네트워크 상세 정보 확인 (docker network inspect)
  • 네트워크 삭제 (docker network rm)

4.4 가동 중인 Docker 컨테이너 조작

  • 가동 컨테이너 연결 (docker container attach)
  • 가동 컨테이너에서 프로세스 실행 (docker container exec)
  • 가동 컨테이너의 프로세스 확인 (docker container top)
  • 가동 컨테이너의 포트 전송 확인 (docker container port)
  • 컨테이너의 이름 변경 (docker container rename)
  • 컨테이너 안의 파일을 복사 (docker container cp 컨테이너 식별자 : 컨테이너 안의 파일 경로, 호스트의 디렉토리 경로)
  • 컨테이너 조작의 차분 확인 (docker container diff)

4.5 Docker 이미지 생성

  • 컨테이너로부터 이미지 작성 (docker container commit 옵션, 컨테이너 식별자, 이미지명)
  • 컨테이너를 tar 파일로 출력 (docker container export)
  • tar 파일로부터 이미지 작성 (docker image import 파일 또는 URL | - 이미지명)
  • 이미지 저장 (docker image save)
  • 이미지 읽어 들이기 (docker image load)
  • 불필요한 이미지/컨테이너를 일괄 삭제 (docker system prune)

5 Dockerfile을 사용한 코드에 의한 서버 구축

5.1 Dockerfile을 사용한 구성 관리

  • 도커파일은 인프라 구성을 기술한 파일이다.
    • 베이스가 될 도커 이미지
    • 도커 컨테이너 안에서 수행한 명령
    • 환경 변수 등의 설정
    • 도커 컨테이너 안에서 작동시켜둘 데몬 실행
  • from 명령(필수)를 통해 어떤 도커 이미지로부터 생성할지 작성

5.2 Dockerfile의 빌드와 이미지 레이어

  • 도커 파일로부터 도커 이미지 만들기 (docker build -t 생성할 이미지명 : 태그명, 도커파일의 위치)
  • 도커파일을 빌드하여 도커 이미지를 작성하면 도커의 명령별로 이미지를 작성하는데 작성된 여러 개의 이미지는 레이어 구조를 가짐
    • 작성한 이미지는 다른 이미지와 공유됨 (베이스 이미지의 레이어가 공유됨)

5.3 멀티스테이지 빌드를 사용한 애플리케이션 개발

  • 두 개의 부분으로 되어 있는 도커파일
    • 개발 환경용 도커 이미지
    • 제풀 환경용 도커 이미지
  • 도커 이미지의 빌드
  • 도커 컨테이너의 시작

5.4 명령 및 데몬 실행

  • 도커 이미지를 만들려면 필요한 미들웨어 설치 필요

  • 이미지 컨테이너를 생성했을 때 서버 프로세스 등을 데몬으로서 작동시켜야함

  • 명령 실행

      1. Shell 형식으로 기술
      1. Exec 형식으로 기술
  • 데몬 실행 (CMD 명령)

    • 생성된 컨테이너 안에서 명령을 실행하려면 CMD 명령을 사용해야함
    • 명령 실행과 기술 방법 동일
  • 데몬 실행 (ENTRYPOINT 명령)

    • docker container run 명령을 실행했을 때 실행됨
    • 명령 실행과 기술 방법 동일
  • 빌드 완료 후에 실행되는 명령 (ONBUILD 명령)

    • ONBUILD 명령을 통해 어떤 명령을 실행하도록 설정하여 빌드하고 이미지를 작성함
  • 시스템 콜 시그널의 설정

    • 컨테이너 종료할 때 송신하는 시그널 설정
  • 컨테이너의 헬스 체크 명령

    • 컨테이너 안의 프로세스가 정상적으로 작동되고 있는지 체크하고 싶을 때 사용

5.5 환경 및 네트워크 설정

  • 환경 변수 설정 (ENV 명령)
      1. key value 형으로 지정
      1. key=value로 지정
  • 작업 디렉토리 지정 (WORKDIR 명령)
    • 도커 파일에서 정의한 명령을 실행하기 위한 작업용 디렉토리를 지정할 때
    • RUN, CMD, ENTRYPOINT, COPY, ADD 명령일 때
  • 사용자 지정 (USER 명령)
    • 이미지 실행이나 도커파일의 RUN, CMD, ENTRYPOINT 명령을 실행하기 위한 사용자를 지정할 때 사용
  • 라벨 지정 (LABEL 명령)
    • 이미지에 버전 정보, 작성자 정보, 코멘트 등과 같은 정보 제공할 때 사용
  • 포트 설정 (EXPOSE 명령)
    • 컨테이너의 공개 포트 번호를 지정할 때
  • 도커 파일 내 변수의 설정 (ARG 명령)
    • 변수의 값에 따라 생성되는 이미지의 내용 바꿀수 있음
  • 기본 쉘 설정 (SHELL 명령)
    • 쉘 형식으로 명령을 실행할 때 사용

5.6 파일 설정

  • 파일 및 디렉토리 추가 (ADD 명령)
    • 도커 이미지 안으로 복사 (파일 제외 명령도 가능)
  • 파일 복사 (COPY 명령)
    • 이미지에 호스트상의 파일이나 디렉토리를 복사 할 때 사용
  • 볼륨 마운트 (VOLUME 명령)
    • 이미지에 볼륨 할당

6 Docker 이미지 공개

6.1 Docker 이미지의 자동 생성 및 공개

  • Automated Build 기능을 통해 도커파일을 바탕으로 도커 이미지를 자동으로 빌드할 수 있다.

6.2 Docker Registry를 사용한 프라이빗 레지스트리 구축

  • 도커 이미지를 관리하기 위한 레지스트리를 로컬 한경에 구축하기
    • 도커에 공개되어 있는 공식 이미지인 registry를 사용 -> 프라이빗 레지스트로 구축
  • 도커 이미지 업로드
    • 태그 설정 주의
    • push를 통해 업로드, 업로드 완료되면 로컬에 있는 건 rm을 통해 삭제
  • 도커 이미지 다운로드 (pull 사용), run을 통해 실행

6.3 클라우드 서비스를 사용한 프라이빗 레지스트리 구축

  • 이미지 중에서는 용량이 큰 것도 있기 때문에 온프레미스 환경에서 관리하긴 비용 부담이 큼
  • Google Cloud Platform은 도커 이미지를 프라이빗으러 관리할 수 있는 Google Container Registry 제공함
  • 구글 컨테이너 레지스트리 준비하기
    • API 사용 허가 필요
  • 구글 컨테이너 레지스트리에 이미지 업로드 하기
    • 규칙 지켜야함 (pg 211)
    • 나머지는 동일

7 여러 컨테이너의 운용 관리

7.1 여러 컨테이너 관리의 개요

  • 웹 시스템 실행 환경은 웹 서버, 프록시 서버 같은 여러 개의 서버를 연계해 작동시킴

  • 웹 3계층 시스템 아키텍쳐

    • 프론트 서버 (웹 브라우저랑 소통)
    • 애플리케이션 서버 (업무 처리)
    • 데이터베이스 서버 (영구 데이터 관리)
  • Docker Compose (여러 컨테이너를 모아서 관리하기 위한 툴)

    • docker-compose.yml라는 파일에 컨테이너의 구성 정보를 정의함으로써 컨테이너를 일괄적으로 관리
    • Compose 정의 파일은 웹 애플리케이션의 의존관계(데이터베이스, 큐, 캐시, 애플리케이션 등)을 모아서 설정 가능

7.2 웹 애플리케이션을 로컬에서 움직여 보자

  • docker-compose up을 통해 여러 도커 컨테이너 시작 가능
  • docker-compose stop으로 정지 가능

7.3 Docker Compose를 사용한 여러 컨테이너의 구성 관리

= docker compose 정의 파일 (버전 지정, 서비스 정의, 네트워크 정의, 데이터 볼륨 정의) 순으로 작성

  • 베이스 이미지 지정 (태크 지정 안하면 자동으로 최신 버전이 다운로드됨)
  • 이미지 빌드 (build) (도커 파일에 기술되어 있는 이미지를 빌드)
  • 컨테이너 안에서 작동하는 명령 지정 (command/entrypoint)
  • 컨테이너 간 연결 (links)
  • 컨테이너 간 통신 (ports/expose)
  • 서비스의 의존관계 정의 (depends_on)
  • 컨테이너 환경변수 지정 (environment/env_file)
  • 컨테이너 정보 설정 (container_name/labels)
  • 컨테이너 데이터 관리 (volumes/volumes_from)

7.4 Docker Compose를 사용한 여러 컨테이너의 운용

  • 여러 컨테이너 생성 (up)
  • 여러 컨테이너 확인 (ps/logs)
  • 컨테이너에서 명령 실행 (run)
  • 여러 컨테이너 시작/정지/재시작 (start/stop/restart)
  • 여러 컨테이너 일시 정지/재개(pause/unpause)
  • 서비스의 구성 확인 (port/config)
  • 여러 컨테이너 강제 정지/삭제 (kill/rm)
  • 여러 리소스의 일괄 삭제 (down)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •