Hướng dẫn sử dụng docker
0. Mục tiêu của docker
Tạo một môi trường máy ảo để đóng gói code. Sau này mang code đi sử dụng ở bất kỳ máy nào khác chỉ cần chạy file docker là xong, không cần có các thao tác cài đặt lại.
Hướng dẫn được thực hiện ở trên máy Ubuntu 20.04 LTS, chú ý rằng các dịch vụ máy ảo như Google Colab hay Paperspace không sử dụng được Docker.
Trước hết phân biệt khái niệm:
- Image: là tập hợp các tập tin của ứng dụng.
- Container: là môi trường runtime để chạy các docker image.
1. Các bước cài đặt docker
Có thể cần dùng đến quyền sudo
sudo apt-get update
sudo apt-get install docker.io
Sau khi cài đặt xong cần chạy thêm dòng lệnh dưới đây để khởi động docker:
systemctl start docker
Sau khi thực hiện hai bước trên, thực hiện lệnh dưới đây để đảm bảo việc cài đặt được hoàn thành không có lỗi:
sudo docker run -it hello-world
Nếu bạn nhận được dòng phản hồi dưới đây đồng nghĩa với việc cài đặt đã hoàn tất:
2. Tải image ubuntu
Docker có chuẩn bị sẵn image ubuntu, chúng ta có thể tải về và làm việc trên container này.
sudo docker run -it ubuntu
Sau dòng lệnh này thì image ubuntu sẽ tự động được tải về từ máy chủ.
Tải thành công:
Sau bước này thì docker đã tự động tạo ra một máy ảo, cụ thể có Container ID là 17b889396950. Chúng ta có thể tạm thời thoát ra container này, về lại terminal chính bằng cách Ctrl + D hoặc gõ Exit.
3. Thực hiện chạy một container
Bây giờ chúng ta sẽ tạo lại một container bằng cách làm y chang bước 2.
sudo docker run -it ubuntu
Mở ra 1 terminal khác, gõ lệnh sau:
sudo docker ps
Có thể thấy container chúng ta vừa tạo có ID là 87164a4ceea0, docker image có name là ubuntu
Như vậy, chúng ta giữ 1 cửa sổ terminal để làm việc từ bên ngoài (user gốc của máy) . Một cửa sở để làm việc bên trong image.
Có thể coi Docker image là máy ảo, container giống như chúng ta mở terminal của máy ảo đó vậy.
4. Các bước gói source code vào docker
4.1. Copy code vào docker
Ở terminal user gốc, chúng ta thực hiện lệnh dưới đây để copy source code vào container.
cp <thư mục code ở user gốc> <id container>:<đường dẫn muốn copy vào trong docker image>
Ví dụ, toàn bộ code nằm trong folder source, trong folder này có một file hello.py có nội dung như sau:
print("Hello world. Su dung docker that vui")
Ta tiến hành cp từ ngoài vào docker image:
sudo docker cp WORKING/DDocker/source 87164a4ceea0:/source
Command line trên sẽ copy folder source từ ngoài vào folder source bên trong docker image.
Sau khi copy ta commit lại:
sudo docker commit <container ID> <image name>
Cụ thể:
sudo docker commit 87164a4ceea0 ubuntu
Bây giờ chúng ta chuyển sang terminal docker image kiểm tra thử xem đã có thư mục source trong docker chưa
root@87164a4ceea0:/# ls
Kết quả:
Như vậy chúng ta đã có folder source bên trong docker.
Thử vào thư mục source và kiểm tra:
cd source
ls
Như vây là đã có file hello.py của chúng ta, tiến hành chạy thử file này trong docker:
python3 hello.py
Đến đây chúng ta đã hiểu sơ được cách docker hoạt động.
Thường sử dụng docker chúng ta sẽ chuẩn bị một file bash để chạy end-to-end source code của chúng ta. Tiến hành thử tạo một file bash để chạy file hello.py.
File bash này đặt tên là run.sh
cd source
python3 hello.py
Chúng ta tiến hành cp fle này vào folder source trong docker image
sudo docker cp WORKING/DDocker/source/run.sh 87164a4ceea0:/source
4.2. Cài đặt environment cần thiết trong image.
Ở terminal container, chúng ta tiến hành dùng lệnh pip cài đặt các thư viện cần dùng cho source code của chúng ta.
Tuy nhiên, docker image ta đang dùng có thể chưa cài pip, trước hết chúng ta cài pip.
- apt update trước:
apt update
- cài đặt pip3:
apt install python3-pip
Sau khi cài đặt xong chúng ta sẽ tiến hành cài toàn bộ thư viện cần thiết để chạy code của chúng ta. Cài đặt như thông thường:
pip3 install <thư viện>
Ví dụ muốn cài thu viện numpy:
pip3 install numpy
Tiến hành cài đặt thư viện numpy bình thường như ở bên ngoài:
Hoặc ta có thể cp file requirements.txt hay .yml từ bên ngoài vào trong docker image, rồi chạy cài đặt thư viện gắn flag -r vào.
pip3 install -r requirements.txt
Các lỗi trên docker image cũng như các lỗi trên máy linux bình thường. Gặp lỗi gì cứ stackoverflow.
4.3 Verify lại code trong docker.
Ta tiến hành chạy lại source đã copy vào docker image để verify lại mọi thứ đều đúng.
Tiến hành chạy lại file bash run.sh trong docker image xem có chạy được không bằng dòng lệnh:
sudo docker run <image name> /bin/bash <đường dẫn file bash>
Ví dụ cụ thể:
sudo docker run ubuntu /bin/bash source/run.sh
Kết quả:
Như vậy ta đã chắc rằng docker image hoạt động tốt.
5. Xuất docker image
Sau khi hoàn thành các bước trên, ta tiến hành xuất file image ra.
Ta kiểm tra image id
sudo docker images
Ta sử dụng image id của <lastest>, là image id chúng ta commit mới nhất.
Xuất image:
sudo docker save -o <name output> <image_id>
Thường chúng ta lưu docker image ở đuôi .tar:
sudo docker save -o test.tar 3bd5fce5bc3e
Sau khi lưu sẽ có file output test.tar được tạo, đây là docker image chứ code, môi trường mà nãy giờ chúng ta tạo.
6. Load thử image
Sau khi xong xuôi, để chắc chắn docker hoạt động tốt ta load lại docker image
sudo docker load -i <docker image name>
cụ thể:
sudo docker load -i test.tar
Kiểm tra lại ta thấy có một docker image mới được thêm
Lấy image id ra và chạy lại thử file bash trong image
sudo docker run 3bd5fce5bc3e /bin/bash source/run.sh
Kết quả như mong đợi:
Bài viết trên hướng dẫn sử dụng docker chưa dùng GPU.
Hướng dẫn sử dụng docker
0. Mục tiêu của docker
Tạo một môi trường máy ảo để đóng gói code. Sau này mang code đi sử dụng ở bất kỳ máy nào khác chỉ cần chạy file docker là xong, không cần có các thao tác cài đặt lại.
Trước hết phân biệt khái niệm:
1. Các bước cài đặt docker
Có thể cần dùng đến quyền sudo
Sau khi cài đặt xong cần chạy thêm dòng lệnh dưới đây để khởi động docker:
Sau khi thực hiện hai bước trên, thực hiện lệnh dưới đây để đảm bảo việc cài đặt được hoàn thành không có lỗi:
Nếu bạn nhận được dòng phản hồi dưới đây đồng nghĩa với việc cài đặt đã hoàn tất:
2. Tải image ubuntu
Docker có chuẩn bị sẵn image ubuntu, chúng ta có thể tải về và làm việc trên container này.
Sau dòng lệnh này thì image ubuntu sẽ tự động được tải về từ máy chủ.
Tải thành công:
Sau bước này thì docker đã tự động tạo ra một máy ảo, cụ thể có Container ID là 17b889396950. Chúng ta có thể tạm thời thoát ra container này, về lại terminal chính bằng cách Ctrl + D hoặc gõ Exit.
3. Thực hiện chạy một container
Bây giờ chúng ta sẽ tạo lại một container bằng cách làm y chang bước 2.
Mở ra 1 terminal khác, gõ lệnh sau:
Có thể thấy container chúng ta vừa tạo có ID là 87164a4ceea0, docker image có name là ubuntu
Như vậy, chúng ta giữ 1 cửa sổ terminal để làm việc từ bên ngoài (user gốc của máy) . Một cửa sở để làm việc bên trong image.
4. Các bước gói source code vào docker
4.1. Copy code vào docker
Ở terminal user gốc, chúng ta thực hiện lệnh dưới đây để copy source code vào container.
Ví dụ, toàn bộ code nằm trong folder source, trong folder này có một file hello.py có nội dung như sau:
print("Hello world. Su dung docker that vui")
Ta tiến hành cp từ ngoài vào docker image:
Command line trên sẽ copy folder source từ ngoài vào folder source bên trong docker image.
Sau khi copy ta commit lại:
Cụ thể:
Bây giờ chúng ta chuyển sang terminal docker image kiểm tra thử xem đã có thư mục source trong docker chưa
Kết quả:
Như vậy chúng ta đã có folder source bên trong docker.
Thử vào thư mục source và kiểm tra:
Như vây là đã có file hello.py của chúng ta, tiến hành chạy thử file này trong docker:
Đến đây chúng ta đã hiểu sơ được cách docker hoạt động.
Thường sử dụng docker chúng ta sẽ chuẩn bị một file bash để chạy end-to-end source code của chúng ta. Tiến hành thử tạo một file bash để chạy file hello.py.
File bash này đặt tên là run.sh
Chúng ta tiến hành cp fle này vào folder source trong docker image
4.2. Cài đặt environment cần thiết trong image.
Ở terminal container, chúng ta tiến hành dùng lệnh pip cài đặt các thư viện cần dùng cho source code của chúng ta.
Tuy nhiên, docker image ta đang dùng có thể chưa cài pip, trước hết chúng ta cài pip.
Sau khi cài đặt xong chúng ta sẽ tiến hành cài toàn bộ thư viện cần thiết để chạy code của chúng ta. Cài đặt như thông thường:
Ví dụ muốn cài thu viện numpy:
Tiến hành cài đặt thư viện numpy bình thường như ở bên ngoài:
Hoặc ta có thể cp file requirements.txt hay .yml từ bên ngoài vào trong docker image, rồi chạy cài đặt thư viện gắn flag -r vào.
4.3 Verify lại code trong docker.
Ta tiến hành chạy lại source đã copy vào docker image để verify lại mọi thứ đều đúng.
Tiến hành chạy lại file bash run.sh trong docker image xem có chạy được không bằng dòng lệnh:
Ví dụ cụ thể:
Kết quả:
Như vậy ta đã chắc rằng docker image hoạt động tốt.
5. Xuất docker image
Sau khi hoàn thành các bước trên, ta tiến hành xuất file image ra.
Ta kiểm tra image id
Ta sử dụng image id của <lastest>, là image id chúng ta commit mới nhất.
Xuất image:
Thường chúng ta lưu docker image ở đuôi .tar:
Sau khi lưu sẽ có file output test.tar được tạo, đây là docker image chứ code, môi trường mà nãy giờ chúng ta tạo.
6. Load thử image
Sau khi xong xuôi, để chắc chắn docker hoạt động tốt ta load lại docker image
cụ thể:
Kiểm tra lại ta thấy có một docker image mới được thêm
Lấy image id ra và chạy lại thử file bash trong image
Kết quả như mong đợi:
Bài viết trên hướng dẫn sử dụng docker chưa dùng GPU.