Chia Sẽ Kinh Nghiệm Về IT



Tìm Kiếm Với Google
-


Gởi Ðề Tài Mới  Gửi trả lời
 
Công Cụ Xếp Bài
Tuổi 15-01-2016, 12:26 AM   #1
hoctinhoc
Guest
 
Trả Lời: n/a
Docker Bài 6: Tôi đã dùng Docker như thế nào?
Bài 6: Tôi đã dùng Docker như thế nào?

Tham khảo: http://kipalog.com/posts/Toi-da-dung-Docker-nhu-the-nao

Ngày nay, các công cụ như Docker hay Vagrant rất hay được nhắc đến trong giới công nghệ, đặc biệt, đây là các công cụ cần thiết cho mọi Devops.
Nhưng đó là việc của bọn Devops, còn đối với chúng ta, những developer chân đất, sáng ngậm đắng (cà phê), tối nuốt cay (bia rượu), buổi trưa ngồi code thì có cần quan tâm không?
Xin thưa là có. Bất cứ một công cụ nào sinh ra cũng cần có người xài, và bất cứ ai cũng có thể xài.










Đứng ở phương diện của một Developer, chúng ta có thể sử dụng Docker và Vagrant để thiết lập môi trường ảo cho một dự án nào đó, mà không cần tốn quá nhiều công sức cài đặt hoặc làm ảnh hưởng tới máy tính hiện tại. Làm thế nào để sử dụng? Làm thế nào để tạo môi trường ảo, và vì sao phải làm như vậy? Xin mời các bạn đừng hỏi nữa, cứ đọc tiếp.


Disclaimer: Bài viết sau có đề cập đến project của một thành viên của Kipalog nhưng không hề có sự móc nối, PR hay mối tư thù nào giữa tác giả và thành viên này cả


Disclaimer #2: Để tiện cho việc theo dõi bài viết, các bạn không cần có chút khái niệm nào về Docker, nhưng cần cài đặt sẵn nó trên máy tính. Sau bài viết này các bạn sẽ dùng được Docker để làm các công việc đơn giản của một Developer, và có kiến thức nền cơ bản để tìm hiểu sâu hơn về công cụ này. Bài viết sẽ không đề cập tới chuyện so sánh giữa Docker và Vagrant tuy nhiên các bạn có thể comment bên dưới để thảo luận về vấn đề này.



Disclaimer #3: Dành cho bạn nào chưa biết về Github, đây là một "mạng xã hội" dành cho các Developer, dùng để chia sẽ các dự án mã nguồn mở. Một người tạo project trên đó, up source code của mình lên, các developer khác nếu thích có thể tham gia đóng góp vào project (fix bug, thêm chức năng, sửa code, review code,...), và hoạt động này gọi chung là Contribute, người đóng góp được gọi là Contributor.
Một contributor muốn contribute cho một project nào đó trên Github thì chỉ việc Fork project đó về, sửa rồi commit, sau đó tạo Pull request để người chủ project biết và sử dụng bản fix của bạn vào project của họ.
Nếu cảm thấy project hay ho, có thể đánh bấm nút Star để "like" cho project đó.
Nếu có một project đạt được nhiều stars trên Github thì người developer đó sẽ cảm thấy rất "sướng" giống như mấy bạn hot gơn muốn có được nhiều like trên Facebook vậy.
Trở thành contributor của một project nhiều sao (stars) cũng rất "sướng".
Các developer thời nay cũng sống ảo chả khác gì các em hot gơn cả, các bạn ạ...
Chuyện kể rằng...

