Docker cho người mới bắt đầu (P3)

Bài viết giả sử bạn đã đọc phần 1phần 2 trong loạt bài viết của mình rồi.

Phần này, mình sẽ cùng build 1 image cho riêng mình.

Image chạy rails app, nhưng mình nghĩ cũng không ảnh hưởng gì nếu bạn chưa từng làm việc với rails 🙂

Bài này mình dùng docker trên mac, cũng không khác ubuntu là mấy 😛

Lưu thay đổi trên image sẵn có

Khi bạn chạy 1 container lên, bạn cài thêm 1 vài phần mềm, tiện ích vào đó, hay đơn giản chỉ là muốn lưu công việc lại để bữa sau làm tiếp, bạn có thể dùng lệnh commit:

Vd mình chạy 1 ubuntu, cài rubyvim vào, sau đó lưu lại:

Làm kiểu này thấy nó cứ thổ dân sao sao ấy!?!
Đúng rồi, thực tế cách này chỉ là biện pháp nóng, kiểu mì ăn liền thôi, còn để tạo 1 image thực thụ, docker cung cấp Dockerfile

Dockerfile

Là file định nghĩa tất cả những gì sẽ có trong image của bạn.
Trước khi tiếp cận với Dockerfile, ta cần 1 vài thao tác chuẩn bị.

Tạo 1 rails app

Cái rails app này lát nữa sẽ chạy trong image của mình, bạn chỉ cần làm theo thôi, môi trường để tạo được rails app thì mình tin bạn là dân kỹ thuật cả, chắc chỉ cần 5-10 phút là có thể cài được cho máy của bạn.

Đến đây là khởi động được rails server trên máy local của bạn rồi, bạn có thể truy cập vào localhost:3000 để thấy kết quả.

Tạo Dockerfile

Vẫn ở thư mục gốc của demo, bạnt ạo file Dockerfile với nội dung:

Bạn để ý mỗi dòng thường bắt đầu bằng 1 chữ IN HOA (FROM, RUN…) đó là các từ khoá của Dockerfile, docker sẽ dựa vào các từ khoá này để build image cho bạn, cùng soi nó kỹ hơn 1 chút nào:
– Dòng 1: FROM ubuntu:14.04 chỉ ra rằng image của mình sẽ dùng ubuntu:14.04 image làm nền.
– Dòng 2: tương tự dòng 1, tức là image của mình sẽ được cài sẵn ruby:2.3
– Dòng 4,5,6: lệnh RUN tức là sẽ chạy mấy lệnh đó sau khi container được khởi động. Cụ thể ở đây mình sẽ thiết lập môi trường để chạy được rails app
– Dòng 8: tương tự trên kia thôi.
– Dòng 9: WORKDIR cái tên nói lên tất cả rồi đúng không 😀 Nhưng mình muốn nói thêm 1 chút là WORKDIR nghĩa là sau này, những lệnh như RUN, COPY hay ENTRYPOINT sẽ làm việc tại đây.
– Dòng 11: chép 2 file cần thiết của rails app vào WORKDIR mà mình đã chỉ định ở trên á.
– Dòng 12: tiếp tục cài đặt môi trường cho rails thôi.
– Dòng 14: copy mã nguồn của rails app, trong bài viết này là thư mục demo vào thư mục /app trong container.
– Dòng 16: EXPOSE 3000: mặc định rails sẽ chạy ở cổng 3000, nên mình mở cổng 3000 của container ra để lát nữa mình có thể truy cập từ bên ngoài (host – tức là máy local của mình á)
– Dòng 18: Chạy rails server lên thôi.
Thông tin thêm về các từ khoá của Dockerfile mình sẽ dẫn link ở cuối bài viết.
Có được Dockerfile rồi thì mình có thể build image được rồi.

Build image

Cú pháp:

Lệnh dưới sẽ build một image từ file Dockerfile ở thư mục hiện hành, image có tên và tag là demo:1.0 (-t là tag).

Lệnh trên sẽ show ra rất nhiều thông tin về tiến trình build image, với Dockerfile của mình thì nó sẽ gồm 10 bước tất cả. Bạn có thể xem full log của mình tại đây.

Sau khi có image rồi thì chạy container lên thôi :-”

Chạy container

Tham số -it thì bạn biết rồi, còn -P là để mở tất cả những cổng được định nghĩa trong Dockerfile.

Truy cập vào rails app trong container

Liệt kê các container đang chạy:

Như thấy ở trên, cột PORTS, container của mình đang mở cổng 3000 và trỏ (NAT) đển cổng 32768, tức là mình có thể truy cập vào thông qua cổng này.

Với ubuntu, bạn chỉ cần truy cập: http://localhost:32768 là vào được rails server, còn Mac thì hơi khác 1 chút.
Nếu ở ubuntu bạn không truy cập được thì đọc thêm phần dành cho Mac ở dưới

Truy cập trên Mac

Mặc định, docker-machine trên mac nó không chạy ở localhost, mà nó dùng IP của máy ảo VM mà nó chạy.

Liệt kê các máy ảo của bạn đang có:

Ở máy mình, mình đang active VM có tên là default và nó chạy ở địa chỉ: 192.168.99.100 – hay còn gọi là DOCKER_HOST.

OK, có DOCKER_HOST rồi, truy cập vào 192.168.99.100:32768 để tận hưởng thành quả.
Screen Shot 2016-05-04 at 23.03.30
Phù, tới đây là tương đối mệt rồi đó, hẹn các bạn ở phần tiếp theo 🙂

À quên, link:
Dockerfile reference

Lập trình và hơn thế nữa

Spread the love
  •  
  •  
  •  
  •  
  •  

Leave a Reply

8 Comments on "Docker cho người mới bắt đầu (P3)"

Notify of
avatar
Sort by:   newest | oldest | most voted
Anonymous
Guest

Ví dụ mình có MySQL chaỵ trên docker1, Rails app chạy trên docker2 connect vào database trên docker1 thì làm thế nào?

Anonymous
Guest

Mình cũng đang tìm hiểu về anh Docker này !
Bài viết rất hay và dễ hiểu !
Mong bạn dành thời gian viết nhiều bài hơn !

trackback

[…] đã làm quen được với Docker Engine và tương tác được với image,container. Trong bài tiếp theo, mình sẽ đi sâu hơn về build 1 image cho riêng mình và chia sẻ nó quaDocker Hub, […]

thuvt
Guest

đang lam đồ án về docker hy vọng bạn sẽ ra phần mới thanks so much

trung
Guest

hy vọng ra phần mới ! bài viết rất hay và dẽ hiểu ^^

Co Nhon
Guest

Sao chua co phan 4 anh zai?

Duc Nguyen
Guest

không viết bài nữa hả author???