Docker

Học deploy docker container đầu tiên trong đời lập trình

Deploying Your First Docker Container

Trong bài này, tôi xin giới thiệu cách deploy 1 container đầu tiên trong đời lập trình của mình, dĩ nhiên cũng phải đi tham khảo rồi

Khi làm web, có rất nhiều ứng dụng mà ta cần ứng dụng, ví dụ như Redis, một dịch vụ dùng để cache hoặc làm gì thì tùy các bạn sử dụng. Có 2 cách chúng ta có thể dùng Redis:

    1. Tự cài, tự cấu hình, theo các bài hướng dẫn trên mạng, như https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04
    2. Dùng docker (cái này mình sẽ dùng trong bài viết này)

Ưu điểm của việc dùng Docker cho cài đặt sẽ giúp bạn nhanh hơn, không dùng nữa thì xóa đi cũng không ảnh hưởng đến những phần khác trên host

Nếu các bạn chưa cài docker thì có thể đọc bài này trước https://khongbietcode.com/c/docker/cai-dat-va-su-dung-docker-tren-ubuntu-18-04/

OK cài đặt xong rồi thì tiếp

Chúng ta bắt đầu với 5 bước đơn giản như sau, dễ vãi ra :

Bước 1: Tìm và chạy 1 Container 

Việc đầu tiên, chúng ta xác định tên của Docker Image mà chúng ta muốn chạy, ở đây tôi muốn chạy Redis. Với Docker, tất cả các container được bắt đầu dựa trên Docker Image. Các image này chứa tất cả các cấu hình cần thiết, nó độc lập với cấu hình của host bạn đang dùng, nên bạn sẽ không phải cấu hình gì trên host nữa.

Dể tìm kiếm image cho Redis, bạn có thể dùng command

docker search redis

Sử dụng lệnh trên, bạn sẽ xác định được Redis Docker Image là redis và chạy nó với bản mới nhất được release, Vì Redis là database, nên bạn sẽ muốn nó chạy như một service ngầm trong khi bạn xây dựng ứng dụng.

Docker CLI có lệnh  run để chạy các container được dùng từ Docker Image. Các bạn dùng lệnh sau docker run <options> <image-name>

Mặc định thì Docker sẽ chạy lệnh trên trước khi dùng ứng dụng với Redis, để sử dụng Redis như một dịch vụ ngầm (background) ta sử dụng option -d trong câu lệnh trên

docker run -d redis

Mặc định, Docker sẽ lấy phiên bản mới nhất, nếu bạn yêu cầu cụ thể 1 version nào đó thì sẽ được chỉ định như sau docker run -d redis:3.2

Bước 2: Xem các Containers đang chạy 

Các container đang chạy ngầm, để list những container đang chạy và những image được sử dụng để khởi động container chúng ta dùng docker ps

Các bạn thấy ở đây, sau bước 1 cài đặt, chúng ta có 1 container đang chạy, và đang dùng với image redis, nếu các bạn có nhiều hơn 1 dịch vụ, nó sẽ được liệt kê ra.

Chúng ta có thể dùng docker inspect <friendly-name|container-id> để thấy thông tin chi tiết hơn của container đang chạy

Ngoài ra lệnh docker logs <friendly-name|container-id> sẽ giúp ta hiển thị mesage log.

Bước 3: Truy cập Redis

Thật tuyệt vời, cài xong, biết nó có đang chạy hay không xong rồi :D, vậy bây giờ thì truy cập nó thế nào?

Mỗi container của chúng ta là 1 cái hộp (sandboxed) độc lập, cấu hình trong hộp này không liên quan gì đến host của chúng ta, và vì nó chạy độc lập nên nếu 1 dịch vụ cần truy cập bởi 1 quá trình không phải trong container (chẳng hạn muốn update dữ liệu vào redis), thì các bạn cần chỉ định port kết nối được phép dùng thông qua Host

Mặc định Redis chạy qua cổng 6379

Port trên host và port trên container được ràng buộc khi ta dùng -p <host-port>:<container-port> , ngoài ra chúng ta dùng –name để đặt tên cho container khi ta dùng

docker run -d --name redisDynamic -p 6379:6379 redis:latest

Nôm na cho các bạn mới dùng hiểu, thì ở đây khi ta truy cập 127.0.0.1:6379 thì tức là ta đã kết nối để dùng dịch vụ với Redis, giống với việc bạn dùng php mà config kết nối với mysql cổng 3306 vậy, chúng ta đặt trùng cổng 6379 để dùng như dịch vụ bạn cài trên host mà không phải dùng docker, nếu bạn đổi 6300:6379 thì tức là 127.0.0.1:6300 sẽ sử dụng dịch vụ Redis bạn đang cài, 6379 là cổng trên container của bạn.

Vấn đề xảy ra khi chạy trên port được chỉ định sẵn của host, sẽ làm bạn chỉ có thể chạy được 1 instance, bạn muốn chạy nhiều Redis instance và cấu hình ứng dụng dự trên port mà Redis đang chạy (trên container), vậy chúng ta chỉ cần sử dụng -p 6379 để cho phép các cổng kết nối tới Redis 1 các ngẫu nhiên

docker run -d --name redisDynamic -p 6379 redis:latest 

Trong khi làm việc, chúng ta sẽ không biết port nào đang được gán sử dụng, thật đơn giản, để tìm ra nó ta dùng

docker port redisDynamic 6379

và sau đó chúng ta có thể xác định được bằng docker ps

 

Bước 4: Persisting Data 

Dữ liệu được lưu trữ trên container, vì vậy khi bạn delete hay tạo lại container, dữ liệu sẽ bị mất. Các bạn có thể dùng -v để sử dụng thư mục trên host để lưu trữ dữ liệu và sử dụng trên container, trong docker thì chúng ta biết đó được gọi là volumes-v <host-dir>:<container-dir>

Khi thư mục được gắn kết như vậy, các file tồn  tồn tại bên trong host có thể được sử dụng bởi container, và bất cứ thay đổi nào diễn ra trong container cũng sẽ được lưu trữ trên host. Như vậy khi ta update hay thay đổi container sẽ không bị mất dữ liệu

docker run -d --name redisMapped -v /opt/docker/data/redis:/data redis

Docker cho phép sử dụng $PWD để xác định thư mục hiện tại.

Bước 5: Thực thi bên trong container

Để thực hiện trực tiếp các lệnh bên trong container, bạn sử dụng -it

docker run ubuntu ps câu lệnh này chạy container Ubuntu và thực hiện câu lệnh ps để xem toàn bộ process bên trong container

docker run -it ubuntu bash cho phép bạn truy cập trực tiếp vào container ubuntu.

Mấy bước trên các bạn gõ 10 phút là xong.

Chúc các bạn thành công. Cảm ơn các bạn đã theo dõi 😀

Leave a Reply

Your email address will not be published. Required fields are marked *

Close