최종수정일: 16-Feb-23

❑ 기타

◼ Docker

Docker를 이용하면 아주 간단히 설치할 수 있다. 그러나 설치하는 ROS와 Gazebo의 버전의 선택이 제한된다.

Docker 개요

  • 컨테이너 기반의 오픈소스 가상화 플랫폼
    • 컨테이너 (Container) : 플랫폼에 상관없이 Application을 실행 가능하게 하는 기술
    • 가상머신과 차이점
      • 가상머신 : 하드웨어를 따로 떼어내 독립적 구성 또는 소프트웨어적으로 시스템 커널을 에뮬레이션. 최대단점으로 성능저하가 발생
      • 컨테이너 : 실행파일을 호스트에서 직접 실행하나 필요한 라이브러리를 격리독립. 최대장점으로 성능저하 없음. Git시스템을 기반으로하므로 버전관리 용의 Github와 같이 Docker Hub로 원격 저장소 이용 가능
  • 관련용어
    • Docker Image : 컨테이너의 기반이 되는 개발환경을 iso와 같이 이미지 형태로 패키징한 것
    • Docker container : Image를 기반으로 구동된 개발환경
    • Dockerfile : Image를 구성하는 요소들을 정의하는 설명서

Docker 실습예제

  • Docker 설치 (https://docs.docker.com/engine/install/ubuntu/)
    • 정리문서 : https://github.com/Ship-Noise-Vibration-Lab/tensorflow_docker
    • Dockerfile 작성 Dockerfile 이란 파일을 만들고 (touch Dockerfile) Nano 텍스트 편집기로 열어라 아래와 같이 입력
      # nano 텍스트 에디터 설치
      sudo apt update && sudo apt -y install nano
      # Dockerfile 이라는 빈 파일 만들기
      touch Dockerfile
      # nano로 Dockerfile 열기
      nano Dockerfile
      

      Dockerfile에 아래와 같이 입력(복사 후 마우스 오른쪽 클릭으로 붙여넣기)후 Ctrl+X로 닫기 (이때 Y를 눌러 저장후 닫기).

      # 우분트 22.04 를 베이스 이미지로 사용
      FROM ubuntu:22.04
      # nano 설치
      RUN apt update \
          && apt install -y nano \
          &&  rm -rf /tmp/*
      
    • Dockerfile Build and run

      # docker 백그라운드 실행
      sudo service docker start
      # Dockerfile을 이용해 imagename라는 이름의 이미지로 tagname이라는 태그를 붙여 빌드
      docker build -t imagename:tagname -f Dockerfile .
      # 빌드한 imagename:tagname의 가상환경 커맨드창 실행
      docker run --rm -it imagename:tagname bash
      
    • Docker image/container 확인 docker image ls -a, docker container ls -a

◼ Git/Github

Git

  • 공식사이트
  • Github 공식 Git 가이드
  • 소스코드 버전 관리 시스템
  • Git은 소프트웨어를 개발하는 기업의 핵심 자산인 소스코드를 효과적으로 관리할 수 있게 해주는 무료, 공개소프트웨어
  • 소스코드를 주고 받을 필요 없이, 같은 파일을 여러 명이 동시에 또는 비선형적으로 작업하는 병렬 개발이 가능
  • 관련용어 및 구분
    • Repository : 저장소를 의미하며, 저장소는 히스토리, 태그, 소스의 가지치기 혹은 branch에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 히스토리를 확인 할 수 있다.
    • Working Tree : 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점.
    • Staging Area : 저장소에 커밋하기 전에 커밋을 준비하는 위치.
    • Commit : 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업.
    • Head : 현재 작업중인 Branch를 가리킨다.
    • Branch : 가지 또는 분기점을 의미하며, 작업을 할때에 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶을때 Merge를 하여 작업을 한다.
    • Merge : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다.

GitProcess

Github

  • Git 은 버전 관리 시스템, Github는 버전관리 웹호스팅 서비스
  • Microsoft가 인수하고 오픈소스로의 전화 선언
  • Github 접속을 위해서는 SSH Key 등록 필요
    • SSH Key란
      • SSH 프로토콜 (비대칭 암호 원격 접속 프로토콜) 사용에 필요한 키 (신분증명)
      • Private Key (Client)와 Public Key (Server)로 이루어짐
        • 비대칭 알고리즘 : 공개키로 누구나 어떤 메시지를 암호화 가능하나, 그것을 해독하여 열람할 수 있는 사람은 개인키를 지닌 단 한 사람만이 존재한다는 점에서 비대칭
      • 생성방법 ssh-keygen -t ed25519 -C "*your_email@example.com*
      • SSH service등록방법 eval "$(ssh-agent -s)" && ssh-add ~/.ssh/id_ed25519
      • 원리
        • 클라이언트는 해당 서버에 접속하기 위해 사용할 키 페어의 ID를 서버에게 전송
        • 서버는 해당 ID의 공개키를 .ssh/authorized_keys 파일 안에서 검색
        • 존재한다면, 난수 값을 생성하고 해당 Public Key로 암호화해 클라이언트에게 전송
        • 클라이언트는 전달받은 암호화된 난수 값을 해당 서버의 개인키로 해독한다.
        • 이후 해독한 난수 값을 이용, MD5 해시 값 (Checksum) 을 계산해 서버에게 전송
          • MD5 Hash (임의의 길이의 값을 입력받아서 128비트 길이의 해시값을 출력하는 알고리즘이다. 1991년 설계, 단방향 암호화로 출력값에서 입력값 복원 불가)
            MD5("The quick brown fox jumps over the lazy dog") = 9e107d9d372bb6826bd81d3542a419d6
            MD5("The quick brown fox jumps over the lazy dog.") = e4d909c290d0fb1ca068ffaddf22cbd0
          
        • 서버도 원래의 난수 값을 이용, MD5 해시 값을 계산해 검증
        • 같다면, 올바른 클라이언트임이 인증

Git/Github 실습예제

# --- Local Git commands --- #
git init
git status
git add
git commit
git branch -b test
git checkout main
touch .gitignore && git add .gitignore
git log

# Use VSCode from here to visualize history and changes
git rebase main

# --- Make ssh key and connect with Github --- #
ssh-keygen -t ed25519 -C "your_email@example.com"
# Add key to ssh service
eval "$(ssh-agent -s)" && ssh-add ~/.ssh/id_ed25519
# Add key to github
# Connect with github
git remote add origin git@github.com:lainyzine/git-init.git
# Push to github
git push origin main

results matching ""

    No results matching ""