Trong khuôn khổ cuộc thi học thuật UIT CAR RACING, thí sinh sẽ hiện thực giải thuật giải quyết bài toán trên nền tảng docker, việc cài đặt phần mềm này không chỉ là một bước cần thiết mà còn là một yếu tố quan trọng để đảm bảo khả năng tương tác và tích hợp mượt mà với phần mềm Unity, tạo điều kiện thuận lợi cho việc phát triển và kiểm thử ứng dụng. Hãy cùng đi sâu vào tìm hiểu những ưu điểm nổi bật của Docker trong việc hỗ trợ quá trình này và lý do tại sao nó lại được khuyến nghị sử dụng trong môi trường nghiên cứu và phát triển.
I. Các khái niệm cơ bản về docker
- Docker là gì?
Docker là một nền tảng phần mềm cho phép bạn tạo, triển khai và quản lý các ứng
dụng bên trong các container. Khi đó, lập trình viên đưa vào các thành phần cần thiết để ứng dụng của họ chạy được, bằng cách đóng gói ứng dụng cùng với container. Như vậy, nó đảm bảo ứng dụng chạy được và giống nhau ở các máy khác nhau (Linux, Windows, Desktop, Server …)
Image là một gói phần mềm trong đó chứa những thứ cần như thư viện, các file cấu hình, biến môi trường để chạy mội ứng dụng nào đó. Ví dụ về các image cụ thể: image Ubuntu, Window, Python….
Container là một phiên bản của image, khi một image được chạy sẽ tạo container, vậy nên muốn có container thì phải có image. Bất cứ lúc nào ta cũng có thể kiểm tra bao nhiêu container đang chạy và được tạo từ image nào
- Vậy docker khác gì với máy ảo ?
Docker và máy ảo (Virtual Machine) đều cung cấp cách để quản lý các ứng dụng hoặc môi trường, nhưng chúng khác nhau về cách hoạt động và các ưu điểm riêng:
Docker: Do không cần khởi động hệ điều hành riêng, container có hiệu suất cao hơn và sử dụng tài nguyên ít hơn và nhờ đó container tiêu tốn ít tài nguyên hơn vì chia sẻ kernel của hệ điều hành chủ.
VM: Trái lại với docker máy ảo có hiệu suất thấp hơn vì phải ảo hóa và khởi động hệ điều hành đầy đủ và mô phỏng phần cứng. Vì vậy máy ảo tiêu tốn nhiều tài nguyên hơn do cần phải cung cấp hệ điều hành và kernel riêng cho mỗi máy ảo.
- Ứng dụng của docker
Docker có nhiều ứng dụng trong kỹ thuật phần mềm như triển khai và quản lý ứng dụng, phát triển phần mềm hay quản lý các phiên bản ứng dụng.
Trong UIT Car racing: Mục tiêu chính của docker là tạo môi trường phát triển đồng nhất, giúp đảm bảo cung cấp đầy đủ tài nguyên chạy như mong đợi trên tất cả các máy thí sinh mà không gặp phải vấn đề về cấu hình khác nhau.
II. Hướng dẫn cài đặt docker
Để cài đặt docker, chúng ta cần dùng terminal của Linux Ubuntu
Cập nhật danh sách các gói có sẵn trên hệ thống
sudo apt update
Lệnh này sẽ cập nhật danh sách các gói từ tất cả các nguồn đã được thêm vào, đảm bảo rằng bạn có thể cài đặt phiên bản mới nhất của các gói.
Cài đặt giúp apt sử dụng các gói qua HTTPS
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Thêm khóa GPG cho kho lưu trữ chính thức của Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
Lệnh tải xuống khóa GPG từ Docker, đảm bảo rằng các gói tải xuống từ Docker là hợp lệ và an toàn.
Thêm kho lưu trữ Docker
sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable”
Lệnh này thêm kho lưu trữ Docker cho Ubuntu
Kiểm tra phiên bản docker-ce sẽ cài đặt
apt-cache policy docker-ce
Cài đặt docker
sudo apt install docker-ce
Kiểm tra trạng thái hoạt động docker
sudo systemctl status docker
Khi các bạn cài đặt hết các lệnh trên, docker đã được cài đặt vào hệ điều hành của các bạn. Khi đó, docker chỉ có thể hoạt động ở quyền root qua lệnh sudo. Để có thể sử dụng docker một cách thoải mái, ta cần thêm user vào docker group
sudo usermod -aG docker ${USER}
Để áp dụng việc thêm user, ta cần đăng xuất và đăng nhập lại
su – ${USER}
Sau cùng, kiểm tra xem user của bạn đã vào trong docker group chưa
groups
Video hướng dẫn chi tiết: Nội dung huấn luyện 1 UIT Car racing
III. Các lệnh docker cơ bản
Xem phiên bản docker: docker info
Xem danh sách các image trên máy: docker images
Tìm kiếm image: docker search [image name]
Tải image về máy: docker pull [image name]:[tag]
nếu không có tag, docker sẽ mặc định cài đặt image có tag:latest
Xóa image: docker image rm [image name]
Tạo container: docker run [option] [image id]
Bắt đầu container: docker container start [container name]
Dừng container: docker container stop [container name]
Xóa Container: docker container rm [container name]
Các bạn có thể xem những tham số [option] có thể dùng bằng tham số –help
Xem những tất cả container đã tạo: docker ps -a
IV. Hướng dẫn sử dụng container của BTC UIT Caracing
- Tải image đã được BTC chuẩn bị sẵn
docker pull phucnguyen04/uit_car_racing_2024:v1
- Tạo container
docker run –name it-car -it -p 11000:11000 –network=”host” -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix –gpus phucnguyen04/uit_car_racing_2024:v1
–name: Là tùy chọn để đặt tên cho container. Nếu không có –name, container sẽ được đặt tên ngẫu nhiên
-it: đây thực chất là sự kết hợp của hai tùy chọn -i và -t, -i giúp giữ cho container chạy sau khi tạo container, -t tạo terminal tương tác với container
-p 11000:11000: tùy chọn mở cổng ánh xạ <host_port>:<container_port>, giúp máy chủ dùng docker tương tác với container qua các port
–network=”host”:
- Thiết lập network cho container, cho phép container sử dụng mạng của host, bỏ qua lớp mạng ảo của docker, giúp cải thiện hiệu suất
- Trong docker có một số network tiêu biểu: bridge, host, none, overlay….
- Thí sinh có thể kiểm tra network hiện có trong hệ thống bằng lệnh: docker network list
-e DISPLAY=$DISPLAY:
- Tạo một biến môi trường DISPLAY trong container và gán bằng giá trị với biến môi trường DISPLAY của máy host
- Biến DISPLAY trong ubuntu được sử dụng để xác định máy chủ hiển thị các ứng dụng đồ họa của X11
-v /tmp/.X11-unix:/tmp/.X11-unix:
- Thiết lập volume, ánh xạ, liên kết thư mục .X11-unix của host đến thư mục .X11-unix của container
- Ngoài ánh xạ thư mục giữa host và container, volume có thể được dùng để ánh xạ thư mục giữa các container
–gpus all: tùy chọn chỉ định container có quyền truy cập tất cả gpu của host
- Nộp code
Sau khi các đội hoàn thành xong code, container lưu code cần được build thành image nộp cho ban tổ chức
Lệnh lưu container thành image:
docker commit [container id] [image name]:[version name]
Sau khi có image thì các đội thi vẫn chưa thể nộp được code mà cần lưu image thành file mới có thể nộp code
Lưu image thành file: docker save –output [file name].tar [image id]
Thực hiện bài viết bởi: Nguyễn Thiên Hoàn Phúc