최종수정일: 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로 가져와 합치는 작업을 의미한다.
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 해시 값을 계산해 검증
- 같다면, 올바른 클라이언트임이 인증
- SSH Key란
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