Dockerfile cho Cuộc đua số
Môi trường mẫu để cho các đội tham gia cuộc đua số có thể sử dụng. Các image được xây dựng chỉ chứa những chương trình và thư viện cơ bản, các đội tham gia có thể sẽ cần cài đặt thêm một số thư viện cho phù hợp với phần thi của đội mình
I. Các tag được hỗ trợ và Dockerfile
tương ứng.
Cấu trúc thư mục được mô tả như hình sau:
<team-name>
├── Dockerfile
├── README.md
\── src
Là file để có thể build lên thành 1 image docker.
Trong Dockerfile
của các đội tham gia buộc phải FROM
từ Docker Hub của BTC,
trường hợp nếu đội thi cần thêm những image khác thì có thể viết một Dockerfile mới
và gửi để mình có thể đẩy lên docker hub cho các bạn.
File này các đội cần ghi rõ hướng dẫn chạy cho BTC.
vd: chạy file này trước chờ tới khi xuất hiện thông báo abc.xyz gì đấy thì code đã sẵn sàng để chạy.
Thư mục chứa toàn bộ source code của các đội.
Chạy script sau (đã được test và chạy trên các hệ điều hành họ Debian):
curl -fsSL https://get.docker.com | sh && sudo usermod -aG docker $USER
Lưu ý: Việc chạy sudo usermod -aG docker $USER
rất quan trọng, đừng bỏ qua nó, nếu không docker sẽ chạy không chính xác.
docker build -t <image-name> .
- chạy docker image không sử dụng gpu:
docker run --rm -it --network=host -v <đường dẫn đến thư mục src ở trên>:/catkin_ws/src --name <team-name> <image-name> bash
- chạy docker image sử dụng gpu:
docker run --rm -it --gpus=all --network=host -v <đường dẫn đến thư mục src ở trên>:/catkin_ws/src --name <team-name> <image-name> bash
Lúc này bạn đã được đưa vào container luôn và có thể sử dụng terminal bình thường.
- Cách để truy cập 1 container đang chạy
docker exec -it <contaier-name> bash
- Hai tag
ros
vàros-cuda
là các image cơ bản, các đội phảiFROM
từ image này - Cần file README hướng dẫn chỉ nhằm mục đính thông báo cho BTC code chạy ntn thì sẽ sẵn sàng, các đội cần viết launch file
để btc có thể chạy theo cú pháp
$ roslaunch team-name team-name.launch
- option
-v
trong lệnh chạy container là để mount file vào, các đội có thể sử dụngCOPY
từ trongDockerfile
cũng được chấp nhận.