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:
-
- 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
- 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 😀