Docker[101] [4] Understand, Run, Debug

09 Sep 2020

Docker[101] [4] Understand, Run, Debug

Giờ là 3 giờ sáng, thật ra đầu óc mình tầm này chắc không ổn lắm, nhưng mà ngủ không được nên viết tiếp. Dù sao thì mấy cái này viết cũng vui. Bắt đầu thế nào nhỉ. Thôi thì góc nhìn về container trong phần này đi. Cái gì cũng vậy, từ đặc tính sinh ra cách sử dụng mà cách sử dụng thì có ưu có nhược, việc container được áp dụng cũng thế. Nó đã sinh ra rất nhiều thứ và định hình ra cung cách sử dụng của chúng ta với container.

#Vấn Đề Một!

So với máy ảo thì container nhanh hơn rất nhiều, nhẹ hơn, khởi động hay xoá bỏ đều rất ưu việt, điểm này đã được đẩy lên tận cùng bằng nhiều cách để rồi container trở thành một loại cấu trúc mà khi nhìn vào nó ta thấy sự tuỳ biến cao, scale dễ dàng, động và thêm một thứ nữa đó là tính không bền. Chúng ta dễ dàng làm mới hay xoá bỏ đồng nghĩa với việc những thứ chạy bằng container rất dễ mất nếu không quản lý đúng cách.

Điều này dẫn tới việc để thật sự áp dụng container vào môi trường production chúng ta phải biết tách biệt các phần mà dữ liệu của nó không được phép biến mất, trong một hệ thống db chẳng hạn bạn sẽ phải tìm hiểu xem file nào thật sự là khu vực lưu trữ thay đổi dữ liệu db. Hay đơn giản trong một hệ thống file code bạn sẽ cố định những phần liên quan tới file định nghĩa môi trương (.env) hoặc logs. Điều này sẽ giúp việc khi chúng ta sửa đổi thông tin container hay update nó những phần dữ liệu chính vẫn tồn tại và được sử dụng đi sử dụng lại không biến mất khi sự cố sảy ra. Thứ này hiểu là persistent storage hay đưoợc gọi dưới tên volume.

#Vấn Đề High!

Container thật sự hoạt động ra sao, nó lưu trữ ở đâu và thứ gì đã tạo nên container. Đây là điều mà mình cho là cần thiết để hiểu một hệ thống. Chứ nếu cứ vứt cho mọi người một cái hướng dẫn sử dụng thì ok thôi, nhưng rồi đào tạo ra một lũ ngơ cả.

Container là một ý tưởng với rất nhiều đầu tư về công sức. Ai cũng nghe về việc Container chạy chung nhân rồi, nhưng mà chạy chung nhân thế nào? .

Linux sau một thời gian dài đã đẩn ra 2 thứ Cgroup và Namespace.

X) Cgroup (Control Groups) quản lý các nhóm con hay nói trắng ra là bạn có khả năng tạo các group với giới hạn khả năng sử dụng nền tảng phần cứng của máy. Thứ này tất nhiên là không phải nhân kernel mà là một tính năng hỗ trợ cho user space để chúng ta có thể phân cấp cũng như cấp phát phần cứng. Mỗi process trong docker bạn đều có thể view nó dưới dạng máy host.

systemd-cgls

Đây là các process trong các container của mình. Đại khái bạn hiểu cgroup là về phần cứng, cấp phát đo lường và giới hạn tài nguyên.

X) Namespace sẽ tách biệt khả năng view dựa theo UID, và quan trọng nhất là việc tạo ra network để biến các container có thể truy cập hay tạo ra môi trường microservices thật sự. Từ khoá để xem một hệ thống mạng của container trong linux tạo ra sao các bạn có thể search “Network Namespace” hay cao hơn là CNI để nhìn tổng quan các hệ thống quản trị container orchestration.

#Rồi! Container chạy ra sao.

Mấy thứ trên là những thứ bạn cần tư duy trước khi tìm hiểu và sử dụng container. Giờ chúng ta sẽ cùng sử dụng container. Một container đơn giản. Đoạn này chú tâm chút, vì demo thì ít nhưng mình giải thích sẽ là phần nhiều.

Đầu tiên mình sẽ chạy một container centos.

Tiếp theo chúng ta sẽ kiểm tra xem container centos đã được chạy hay chưa.

