Ngắn gọn về Docker
Khi bạn phát triển một ứng dụng, bạn cần cung cấp các thư viện, máy chủ web, cơ sở dữ liệu... để mã của bạn có thể hoạt động. Đôi khi có những tình huống ứng dụng mà bạn triển khai chạy tốt trên một số máy nhưng trên một số máy khác thì không.
Vấn đề này có thể được giải quyết bằng cách cô lập ứng dụng và làm cho nó độc lập với hệ thống mà nó chạy trên đó. Docker là một giải pháp để thực hiện việc này.
Docker là một công cụ mã nguồn mở cho phép thực hiện việc phát triển, triển khai và chạy một ứng dụng bên trong một bộ chứa phần mềm (sofware container).
Một số thuật ngữ* Hình ảnh (image): là một gói thực thi bao gồm tất cả những thứ cần thiết để cho một ứng dụng chạy, tức : mã nguồn, môi trường hoạt động (runtime), thư viện, biến môi trường, file cấu hình...
* Bộ chứa (container): là một thực thể (instance) của image trong đó chứa ứng dụng cần sử dụng. Nó luôn luôn được khởi động từ image. Bộ chứa có thể đưa ra các cổng (port) và volumes để tương tác với các bộ chứa khác và tương tác với môi trường ngoài bộ chứa.
* volume : có thể xem như một thư mục chia sẻ. Volume được khởi tạo khi bộ chứa được hình thành. Nó được dùng để lưu dữ liệu và độc lập với vòng đời của bộ chứa.
* Registry : là máy chủ lưu giữ các hình ảnh docker. Nó tương đương với Github, bạn có thể kéo (pull) một hình ảnh từ registry xuống và triển khai (deploy) trên máy bạn và có thể đẩy (push) lên registry hình ảnh tạo trên máy bạn.
Docker khác với máy ảo (virtual machine) ra sao?Máy ảo dùng thêm các hệ điều hành bên trên hệ điều hành của máy chứa máy ảo, do đó nó đòi hỏi nhiều tài nguyên hơn ứng dụng cần, thêm nữa là boot chậm.
Docker chia sẻ lõi hệ điều hành giữa các bộ chứa và chạy như những tiến trình riêng lẻ trên hệ điều hành chứa nó.
Cài đặt Docker trên Ubuntu 14.04
Để dùng Docker trong Ubuntu 14.04 ta tải và cài đặt gói docker.io như sau :
$ sudo apt-get update
$ sudo apt-get -y install docker.io
Sau khi cài đặt xong docker, ta tạo đường dẫn tượng trưng để có thể gọi docker trực tiếp trong cửa sổ lệnh terminal :
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
Kiểm tra phiên bản docker cài đặt :
$ sudo docker version
Thử chạy chương trình hello world với docker để kiểm tra
$ sudo docker run hello-world
* docker run là lệnh chạy một bộ chứa.
* hello-world là một hình ảnh mà bạn chạy. Ở đây là hình ảnh của ứng dụng hiển thị dòng chữ "Hello world". Khi bạn chỉ định một hình ảnh trong dòng lệnh này, đầu tiên Docker sẽ tìm hình ảnh này trên Docker host của bạn. Nếu hình ảnh này chưa có trên máy, nó sẽ được kéo xuống (pull) từ public image registry tức Docker Hub
* Dòng lệnh trên đơn thuần hiển thị "Hello world" rồi kết thúc.
Nếu chương trình chạy hiển thị không lỗi thì việc cài đặt docker hoàn thành.
Lệnh khởi động và tắt docker :
$ sudo start docker
$ sudo stop docker
Để tránh dùng root user (tức khỏi gần gõ sudo trước docker), ta tạo nhóm docker và thêm người dùng vào nhóm vì người dùng trong nhóm docker có cùng quyền như root user :
$ sudo usermod -aG docker <username>
Thay thế <username> bằng người dùng muốn thêm vào chẳng hạn :
$ sudo usermod -aG docker toan
Kích hoạt việc thêm nhóm này :
$ newgrp docker
Kiểm tra việc thêm nhóm này thành công hay không bằng cách dùng docker không cần phải gõ thêm sudo đằng trước lệnh :
$ docker run hello-world
$ docker -v
$ docker version
Đôi khi cần reboot để việc cập nhật này thành công
Tham khảo về việc cài đặt Docker trên các phiên bản Ubuntu khác tại đây :
https://docs.docker.com/install/linux/docker-ce/ubuntu/
Các lưu ý sau khi cài đặt Docker trên Ubuntu nếu nó không hoạt động :
https://docs.docker.com/install/linux/linux-postinstall/
Tham khảo :
https://docs.docker.com/engine/reference/commandline/docker/
Ví dụ dùng bộ chứa docker để chạy php7cc (PHP 7 Compability Checker)
Khi ta muốn chuyển một ứng dụng PHP dùng phiên bản cũ lên phiên bản PHP 7, ta cần phải cập nhật mã của ứng dụng cho tương thích với PHP 7. PHP7cc (PHP 7 Compatibility Checker) giúp ta làm việc này.
Ứng dụng này sẽ phân tích các tập tin php và thông báo cho ta các chỗ cần chỉnh sửa dưới dạng các warning (màu vàng) hoặc error (màu đỏ). Nó cũng cho biết các lỗi cú pháp có trong mã nguồn.
Tham khảo dự án php7cc tại đây :
https://github.com/sstalle/php7cc
Thay vì tải về, cài đặt và dùng ứng dụng này, ta sẽ dùng một bộ chứa docker để xài một hình ảnh docker của ứng dụng được tạo sẵn tại đây :
https://hub.docker.com/r/ypereirareis/php7cc/
Ta chỉ việc dùng bộ chứa docker để xài ứng dụng php7cc đã được cài đặt sẵn (tiết kiệm cho ta việc tải ứng dụng này về và cài trên máy) với cú pháp sau :
$ docker run -it --rm -v $(pwd):/app ypereirareis/php7cc php7cc <path to source to verify>
* -t flag (--tty) gọi một pseudo-tty hoặc terminal bên trong bộ chứa.
* -i flag (--interactive) cho phép thực hiện kết nối tương tác bằng cách thu nhận standard input (STDIN) của bộ chứa.
* -v flag (--volume) gắn và tạo một volumn.
* -rm flag tự động xóa bộ chứa một khi thoát tiến trình (process). Mặc định, bộ chứa không bị xóa và nó tồn tại khi ta giữ shell session và kết thúc khi ta ra khỏi session
thay <path to source to verify> bằng đường dẫn tới thư mục chứa mã nguồn cần kiểm tra tính tương thích với PHP 7, chẳng hạn :
$ docker run -it --rm -v $(pwd):/app ypereirareis/php7cc php7cc ./src