Buổi sáng hôm đó, trời nắng đẹp và se lạnh. Sau khi đánh một giấc đã đời trên xe bus, chàng developer cần mẫn lếch xác vào công ty, việc đầu tiên anh làm là mở máy tính lên và đọc báo, lướt facebook, github,...
Tình cờ trông thấy ông @huydx vừa tạo một project mới trên github (cái này https://github.com/huydx/scalresume)
Tò mò vào xem thử, hoá ra lão ấy viết bằng Scala. Tính bỏ qua rồi nhưng cũng muốn contribute chút gì đó cho cái project.
Thấy README.md của lão viết sơ sài quá, nảy ra ý định add thêm vài dòng hướng dẫn và screenshot cho nó hấp dẫn (đây cũng là cách để trở thành một contributor nhiệt tình trên Github, các bạn chú ý nhá).
Nhưng hồi nào giờ có làm Scala đâu, chả lẽ vì cái project bé tí này mà phải ngồi cài một đống tool vào máy, nào là Java, nào là Scala, SBT,... để build và chụp cho được cái screenshot sao Chưa kể có một đống dự án của công ty, chưa hoàn thành, ở trong máy, nếu rủi cài vài rồi hư máy thì biết ăn nói làm sao với sếp.
Giải pháp

Thế là nghĩ ngay đến chuyện dùng Docker.
Đối với các bạn chưa biết Docker là gì, thì đây là một công cụ tạo môi trường được "đóng gói" (còn gọi là Container) trên máy tính mà không làm tác động tới môi trường hiện tại của máy.
Một số developer thường tạo sẵn các môi trường này, và upload lên mạng để mọi người lấy về dùng, và mấy cái này gọi là các Images
Đại khái là sẽ làm thế này:
  • Dùng docker tạo một container chứa toàn bộ môi trường develop cần thiết cho Scala
  • Get project về và build, chạy thử
  • Chụp hình add vào README.md
  • Tạo pull request để đóng góp cho cái project này
  • Nghiễm nhiên trở thành contributor dù ko biết chút gì về Scala
Thực hiện

Bước 1: Tìm và tải image Docker cho Scala

Đầu tiên chúng ta cần tìm một image chạy Scala cho Docker. Bước này thì dễ thôi, có thể search trên Google với từ khoá:
Docker image for Scala Yeah, rất nhiều images, chọn đại cái kết quả đầu tiên trên Docker Hub: https://hub.docker.com/r/lukasz/docker-scala/
Docker Hub là nơi để mọi người upload, chia sẽ các images Docker của mình
Sau khi tìm ra image rồi, chúng ta tiến hành download nó về, bước này gọi là Pull, chúng ta gõ lệnh sau:
docker pull lukasz/docker-scala Với lukasz/docker-scala là tên của image. Tên này gồm 2 phần, phần đầu trước dấu xoẹt /, lukasz là tên thằng tác giả, và phần sau docker-scala là tên của image.
Dung lượng của image này hơi lớn một tí (1GB) nên có thể pull hơi lâu, các bạn có thể sử dụng mạng của công ty để quá trình pulling diễn ra nhanh hơn

Sau khi pull xong, các bạn có thể dùng lệnh sau để xem danh sách các images được pull về sẵn trong máy:
docker images Kết quả trả về như sau:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest 91e54dfb1179 6 weeks ago 188.4 MB lukasz/docker-scala latest 90b5825bae47 20 months ago 1.217 GB Như kết quả trên thì trong máy mình đang có 2 images: ubuntu và lukasz/docker-scala
Các images này các bạn chỉ cần tải về 1 lần và để đó dùng lại cho các lần sau được. Nên yên tâm về cái khoản chờ đợi. Trừ khi bạn buồn tình xoá chúng đi
Bước 2: Lấy code từ Github về

Trước khi tạo môi trường ảo để chạy, chúng ta sẽ lấy code từ Github về trước. Ví dụ mình lấy code về và lưu ở thư mục /Users/huy/Code
git clone https://github.com/huydx/scalresume.git /Users/huy/Code Bước 3: Tạo môi trường ảo Scala liên kết với thư mục Code

Bây giờ chúng ta sẽ tạo một môi trường ảo, còn gọi là một container sử dụng image Scala vừa pull về ở bước trên.
Container này liên kết với thư mục code hiện tại của chúng ta, và như thế chúng ta sẽ truy cập được vào thư mục code từ bên trong container.
Gõ lệnh sau:
docker run -v /Users/huy/Code:/src -it lukasz/docker-scala /bin/bash Ý nghĩa của câu lệnh trên:
  • docker run : lệnh tạo một container cho Docker
  • tham số -v /Users/huy/Code:/src: để liên kết thư mục /Users/huy/Code ở máy tính hiện tại, vào thư mục /src của container.
  • tham số -it lukasz/docker-scala /bin/bash: Để chỉ định images cần tạo là lukasz/docker-scala và tự động chạy lệnh /bin/bash sau khi khởi tạo xong, nhờ đó chúng ta sẽ truy cập được vào chế độ dòng lệnh của container và quản lý nó giống như một máy tính thông thường.
Bước 4: Sử dụng container để build và chạy code

Sau khi chạy lệnh run thì cửa sổ terminal của chúng ta thay đổi thành như thế này:
root@4cc671941ee3:/# Lúc này, bạn đã truy cập vào bên trong container docker-scala.
Thử gõ lệnh ls để liệt kê các thư mục hiện có:
ls Kết quả:
root@4cc671941ee3:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin selinux src srv sys tmp usr var root@4cc671941ee3:/# Giống y chang một máy tính Linux! Giờ chúng ta thử kiểm tra môi trường hiện tại xem, gõ lệnh:
scala Kết quả trên màn hình:
root@4cc671941ee3:/# scala Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51). Type in expressions to have them evaluated. Type :help for more information. scala> Như vậy, chúng ta hiện đang có Scala phiên bản 2.10.3 chạy trên nền Java 1.7.0_51
Bây giờ chúng ta có thể build và chạy thử ứng dụng Scala vừa lấy về từ Github và tiến hành Contribute cho nó. Về bước này, mình sẽ nói ở một bài viết khác, dài hơn
Để thoát ra khỏi môi trường ảo hiện tại, bạn chỉ cần gõ lệnh:
exit Tổng hợp (dành cho ai thấy dài quá ko đọc):

Pull một image từ Docker Hub
docker pull <image name> Tạo một container từ image có sẵn
docker run -v <thư mục trên máy tính>:<thư mục trong container> -it <image name> /bin/bash Lệnh trên tạo container, liên kết một thư mục trên máy tính vào bên trong container, và truy cập vào chế độ dòng lệnh của container đó.
Đối với các ứng dụng như web, container sẽ tạo một web server trên một cổng nào đó, khi đó chúng ta cần phải map cổng đó từ container ra máy tính ngoài, khi đó chúng ta dùng thêm tham số -p như sau:
docker run -v /abc:/abc -p 80:80 -it ubuntu /bin/bash Lệnh trên map cổng 80 của container ra cổng 80 của máy tính hiện tại.
Ngoài ra, Còn một số lệnh khác mà các bạn có thể dùng để quản lý Docker của mình:
Liệt kê các images hiện có
docker images Trong kết quả trả về của lệnh này, chúng ta lưu ý các thông số:
  • TAG: là tên của image, ví dụ lukasz/docker-scala
  • IMAGE ID: là ID của image lưu trong hệ thống, ví dụ 91e54dfb1179
Liệt kê các container đang chạy
docker ps Trong kết quả của lệnh này cũng có các thông số chúng ta cần lưu ý, đó là:
  • CONTAINER ID: Là ID của container đó, ví dụ 4cc671941ee3
  • NAME: Là tên riêng của container, được tạo ra một cách ngẫu nhiên hoặc có thể tự đặt, ví dụ stupefied_blackwell
Liệt kê toàn bộ các container đang chạy và đã tắt
Sau khi các bạn thoát khỏi container, nếu nó không còn chạy bất cứ một tiến trình nào nữa, thì nó sẽ tự động tắt, nhưng chưa hoàn toàn bị xoá, khi đó chạy lệnh docker ps sẽ ko thấy được. Để xem lại nó thì chúng ta dùng lệnh sau.
docker ps -a Khởi động và truy cập lại vào một container đã tắt
Nếu một container đã tắt (không xuất hiện khi dùng lệnh docker ps nữa, chúng ta có thể chạy lệnh docker ps -a để lấy ID hoặc NAME của nó, sau đó dùng lệnh sau để khởi động và truy cập lại vào đó)
docker start <ID hoặc NAME> docker exec -it <ID hoặc NAME> /bin/bash Xoá một container
Nếu một container đã hết giá trị lợi dụng, dù nó đã tắt nhưng nó vẫn chiếm một phần dung lượng trên máy tính, để xoá nó đi, chúng ta dùng lệnh rm
docker rm <ID hoặc NAME> Nếu container đang chạy, bạn cũng có thể xoá nhưng phải thêm tham số -f vào sau rm để force remove:
docker rm -f <ID hoặc NAME> Xoá một image
Cũng như container, nếu bạn đã ko còn nhu cầu sử dụng một image nào đó nữa, thì nên xoá nó đi, vì dung lượng nó khá là nặng, để lại chật máy. Dùng lệnh rmi (tức là remove image đó)
docker rmi <ID hoặc NAME> hoặc
docker rmi -f <ID hoặc NAME> Trên đây là một số thao tác sử dụng Docker đơn giản, đủ xài đối với 1 developer với mục đích sử dụng Docker làm công cụ tạo môi trường ảo.
Với các mục đích sử dụng khác, các bạn nên tìm hiểu kĩ hơn về Docker từ những kiến thức cơ bản trong bài viết này.
Happy Dockering ^^
  Trả lời ngay kèm theo trích dẫn này
Gửi trả lời


Công Cụ
Xếp Bài

Quyền Hạn Của Bạn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Hình Cảm xúc đang Mở
[IMG] đang Mở
Mã HTML đang Tắt




Bây giờ là 10:44 PM. Giờ GMT +7



Diễn đàn tin học QuantriNet
quantrinet.com | quantrimang.co.cc
Founded by Trương Văn Phương | Developed by QuantriNet's members.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.