개발 환경 구축

 

Docker 개념

  • 왜 굳이 도커를 써야할까?
    • 어플리케이션을 환경에 구애받지 않고 실행할 수 있다
  • 도커 컨테이너와 가상머신의 다른점
    • 도커는 가상머신과 같이 하드웨어를 소프트웨어로 재구현하는 가상화가 아님
    • 리눅스 운영체제는 다양한 기능을 사용해 컨테이너(하나의 프로세스)를 실행하기 위한 별도의 환경(파일 시스템)을 준비하고, 리눅스 네임스페이스와 다양한 커널 기능을 조합해 프로세스를 일반적인 프로세스와 달리 독특하게 실행시킴.
    • 도커는 바로 프로세스를 격리시켜 실행해주는 도구

도커 개념 잡기

  • 도커 이미지 - 도커 컨테이너를 구성하는 파일 시스템과 실행할 어플리케이션 설정을 하나로 합친것으로, 컨테이너를 생성하는 템플릿 역할을 함. 여러개의 컨테이너 생성 가능
  • 도커 컨테이너 - 도커 이미지를 기반으로 생성되며, 파일 시스템과 애플리케이션이 구체화돼 실행되는 상태
docker images

~~~.go 파일을 통한 서버 애플리케이션 생성

Dockerfile을 통한 docker 로의 명령어 전달

포트포워딩 - ~~~.go 파일을 통해 8080 포트로 통신할 것을 명명함. 하지만 해당 애플리케이션은 도커 컨테이너 내에서 실행되는 애플리케이션으로, 컨테이너 안에있는 것들끼리만 8080포트로 통신이 가능. 내가 만약 호스트 머신에서 (즉, 외부에서) 도커 컨테이너 내부의 애플리케이션과 통신을 하고 싶다면 연결이 되어야 함. 그 역할을 담당하는 것이 포트포워딩

도커 이미지 다루기

도커 이미지 다시한번 - 우분투 같은 운영 체제로 구성된 파일 시스템은 물론, 컨테이너 위에서 실행하기 위한 애플리케이션이나 그 의존 라이브러리, 도구에 어떤 프로세스를 실행할지 등의 실행환경의 설정 정보까지 포함하는 아카이브다.

docker image build -t 이미지명[:태그명] Dockerfile의 경로
-t: 이미지명과 태그명 붙이기. [ ]의 의미는 생략도 가능하다는 것
반드시 Dockerfile이 필요함
docker run --rm -it "CONTAINER ID":"TAG" or "IMAGE ID" /bin/bash
	"CONTAINER ID":"TAG"는 docker ps 명령어를 통해 알 수 있다
	--rm: 프로세스가 종료되면 컨테이너가 자동으로 삭제되게 하겠다
	-it: 키보드 입력을 위함
docker rmi "IMAGE ID"

VS code와 docker 연동

Docker desktop 설치

  • docker desktop app 설치
  • 설정에서 도커 기반 엔진 사용하도록 설정

  • 작동 확인

      docker run hello-world
    

vscode 익스텐션 설치

  • Remote-WSL 설치
    • vscode wsl 에서 실행되는 linux 프로젝트를 열 수 있음 (경로 문제, 이진 호환성 문제등 해결)
  • Remote-containers 설치
    • 컨테이너 내에서 vscode 기능 사용 가능
  • Docker 설치
    • vscode 내에서 컨테이너화된 앱 빌드, 관리 및 배포하는 기능 추가

nvidia toolkit 설정

  • 도커 컨테이너에서 GPU를 정상적으로 사용하기 위함

      distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
      curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
      curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
        
      sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
      sudo systemctl restart docker
    

설치한 것 들 활용하기

GUI(Docker Desktop App 사용)

GPU를 Docker에서 구동하고 싶은 경우에는 CLI를 통해 진행하자

Windows에 설치한 Docker Desktop App에서 도커 이미지를 실행시켜 컨테이너화 진행

ubuntu      # vscode 터미널에서 명령어 실행

vscode extension을 통해 작동되는 것 확인

CLI(커맨드 입력창 활용)

# ros(melodic) 관련 이미지 받아옴
docker pull ros:melodic-ros-core-bionic

# 받아온 ros 이미지를 통해 컨테이너 생성
docker run ros:melodic-ros-core-bionic

# terminal 환경에서
docker run -it --gpus all --name "원하는name" "이미지id":"tag" /bin/bash

<CTRL + SHIFT + P> 로 vscode 상단에 command 창 열기
remote-containers:attach 입력 후 vscode로 열기를 원하는 실행중인 컨테이너 클릭 (혹은 extension에서 마우스 우클릭으로 attach 클릭해도 됌)

## 새롭게 열린 docker 컨테이너의 vscode 창에서 터미널을 열고
# sudo install
apt-get install sudo

# git install
sudo apt-get install git
sudo apt install git

# version check
git --version

도커 컨테이너 저장(Docker hub)

  • 현재까지 작업해 놓은 컨테이너를 Docker hub에 저장하기

      # 현재의 컨테이너 상태를 이미지로 만들기
      docker commit "CONTAINER ID" "원하는 IMAGE ID"
        
      # 이미지 잘 올라갔는지 확인
      docker images
        
      # docker user id 변수 지정해두기 (docker hub ID로 해야함. 권한 오류 해결)
      export Docker_ID_USER="ghwns1102"
        
      # 태그 변경
      docker tag "아까만든 IMAGE ID" $DOCKER_ID_USER/아까만든 IMAGE ID
        
      # 태그 적용되어 있는 Image를 Dockerhub에 push
      docker push $DOCKER_ID_USER/아까만든 IMAGE ID