#Youtube Docker 자료 설명 정리
원본 링크[Docker_Ros]
#도커의 일반적 문제와 활용은?
도커의 기초를 배우고 컨테이너를 실행했지만, 일부 그래픽 프로그램은 실행되지 않아요.
네트워크 통신은 이상하게 작동하며, 공유 볼륨에서 생성한 파일은 잠기는 등의 문제가 발생할 수 있어요.
오늘은 Dockerfile과 docker run 명령에 수정을 가해 이러한 일반적 문제들을 해결해볼 거에요.
로봇공학 및 자동화 소프트웨어 개발 환경을 예로 들며 해결 방법을 보여주겠지만, 이는 다양한 Docker 사용 시나리오에도 적용 가능해요.
최종적으로 Docker는 매우 견고한 플랫폼이며, 다양한 이미지를 구축할 수 있는 안정적인 기반을 제공해요.
#도커 파일 업데이트 및 ROS 이미지 변경
영상에서 보여드리는 내용 중 잘못되었거나 최선의 방법이 아닌 부분이 있을 수 있어요.
Dockerfiles는 Alison Thaxton이 작성한 것을 참고했고, 여러 모범 사례를 제공했어요.
이전 영상에서 남겨둔 부분을 바탕으로 ROS 도커 이미지를 변경하기로 하였어요.
기능에 맞춰 사용될 이미지를 변경해야 한다는 내용을 다루죠.
#도커 컨테이너에서 사용자 설정하는 방법은?
도커 컨테이너 내에서 생성된 파일이 호스트에서 루트 사용자에 의해 생성되어 잠겨있던 문제를 해결해야 해요.
리눅스에서는 사용자에게는 사용자명과 사용자 ID 번호 또는 UID가 있고, 도커 컨테이너는 기본적으로 루트로 실행돼.
주로 호스트와 호환성 있는 사용자로 또는 일반 사용자로 실행하려면 리눅스 사용자 식별에 대한 배경 지식이 필요해요.
파일을 생성하는 사용자는 생성한 사용자의 UID를 저장하는데, ls -l 명령은 사용자 이름을 보여주지만 ls -ln 명령을 통해 사용자 ID 번호를 확인할 수 있어요.
파일마다 사용자 ID와 그룹 ID가 있어서 소유자만 편집하고 다른 사용자는 볼 수 있도록 하는 등의 제한을 두는 것도 가능해요.
Docker에 사용자 지정 방법은?
Docker에게 새 사용자를 사용하도록 지시하는 방법은 몇 가지가 있어요.
사용자를 만들기 전에는 실제로 작동하지 않아요.
코드를 붙여넣으면서 ‘로스(Ross)‘라는 사용자를 생성하고 UID 및 GID 1000으로 설정하며, 이러한 인수들이 빌드 시 변경 가능하도록 설정되어 있다고 해요.
현재 ‘덱(deck)‘인 호스트와 다른 사용자명이라 생각할 수 있지만, 작동할 수 있다는 점을 기다려봐야 해요.
사용자를 위한 홈 디렉토리와 구성 디렉토리가 생성되며, 일부 프로그램은 해당 디렉토리가 있을 것으로 예상돼요.
‘docker build -t myimage’를 사용하여 컨테이너를 다시 빌드한 후 저장할 수 있고, ‘humbledesktop/full’이 실제 리포지토리인 것을 잊어버렸다면, 새 이미지를 다운로드할 것이라 기다려야 합니다.
도커 컨테이너에서의 사용자 설정과 파일 소유권 확인
도커 컨테이너 내에서 특정 볼륨을 매핑하여 새 사용자로 실행하는 방법을 소개해요.
컨테이너 안에서 파일의 소유자를 변경하고 호스트와의 관련성을 설명합니다.
도커 컨테이너에서 사용자를 호스트와 일치시키는 것이 중요한 경우에 대한 상황을 설명하고, 파일에 대한 소유권 관련 예외적인 상황에 대해 언급하며 일반적으로는 문제없음을 강조해요.
도커파일에서의 사용자 관리 방법?
도커파일 내에서 사용자를 변경하거나 루트 권한으로 전환하는 방법에 대해 설명해요.
사용자 이름, UID 또는 GID를 변경하려면 Dockerfile 또는 빌드 시에 인수 전달 가능해요.
사용자 변경 후 명령이 해당 사용자로 실행되며, 마지막 사용자가 컨테이너 실행 시 기본 사용자가 됩니다.
이미지를 확장할 때 루트 사용 여부에 주의하고, ‘RUN’ 명령어로 시작할 때 사용할 사용자를 선택할 수 있어요.
sudo와 pseudo 권한 설정의 주요 기능?
주요 기능은 두 가지로, 먼저 apt를 사용하여 sudo를 설치해요.
그리고 다른 기능으로, pseudo 권한을 설정해요.
이로써, 특정 사용자에게 sudo 권한을 부여하고 sudo를 실행할 때마다 비밀번호를 입력할 필요가 없도록 설정해요.
비밀번호를 설정하지 않았기 때문에 이 동작을 변경하거나 특정 프로그램이 sudo로 실행되는 것을 제한할 수 있어요.
이제 apt 설치 작업을 처리하기 전에 관련 명령어를 다뤄봐요.
이 명령어들에는 해석할 요소가 몇 가지 있으므로 궁금증을 해소하기 위해 노력해 볼게요.
Docker에서 apt-get 과 apt의 차이와 업데이트 필요성
apt-get은 자동화된 작업 및 스크립트에 더 신뢰성 있고 호환 가능하게 사용돼요.
반면, apt는 사용자 친화적으로 설계되어 있지만 자동화된 작업에는 적합하지 않아요.
‘apt-get update’를 실행해야 하는 이유는 이전 호출로 패키지 목록이 완전히 무효화되었을 가능성이 있어 설치를 위해 새로 고쳐야 하고, 도커 이미지를 다시 빌드할 때 이전 라인을 재실행하지 않을 수 있기 때문이에요.
‘install -y’를 사용해야 하는 이유는 사용자가 확인을 요청하지 않고 ‘예’로 응답하도록 강제한다는 거죠.
Docker 명령어 실행의 이유?
모든 프로그램을 개별적인 실행 명령어로 설치할 수 있지만, 이는 번거로울 뿐만 아니라 각 설치마다 패키지 목록을 업데이트해야 하는 번거로움이 있어요.
패키지 목록을 삭제하는 이유는 최종 이미지의 크기를 줄이기 위함이며, 다른 계층에서도 이러한 작업이 발생하는 걸 방지하기 위함이에요.
apt-get update를 실행하지 않고 설치 명령을 내릴 경우 나중에 프로그램 설치가 불가능해질 수 있으므로 한 번에 모두 실행해야 해요.
도커 환경 변수 설정
도커를 사용해 환경 변수를 설정할 때 Debian_frontend를 non-interactive로 설정할 수 있어요.
설치 과정 중에 다른 사용자 프롬프트를 받지 않게 해요.
실험 결과, 큰 차이를 못 느꼈고, 구글링 결과 이것을 넣어도 일부 프롬프트가 표시될 수 있다고 해요.
따라서 Docker ENV 명령을 사용하여 설정하지 않는 것이 좋아요.
이렇게 하지 않으면 이후에 다시 끄지 않았다가 사용하는 모든 사용자에 영향 줄 수 있어요.
도커에서의 중요한 설정은?
Docker를 사용할 때, 중요한 것 중 하나는 네트워킹이에요.
ROS를 사용한다면, ‘out of the box’로는 항상 잘 작동하지 않음을 빨리 깨닫게 되어요.
Docker는 높은 설정 가능성을 가진 네트워킹 시스템을 가지고 있어서 복잡한 작업을 할 수 있죠.
로봇 응용 프로그램에서는 이를 고려하지 않고 모든 것이 정상적으로 동작하길 원할 때, —network=host를 추가하여 호스트와 네트워킹을 공유하도록 지시하고, —ipc=host를 추가하여 공유 메모리를 사용하도록 지시하여 소통 시스템에서 사용 가능하게 해요.
도커 도큐먼트의 내용은 무엇인가요?
도커 도큐먼트는 옵션에 대해 친절하게 설명하며, GUI 프로그램 실행 방법도 다루어요.
도커파일을 생성할 때 Entry point와 command를 지정할 수 있지만, 두 가지가 상호작용하는 방식은 조금 복잡하죠.
또한 특정 패턴을 소개해 손쉽게 사용할 수 있는 방법을 언급해요.
ROS 이미지 및 엔트리 포인트 설정 방법은?
ROS 이미지 설정은 bash 스크립트를 이용해 런타임 환경을 설정하고 스크립트를 실행하는 것이에요.
이 스크립트는 실행 가능한 래퍼처럼 작동하며 전달된 인수는 추가로 제공된 내용을 포함하여 실행돼요.
엔트리 포인트 스크립트는 오류 신호를 활성화하고 ROS 설치를 실행하고 전달된 내용을 출력하며 실행돼요.
Dockerfile에 추가 지시문을 넣어 설정을 완료하고 명령을 전달하기 위해 명령 지시문을 사용하며, 이미지를 다시 빌드하여 실행 시 전달된 인수를 확인할 수 있어요.
프로그램 실행 후 PCBWay 소개 동기는?
프로그램이 특정 버전의 ROS 및 Linux에서 실행 중이라는 사실을 인지 못한 채, 단독으로 그 프로그램을 실행한 것 같아요.
튜토리얼에서 다뤘던 내용이 많은데, 이제 다음 단계에서는 그래픽 프로그램을 동작시키는 것이 더 복잡해질 것으로 예상돼요.
따라서 잠시 쉬어가며 이 동영상의 후원사인 PCBWay를 확인하기로 했어요.
PCBWay는 PCB 관련 국내 최대 허브로 PCB 제작 뿐만 아니라 조립까지 가능하며, 3D 프린팅, CNC 가공, 시트 금속 가공, 사출 성형 등 다양한 제품을 제공해요.
PCB가 필요하지 않다면, 다양한 다른 제품도 제공하니, 창의적인 아이디어를 실현하고자 한다면 링크를 통해 PCBWay를 방문해보세요.
도커 내에서 그래픽스 사용하기
도커 내에서 그래픽스를 제대로 작동시키려면 사용하고 있는 CPU 제조사, 실행하려는 프로그램, 필요한 기능 유형에 따라 복잡할 수 있어요.
X 윈도우즈를 사용한다고 가정하며, 사용 가능한 방법은 상황에 따라 더나 적절한 것이 존재해요.
사용자 권한과 X에 대한 접근 권한이 중요하며, X 도메인 소켓을 노출시켜야 해요.
또한, 해당 사용자로 실행된 컨테이너들이 접근할 수 있도록 모든 사용자에게 권한을 부여하거나 특정 사용자에게 권한을 부여할 수 있고, 환경설정 작업 후에는 필요시 해당 권한을 취소할 수 있어요.
마지막으로, X 디스플레이를 할당하고, 호스트에서 사용 중인 디스플레이를 사용하도록 Docker에 지시하여 특정 값을 제공하는 대신에 호스트 디스플레이를 사용하도록 설정해요.
ROS2 향후 콘텐츠 예정은?
ROS2 토픽 목록이 있는 컨테이너를 시작하고 RViz를 실행하면 그래픽이 오픈될 것으로 기대되고, CUDA의 미래 비디오에서 GPU 가속에 대해 자세히 다룰 예정이에요.
로케일과 시간대 개념은 소프트웨어가 특정 데이터 조각을 사용자에게 어떻게 표현해야 하는지 알려주는 시스템인데, 공식 ROS 도커 이미지를 사용하면 이 작업이 처리되지만, Ubuntu 기본 이미지에서 생성하는 경우 주의해야 해요.
ROS2 자동완성 설정 방법은?
ROS2에서 자동완성은 일부 설정이 필요하며, .bashrc 파일에 소스 명령어 추가하여 해결할 수 있어요.
터미널이 실행될 때마다 .bashrc 파일에 명령어가 실행되도록 구성하면 ros2나 colcon과 같은 명령어를 자동으로 완성할 수 있어요.
자동완성이 작동하지 않을 때는 python3-ardcomplete을 설치하거나 bash completion을 시도할 수 있어요.
또한, 다른 유용한 도구, 프로그램 및 라이브러리도 활용 가능해요.
Docker 이미지 구성 및 확장 방법은?
기본 설치에서는 텍스트 편집기, 헥스 편집기, 컴파일러, 린터와 같은 것들이 필요해요.
매우 일부만 다룬 것이며, 세부사항은 개인마다 다를 거에요.
필수적인 것이 모두 있는 경우, 해당 영상 댓글이나 Articulated Robotics Discourse Forum의 논의 스레드에서 알려줘요.
마지막으로 도커에 기기를 전달하는 방법은 다음 영상에 넣기로 결정했지만, 게임패드, 카메라, 시리얼 기기 등이 될 수 있어요.
현재 사용 중인 run 명령어는 많은 인자들을 기억해야 하고 실제로 사용하는 것은 여전히 다소 복잡하죠.
그래서 다음 영상에서는 모든 실행 시 인자들을 설정하는 더 깔끔한 방법인 Docker Compose와 여러 플랫폼에서 개발을 간편하게 하는 VS Code Dev containers를 살펴볼 거예요.
어떤 것부터 볼지는 아직 결정하지 않았으니, 특별히 보고 싶은 것이 있다면 알려줘요.