ROS2 프로젝트용 devcontainer
요약
이 기사에서는 ROS2 프로젝트를 위한 로컬 개발 환경을 만드는 방법을 공유하고자 합니다. ROS2 프레임워크와 같은 최근의 코드 개발은 매우 복잡해지고 OSS 패키지에 크게 의존하게 되었습니다. VS Code devcontainer를 사용하면 로컬 개발 환경을 훨씬 쉽게 만들 수 있습니다.
목차
Directory structure
개요
devcontainer is one of Visual Studio Code Remote Development features that helps create local develop environment. Personally I love Windows OS and Visual Studio when developing .NET C# applications, but when in development with some other languages like Python, Typescript etc., VS Code devcontainer is really powerful. Here is my personal opinion of whe it is so useful.
Independent of your machine's operating system: According to statistica.com, Windows has around 75 percent of the global market share of operating system in 2022. Combined with WSL(Windows Subsystem for Linux) technology, VS Code devcontainer enables you to run Linux development environment in your Windows machine.
Package verion combinations: In general, you want to divide development environments depending on projects. For example, you can use pyenv
, virtualenv
, conda
or whatever virtual environment you prefer for Python. However, when you want to combine the Python environment with other framework, for example ROS2, it is going to be more complex. VS Code devcontainer solves this problem by creating a just in time docker container for each development environment.
Independent of your machine's operating system: According to statistica.com, Windows has around 75 percent of the global market share of operating system in 2022. Combined with WSL(Windows Subsystem for Linux) technology, VS Code devcontainer enables you to run Linux development environment in your Windows machine.
Package verion combinations: In general, you want to divide development environments depending on projects. For example, you can use pyenv
, virtualenv
, conda
or whatever virtual environment you prefer for Python. However, when you want to combine the Python environment with other framework, for example ROS2, it is going to be more complex. VS Code devcontainer solves this problem by creating a just in time docker container for each development environment.
ros:foxy-ros-base-focal
image for my ROS2 developenvironment - Dockerfile ms-python
VS Code 확장을 사용합니다. .devcontainer/devcontainer.json
The sample devcontainer.json은 아래와 같습니다.
dockerfile:
Dockerfile
디렉터리 아래 devcontainer.json
와 같은 폴더에 있는 .devcontainer
를 가리킵니다. workspaceFolder:
.devcontainer
디렉토리가 존재하는 도커 컨테이너의 디렉토리입니다. 확장: docker 포함 개발 환경에서 사용하려는 VS Code 확장입니다.
{
"name": "ROS devcontainer",
"dockerFile": "Dockerfile",
"workspaceFolder": "/workspaces/EdgeIntegrationTest/src/apps/FileGenerator",
"settings": {},
"extensions": [
"ms-python.python"
]
}
.devcontainer/Dockerfile
The sample Dockerfile 아래의 .devcontainer
디렉토리는 아래와 같습니다.
FROM ros:foxy-ros-base-focal
: 이 샘플에서는 해당 ros 이미지를 기본 이미지로 사용합니다. ros:foxy-ros-core-focal 을 기반으로 하며 ubuntu:focal 을 기반으로 하며 ubuntu:20.04
와 동일합니다. COPY requirements.txt ./
: requirements.txt
를 /app
에 복사하여 docker 컨테이너가 실행pip install
하여 필요한 Python 종속성을 설정할 수 있도록 합니다. RUN echo 'source /opt/ros/foxy/setup.bash' >> /root/.bashrc
: ROS2 문서Configuring environment에 따르면 ROS2 명령에 액세스하도록 도커 컨테이너를 설정하려면 도커 컨테이너에서 설정 파일을 가져와야 합니다/opt/ros/foxy/setup.bash
. 매번 소스 명령을 실행하지 않도록 쉘 시작 스크립트에 소스 명령을 추가합니다.FROM ros:foxy-ros-base-focal
SHELL ["/bin/bash", "-c"]
WORKDIR /app
COPY requirements.txt ./
RUN apt update && apt install -y \
python3-pip \
python3-colcon-common-extensions
RUN pip install -r requirements.txt
RUN echo 'source /opt/ros/foxy/setup.bash' >> /root/.bashrc
도커 컨테이너에서
setup.bash
파일의 위치/opt
└── ros
└── foxy
├── _local_setup_util.py
├── bin
├── cmake
├── include
├── lib
├── local_setup.bash
├── local_setup.sh
├── local_setup.zsh
├── opt
├── setup.bash
├── setup.sh
├── setup.zsh
├── share
├── src
└── tools
디렉토리 구조
도커 컨테이너 개발 환경을 실행하는 방법
The step to open the development environment is like below.
- Go to your terminal and change your directory to where
.devcontainer
folder exists.
- Run
code .
in your terminal, and you will see VS Code is coming up.
- Go to
Open a Remote Window
and select Reopen in Container
, and you will see VS Code is reopened with the one running in the docker container.
프로젝트 디렉토리는 어디에 있습니까?
In this sample - .devcontainer 도커 컨테이너 VS 코드가 열려 있으면 도커 컨테이너의 디렉터리가 /workspaces/EdgeIntegrationTest/src/apps/FileGenerator
인 것을 볼 수 있습니다. 로컬 컴퓨터 디렉터리의 FileGenerator
에서 devcontainer를 열었습니다. 그러나 도커 컨테이너는 로컬 컴퓨터의 EdgeIntegrationTest
디렉토리를 도커 컨테이너의 /workspaces
로 복사했습니다.
EdgeIntegrationTest
└── src
└── apps
└── FileGenerator
├── .devcontainer
| ├── Dockerfile
| ├── devcontainer.json
| └── requirements.txt
├── Dockerfile
├── main.py
└── requirements.txt
devcontainer.json에서 "workspaceFolder": "/workspaces/EdgeIntegrationTest/src/apps/FileGenerator"
를 명확하게 표현했기 때문입니까? 아니요. workspaceFolder
에서 devcontainer.json
를 "workspaceFolder": "/workspaces/FileGenerator"
로 변경하면 EdgeIntegrationTest
디렉토리가 도커 컨테이너의 /workspaces
아래에 복사되고 아래 오류가 표시됩니다.
VS Code 원격 개발 확장 프로그램이 사용자.git
가 있는 현재 디렉터리 위에 하나Reopen in Container
가 있는 디렉터리를 복사하는 것 같습니다. 나는 아래 세 가지 실험을 시도했다.
실험 1
Reopen in Container at FileGenerator
in your local machine
C:.
└── FileGenerator
├── .devcontainer
| ├── Dockerfile
| ├── devcontainer.json
| └── requirements.txt
├── Dockerfile
├── main.py
└── requirements.txt
Your directory in the docker container
root@xxxxxxx:/workspaces/FileGenerator#
실험 2
Reopen in Container at FileGenerator
in your local machine
C:.
└── ProjectFolder1
├── .git
└── FileGenerator
├── .devcontainer
| ├── Dockerfile
| ├── devcontainer.json
| └── requirements.txt
├── Dockerfile
├── main.py
└── requirements.txt
Your directory in the docker container
root@xxxxxxx:/workspaces/ProjectFolder1/FileGenerator#
실험 3
Reopen in Container at FileGenerator
in your local machine
C:.
└── ProjectFolder2
├── .git
└── ProjectFolder1
├── .git
└── FileGenerator
├── .devcontainer
| ├── Dockerfile
| ├── devcontainer.json
| └── requirements.txt
├── Dockerfile
├── main.py
└── requirements.txt
Your directory in the docker container
root@xxxxxxx:/workspaces/ProjectFolder1/FileGenerator#
Reference
이 문제에 관하여(ROS2 프로젝트용 devcontainer), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/koheikawata/devcontainer-for-ros2-project-31ng
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
.devcontainer
folder exists.code .
in your terminal, and you will see VS Code is coming up.Open a Remote Window
and select Reopen in Container
, and you will see VS Code is reopened with the one running in the docker container.EdgeIntegrationTest
└── src
└── apps
└── FileGenerator
├── .devcontainer
| ├── Dockerfile
| ├── devcontainer.json
| └── requirements.txt
├── Dockerfile
├── main.py
└── requirements.txt
FileGenerator
in your local machineC:.
└── FileGenerator
├── .devcontainer
| ├── Dockerfile
| ├── devcontainer.json
| └── requirements.txt
├── Dockerfile
├── main.py
└── requirements.txt
root@xxxxxxx:/workspaces/FileGenerator#
FileGenerator
in your local machineC:.
└── ProjectFolder1
├── .git
└── FileGenerator
├── .devcontainer
| ├── Dockerfile
| ├── devcontainer.json
| └── requirements.txt
├── Dockerfile
├── main.py
└── requirements.txt
root@xxxxxxx:/workspaces/ProjectFolder1/FileGenerator#
FileGenerator
in your local machineC:.
└── ProjectFolder2
├── .git
└── ProjectFolder1
├── .git
└── FileGenerator
├── .devcontainer
| ├── Dockerfile
| ├── devcontainer.json
| └── requirements.txt
├── Dockerfile
├── main.py
└── requirements.txt
root@xxxxxxx:/workspaces/ProjectFolder1/FileGenerator#
Reference
이 문제에 관하여(ROS2 프로젝트용 devcontainer), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/koheikawata/devcontainer-for-ros2-project-31ng텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)