Hướng Dẫn Sử Dụng Docker - HackMD
Có thể bạn quan tâm
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.ioSau khi cài đặt xong cần chạy thêm dòng lệnh dưới đây để khởi động docker:
systemctl start dockerSau 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-worldNế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 ubuntuSau 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 ubuntuMở 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:/sourceCommand 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 ubuntuBâ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:/# lsKế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 #cd vào thư mục source python3 hello.py #Chạy file hello.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:/source4.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:
- cài đặt pip3:
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 numpyTiế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.txtCá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.shKế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 3bd5fce5bc3eSau 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.tarKiể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.shKết quả như mong đợi:

Bài viết trên hướng dẫn sử dụng docker chưa dùng GPU.
Từ khóa » Sử Dụng Docker
-
Hướng Dẫn Sử Dụng Docker Cơ Bản - Hybrid Technologies
-
Giới Thiệu Về Docker Làm Quen Với Docker Tạo Container
-
Docker: Chưa Biết Gì đến Biết Dùng (Phần 1- Lịch Sử) - Viblo
-
Hướng Dẫn Cho Người Mới Bắt đầu Sử Dụng Docker (Build, Run ...
-
Docker Là Gì? Kiến Thức Cơ Bản Về Docker | TopDev
-
20 Trường Hợp Sử Dụng Lệnh Docker Cho Developer | TopDev
-
Docker Là Gì? Hướng Dẫn Sử Dụng Docker Cơ Bản - Vietnix
-
Docker: Chưa Biết Gì đến Biết Dùng (Phần 1) - Bizfly Cloud
-
Docker Là Gì Và Tại Sao Chúng Ta Lại Sử Dụng Nó Khi Phát Triển Phần ...
-
Docker Là Gì? Tìm Hiểu Về Dự án Mã Nguồn Mở Docker Từ A - Z
-
Bài 4: Hướng Dẫn Sử Dụng Docker Container - YouTube
-
Docker Là Gì? Kiến Thức Cơ Bản Về Docker Không Thể Bỏ Lỡ
-
Docker Là Gì? Docker Khác Biệt Thế Nào So Với VPS?