Hỏi về cách triển khai product bằng docker

Xin chào cả nhà,
Mình đang học docker, mình đã hiểu và biết viết docker file và docker-compose. Tới đây mình hơi thắc mắc. Ví dụ mình phát triển product và muốn bán nó cho khách hàng và để họ tự triển khai docker image thì làm sao khi mình sử dụng nhiều service (rabbitMQ, postgres…) với mỗi service là một container.
Mình học docker build -> save ra image thì chỉ save 1 container / 1 image thôi. Mình khá thắc mắc, không lẽ mình muốn dùng nhiều service thì mình đưa khách hàng n image sao ?
Mình nghĩ có cái cách kiếm 1 image base (ví dụ ubuntu 18) sau đó cài đặt mọi thứ cần thiết lên trên đó rồi xuất ra image ném cho khách hàng. Cơ mà thế thì thấy hơi đụt với docker thì phải :dizzy_face:
Correct me if i’m wrong :nerd_face:

Hì hì, thực ra cậu có thể tạo ra nhiều container từ 1 image đó @hoalaxanh123 :sweat_smile:

Ừ cậu. Nếu cậu đang dùng microservice, với mỗi service, cậu cần có 1 image riêng.
Cơ mà, cái cậu đưa cho khách hàng là Dockerfile, chứ không phải image, đúng không? :smile:

Hm… Cậu có thể mô tả nó rõ hơn không? Tớ chưa hiểu lắm ý của cậu.
Nếu cậu có ví dụ cụ thể thì tốt quá! :smile:

Ừ, thường cậu xây dựng image mới cho service bằng cách lấy 1 base image, sau đó cài đặt mọi thứ cần thiết lên đó. Mọi người đều dùng cách đó mà :smile:
Cậu chỉ cần cung cấp Dockerfile đó thôi, khách hàng nên tự build image ra được.

2 Likes

Bạn tìm hiểu về https://docs.docker.com/registry/

1 Like

ừa, cái này mình biết, cơ mà lưu nhiều container, mỗi container là một service á thì mình chưa biết cách. Mình vẫn đang học nên có lẽ thiếu sót phần nào đó.

Mình thắc mắc nếu trong trường hợp khách hàng chỉ muốn 1 image để họ run là xong thì phải mần sao á.

Có lẽ mình dùng từ service nó không đúng lắm. Ví dụ mình làm 1 ứng dụng cần postgres, rabbitMQ và flask. Lúc này rabitMQ và postgres thì mình lấy image chính chủ về chạy, còn flask thì mình có thể lấy image ubuntu 18 làm nền. Vậy là lúc này mình có 3 image và cơ bản sẽ có 3 cái container. Hiện tại mình biết cách viết dockerFile và docker-compose cho cái này rồi. Mình thắc mắc trong trường hợp mà mình phải xuất ra 1 image duy nhất ấy thì mình phải mần sao á. Hiện tại mình lấy 1 base image rồi cài các service lên đó. Cơ mà thế thì mất cái tiện lợi của docker rồi, với cả 1 số image chính chủ họ tối ưu cho hịn hò mình sẽ không có được hoặc mất công để có được( ví dụ như postgres á image của họ có sẵn cân bằng tải luôn).
Mình mới đang học và nghĩ ra cái viễn cảnh thế này thôi. Chả biết đi làm họ làm sao ta. Với cả họ đẩy image lên docker hub nữa, trên đó cũng chỉ 1 image thui phải hem. :kissing:

3 Likes

Cái này mình chưa học tới. Cảm ơn bạn đã gợi ý, mình mò thêm học thêm.

2 Likes

Sửa cho mình nếu mình sai nhé.
Mình tìm hiểu thì nó là nơi lưu các image và ví dụ tiêu biểu là public registry: docker hub. Chúng ta cũng có thể triển khai một private nội bộ.
Nếu ý trên của mình đúng thì nó đâu có liên quan gì tới câu hỏi của mình đao ?

Ohm, cậu làm được việc đó với docker-compose đó :smile:
Trong docker-compose, cậu sẽ liệt kê các service, và định nghĩa mối quan hệ giữa các service đó.

