ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Docker] 0. Docker 설치 (Ubuntu)
    지식저장소 2024. 6. 6. 00:29
    728x90

    0. 이전 Docker 버전 삭제(Docker가 완전 처음이라면 Skip)

    sudo apt remove docker docker-engine docker.io containerd runc

     

    1. apt에 Docker 추가(apt install로 설치 가능)

    sudo apt-get update
    
    sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg \
        lsb-release
        
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
    echo \
    "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

     

    sudo apt-get update
    
    sudo apt-get install docker-ce docker-ce-cli containerd.io

     

    1.1) Docker 설치확인 

    sudo docker run hello-world

    아래 이미지처럼 출력된다면 설치 완료

     

    2) Image 파일 불러오기

    <방법1> Clean Ubuntu 설치(Image 파일)

    *완전 깨끗한 초기상태 우분투이며, ROS가 설치된 버전은 아래에서 확인

    sudo docker run -dit ubuntu:latest #우분투 최신버전 설치
    sudo docker run -dit ubuntu:20.04  #20.04 설치
    sudo docker run -dit ubuntu:18.04  #18.04 설치

     

     

    <방법2> 사용자 용도에 맞게 Image 불러오기

     *작성자는 ROS2 Foxy 버전을 설치

     

    아래 링크에서 사용자 용도에 맞게 찾아서 쓰면 된다.

     

    https://hub.docker.com/r/althack/ros2/tags?name=foxy&ordering=&page=&page_size=

     

    hub.docker.com

     

    #foxy-cuda-gazebo-nvidia-2023-02-01 버전을 불러오기(작성자 사용 파일)
    sudo docker pull althack/ros2:foxy-cuda-gazebo-nvidia-2023-02-01

     

    2-1) Image 파일 목록 확인

    sudo docker images

    이미지 파일 확인

    2-2) 컨테이너 생성

    sudo docker run --name <컨테이너 이름> <이미지 파일>

     

     

    2-3)컨테이너 목록 확인

    sudo docker ps -a

    컨테이너 전체 목록

     

    3) CONTAINER  생성 

    #GUI 연동을 사용할 경우
    xhost +local:docker 
    
    sudo docker run -it --gpus all -d  -e DISPLAY=:0 -v /tmp/.X11-unix:/tmp/.X11-unix <이미지 파일 ID>

    xhost 명령어 실행시

    <Xhost란?>

     X서버에 대한 접근을 실행되는 컨테이너에 부여하는 명령어이다.
    X서버는 UNIX 및 UNIX-like 운영 체제에서 사용되는 그래픽 시스템의 핵심 요소이며,
    이때문에 사용자가 그래픽 인터페이스를 활용 할 수 있는 것이다.

     

    <컴퓨터 재부팅시>

    컴퓨터를 재부팅하고나면 xhost 권한 부여가 풀리기 때문에 재부팅시 매번 실행해야한다.
    (귀찮다면 /.bashrc에 등록해서 사용해도 좋다!!)

     

    <해당 명령어 예시>
    "sudo docker run -it --gpus all -d  -e DISPLAY=:0 -v /tmp/.X11-unix:/tmp/.X11-unix bf3dc08bfed0"

     

    <명령어 옵션>

    • -i : 컨테이너와 상호작용 할 수 있도록 표준입력(stdin)을 설정
    • -t : 가상 터미널을 할당 (-i 옵션과 같이 사용하여  -it로 사용)
    • -d : 컨테이너를 백그라운드로 실행(터미널을 점유하지 않고 컨테이너 실행 가능)
    • -e : 컨테이너 내에 사용할 환경변수 설정(ex. -e DISPLAY=:0)
      *DISPLAY를 환경변수를 설정하여 X11서버와 연결해 GUI 사용 활성
    • -v : 호스트와 컨테이너 간의 디렉토리를 마운트
      *로컬과 컨테이너 간 파일을 옮길 수 있으며, X11 서버 소켓을 공유하여 그래픽 애플리케이션 실행가능 
    • --name : 컨테이너 이름을 지정
    • --rm : 컨테이너가 종료되면 해당 컨테이너 삭제
    • --cpus : 컨테이너에 할당하는 cpu의 갯수 제한
    • --gpus all : 모든 GPU 가동(all 대신 특정 갯수 입력 가) 
    • --memory : 컨테이너에 할당하는 메모리 제한

     

    3-1) 컨테이너 실행 

    sudo docker exec -it <Container ID or Name> /bin/bash
    
    #오랜만에 접속하거나 exited 상태라면
    sudo docker start <컨테이너 NAMES>

    매번 실행할 때 "-it" 옵션은 고정!!

     

    4) 컨테이너 접속 직후

    #도커의 경우 이미 권한이 부여했기에 sudo 필요X
    sudo apt update
    
    #GUI설정 확인 
    sudo apt-get install x11-apps
    
    #실행
    xeyes

    xeyes를 실행하면 위 사진처럼 창이 하나 나온다. 
    여기서 만약  아래 오류 문구가 뜬다면,

    No protocol specified
    Error: Can't open display: :0
    
    #해결방법
    export DISPLAY=:1

     

    여기서 기본적인 세팅과 GUI 연동까지 확인하였습니다.

    728x90
Designed by Tistory.