Rồi trống trỗng, khi chạy lệnh “docker ps“. docker ps trả về các container đang chạy. Giờ chúng ta sẽ chạy “docker ps -a” để hiển thị tất cả các container cả những container đã stop.

Và đây, nó đây rồi, container centos của chúng ta. Câu hỏi là tại sao chúng ta chạy một image nhưng sau đó nó dừng ngay lập tức?

Docker luôn cần lệnh của bạn hay nói cách khác là một process để nhận biết bản thân cần phải chạy, do đó nếu process kết thúc container sẽ ngay lập tức stop và tạm dừng container. Vậy để giải quyết vấn đề này nếu container là do bạn tự xây dựng bạn phải khởi chạy nó từ ngay giai đoạn bắt đầu container. Ví dụ

docker exec -i -t centos /đường_dẫn_app Và như thế thì container của bạn sẽ chạy.

Ok đây là một ví dụ về việc container thật sự đã chạy nhưng ngay sau đó kết thúc vì lệnh done. Mình đã run image centos dùng sh để in ra a và b. Tất nhiên là sau đó container stop vì lệnh này không loop.

Rồi liệt kê lại các thứ. Bây giờ chúng ta có thể phân tích lệnh run đầu tiên rồi.

#Tiếp theo, tương tác với container.

đây là một phần của đống container mình đang chạy.

Vậy thì làm sao để tương tác với một container. Đơn giản là chúng ta dùng câu lệnh “docker exec”

Truy cập vào một container bằng bash. Khi vào tới đây các bạn tương tác như việc can thiệp vào một máy ảo linux bình thường. Tiện thể thì mình không dậy linux, nên là mò đi.

#Đọc logs của container.

Trò trẻ con. Để đọc logs mà debug thì các bạn dùng cho mình lệnh “docker logs”

log đơn giản của một image nginx. Đúng rồi, trèo vào tới đây rồi thì chịu khó mà lần mò đọc logs debug =)) không ai dạy debug đâu.

…………..

Đấy, cái lệnh chính để tương tác với cái container nhỏ nhoi của bạn chỉ có từng đấy, vì mình lọc hết phần network rồi. Trên đây chỉ là cách truy xuất theo dõi và tự tìm hiểu bug thôi. Thân làm devop thì đừng mong có tool debug như các bạn dev ngôn ngữ may mắn, tự tưởng tượng luồng hệ thống nhá bạn nhỏ.