Uhm, cậu sẽ viết dockerfile và mô tả cài đặt giống như cách cậu cài trên local machine thôi :smile:
Tuy nhiên, khả năng rất thấp là cậu sẽ nhận được yêu cầu “dở hơi” đó. Nó giống như cậu dùng 2 cái búa như dùng đũa gắp cơm, thay vì đi đập cái gì đó :sweat_smile:
Khi dùng docker, họ nên muốn tạo ra các container độc lập, làm một nhiệm vụ, hơn là tạo 1 container làm tất cả mọi thứ ha.

Uhm, trong TH đó, cậu nên dễ dàng tìm được Dockerfile của postgres, rabbitMQ trên docker hub, rồi gộp nội dung của 3 thứ đó với nhau và cài flask lên đó.
Dĩ nhiên nó đi ngược lại lý do mà cậu dùng docker rồi :sweat_smile:

4 Likes

mình đang làm 1 dự án microservice và có deploy các service lên docker thì làm như này:

  • Mỗi service mình sẽ có 1 docker file và ở root project sẽ có file docker-compose.yml liệt kê các service với đường dẫn tới docker file đó.

  • Khi deploy thì mình chỉ cần chạy câu lệnh: “docker-compose up -d” nó sẽ build các docker file kia thành các image các service sẽ run dưới dạng 1 group.

2 Likes

Mình có hiểu và mần được giống bạn rùi. Chỉ là mình thấy docker compose hay docker file bản chất nó định nghĩa các service và các mỗi quan hệ service đó sau đó khi dùng lệnh up nó sẽ tạo ra các container tương ứng. Mình có hiểu. Mình muốn học hỏi thêm nếu trong trường hợp mà mình muốn build ra 1 image thì mần sao ngoài cách dùng một base image làm nền rùi cài các thứ mình cần lên đó á. Cũng được bạn và mọi người chỉ giáo nên mình cũng hiểu hơn rùi.
Cơ mà mình dùng 1 image nền, sau đó cài docker trong image đó rùi quất service trong đó được không ta. Như vậy khi mình build ra image thì nó vẫn chỉ có 1 á. Mình nghĩ nó sẽ nặng. Không biết có vi phạm gì không hì

Cảm ơn library nhé. Cách giải thích của bạn khiến mình rất mến bạn :smiling_face_with_three_hearts::smiling_face_with_three_hearts:

2 Likes

Sorry mình đọc thiếu. Bạn up tất cả image của mình lên server và đưa file docker-compose cho khách hàng. Thực tế triển khai docker đa phần là ở múc độ hệ thống nên sẽ không có những yêu cầu dị.

1 Like

1 image thì run dockerfile là xong.
Nhiều image thì run docker-compose là xong.
Không có khác biệt gì nhiều về thao tác.

Giống như bạn dưới đây đã nói

Muốn sử dụng nhiều service nhưng chỉ muốn tạo 1 image, thì chỉ có cách là cài toàn bộ service lên 1 base image.
Còn vẫn muốn tách riêng các service nhưng lại chỉ muốn 1 image, thì cái cần sửa ở đây là suy nghĩ của khách hàng, chứ không phải tìm cách đáp ứng cái yêu cầu sai trái đó.

4 Likes

Có lẽ thớt làm việc với khách hàng cuối nhiều nên ám ảnh yêu cầu khách hàng thôi. Còn triển khai dịch vụ trên server thường bên khách hàng sẽ là đội quản trị hạ tầng server phần việc là cấp máy, cài HDH và cấu hình mạng. Còn cài gì do bên mình triển khai khách hàng thường không có ý kiến và tài liệu triển khai thì cấp gì dùng nấy. Tuy nhiên nếu đem cài cho người dùng cuối kiểu cài nội bộ lên máy thì cần xem lại.

2 Likes

Kk viễn cảnh mình nghĩ ra thôi à. Cảm ơn mọi người nhiều nhé.
Nhờ mod close topic nhé.

Chân thành cảm ơn cả nhà.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?