/sw-load.js?v=e5ae5a1ed170f4499ac6292e7164b68528c51f6d6518cd75a49e6a6b737831d5728da21fc14dcbc7a91328e53858c6ff7195cc3fc8b25f0feeaef2af151d6686 /fireball.gif?v=569e393374f2af74d6c575090904aaf51e641e5eb5ea89ae7c7de01f7293abc165b3a7e8685690a8b951c778603fec98ae6822ff2f7ea86a536776966cb65d5d /favicon.ico?v=1a6495bbd14c74c75aa77e28420ce82a63372b28cd38c952b98403d8d112a9f76589bea299982ca27048215e661245f9d07294bddee7da377aaee76eee70c622 /favicon-16x16.png?v=7267c6f502a03c1e4df9d8136dcc6cd9e67e0b9644941d22ed34e4fe747580f95a65f77a183bb967c1ec60eecd0c298b2670d89a67a647391fb7d1501bcf0982 /favicon-32x32.png?v=5e23bffe691055b88067cbc8d11b96ce2a8dc5e25e49367803766a3cadbcfc7f05a62079bfa558d5e234c6a7455d21fc2960b196bda5cbd591bd4c2dbe67920d /icon-192x192.png?v=3820c1b1e6d755d2b7c2a04a65f0f1feef793b297f7ee995947137ccd8f73ec304457f6ce1df987a9a0a13ed7dacd203225505b832ccd2318b530ae53a55cebc /icon-512x512.png?v=de62ae905479fd813300d286ed1d2fe6bb6f6292623a5d918691642f6dd09a68943c69ed2a95a1820076919e69ff4fda668bb79e610ebc1d3200fedd7f634443 /apple-touch-icon.png?v=4718a090c66653794b3622234784e821a504ee526b6518f20cd10f6b27907566690892339830ede2ef9cb5fedb8a9796f02fb2610de868500c0720c1083013b7 /main.css?v=deafe9327da907780e2167b0c4b65cbafc26273324db10789fa06d4d9c2afced3cf2b5cb42a280190f42fc741f8a9c49bc830f0deb686be6acf12c3b0dbea86e /nerd-fonts.css?v=4b2ec75c55a664da78189dc20d4017cf5bc817cf3b60218a2446ba269ca4fd42c117352d5276363965f35fae32891efce751e0626b5281bae627f40d804a5679 /unstyle.css?v=b14bd48a2efbd463d973763aa3184c69aa02164c0891acacc9eab49ddd275f98f0050b4c31d2093e4671e7abe04f9459a041f0064384a90d97b8ff21b6824825 /langs.css?v=12474958ee314a9fde4704e1f5a032dc632d41f9461faca326ac284297766c4ceb07b45fec7fbc09fa72b0f21dcc64f0c31e64fc2e5e838b1d30f5fe540afd78 /syntax-theme-light.css?v=ccdddc2d2d88953c6d7d0376777b8409028ef625a7321dfa41619547b4f5eddbe89aa95ff5e7e2620da0ea13fbabebe2fd544620bc7e81e3294776b3425df48a /syntax-theme-dark.css?v=dfede4879841e4a58e5fc71115aa5f5b82e206d85eb771ff4e5a40a1d82621570aad2458f637365ae4370d9a1cf5070edc9765f7c2d4506e12e2ba3c6081ffd5 /sw-style.css?v=a0fa1e87fa2bb3e03d18cefc81ef5c8cfa58c6aa6eea0af223fa155e088bc5af22d32d3ee785ebd3fc26b4c49b70f0bd423f7d592a419a24e6d1e2cb720b7e05 /posts/page/2/ /posts/page/3/ /categories/ /categories/IT/ /categories/LIFE/ /tags/ /tags/Linux/ /tags/aircontrol/ /tags/cloud/ /tags/docker/ /tags/embedded/ /tags/git/ /tags/homelab/ /tags/kubernetes/ /tags/life/ /tags/oracle/ /tags/project/ /tags/review/ /tags/story/ /tags/system/ /tags/telegram/ /tags/zimaboard/ /posts/linuxstarter1/ /posts/review1/ /posts/iotproj1/ /posts/k8s1/ /posts/married/ /posts/terraform1/ /posts/cloud1/ /posts/dockeradv3/ /posts/dockeradv2/ /posts/dockeradv1/ /posts/homelab1/ /posts/git3/ /posts/embed1/ /posts/docker5/ /posts/itstory3/ /posts/docker4/ /posts/docker3/ /posts/docker2/ /posts/docker1/ /posts/telegrambot1/ /posts/git2/ /posts/git1/ /posts/itstory2/ /posts/virtualization1/ /posts/itstory1/ /whoami/ /posts/ trennui.jpg?v=d00c279cd8f340368f795c33d98a0541f5c39d1c19792ff6b863c6eec96ae1bb4795ea66ebeed5be73c5e2eb40ff3b5a57ea8ba359a173e9c485adf40806a728 caykhotrennui.jpg?v=69fe39128884c96777dc0e2b1b820246a84ec584ba62a7e1eee0c0bd3817f722e4397dbcc85078ffae08da3f4d7094bb66d650a3d67d2e300cf1a06ab18f0848 caytrennui.jpg?v=d27dddf71903dd4a733902097d3cb7ba3d72fd3f8a0ed1728549ae93fecb861d521f5c1bb9087c472e6af8563eacdec484d2c0a8f08f0c2225d1fffa2e8d6329 /icon-192x192.png?v=3820c1b1e6d755d2b7c2a04a65f0f1feef793b297f7ee995947137ccd8f73ec304457f6ce1df987a9a0a13ed7dacd203225505b832ccd2318b530ae53a55cebc /glitch.css?v=0b9b7f8691385df5b832251e9cf4c56d68cbcfc98c6e4c27e015f6fb29d2f0c18c358c98c0e7e0a1da9f263d6b355b811e49aac099b70889090912a5040f754a /sitemap.xml /search_index.en.json /search.js /elasticlunr.min.js?v=b9be63b71422cbfde9f14310b397d9a7092f2946bffec11811a831398ace978c1c592e9a578f1fa32041e6c0dde68657fe58d3c30b0eaa758c63c5fd45117336">