‫Yêu cầu đối với bài giảng này là bạn phải biết cách khởi động vùng chứa từ các bài giảng trước.
‫Chúng tôi vừa kết thúc bài giảng cuối cùng nói về việc nhìn thấy những gì đang xảy ra trong một thùng chứa từ bên ngoài.
‫Đây là tất cả về việc đi vào một thùng chứa để lộn xộn với bên trong. Có một số lệnh mà chúng ta có thể
‫sử dụng.
‫Đầu tiên là chạy vùng chứa với a -it.
‫Chúng ta sẽ nói về cách -it hoạt động để thực sự có được một trình bao bên trong vùng chứa.
‫Sau đó, đối với các vùng chứa đang chạy mà bạn muốn chạy quy trình thứ hai, bạn cũng có thể sử dụng trình thực thi vùng
‫chứa và chúng tôi sẽ hiển thị một số ví dụ về điều đó.
‫Sau đó, chúng ta sẽ thực sự đề cập đến một số điểm khác biệt giữa bản phân phối Linux thông
‫thường, như Ubuntu, để cài đặt trên máy ảo hoặc trên phần cứng.
‫Và sau đó những bản phân phối Linux đó như thế nào bên trong một thùng chứa.
‫Bắt đầu nào.
‫Đôi khi nhìn vào một hộp đựng từ bên ngoài rất tiện dụng.
‫Nhưng một trong những câu hỏi đầu tiên mà mọi người thường hỏi tôi là làm cách nào để tôi vào vùng chứa và
‫thực sự làm mọi thứ trong đó trực tiếp từ dòng lệnh.
‫Đôi khi mọi người nhầm lẫn điều này với việc muốn có Máy chủ SSH bên trong vùng chứa của họ để họ có thể chuyển
‫vào đó.
‫Nhưng chúng ta thực sự không cần phải làm điều đó vì chúng ta có một số lệnh tùy ý sử dụng cho phép chúng ta
‫có được một trình bao bên trong chính vùng chứa khi nó đang chạy.
‫Đầu tiên chỉ là lệnh chạy bộ chứa docker.
‫Nhưng chúng tôi sẽ chỉ định một vài tùy chọn bổ sung.
‫Chúng ta sẽ làm một -it.
‫-It thực sự là hai tùy chọn riêng biệt.
‫Nếu tôi chỉ hiển thị trợ giúp thực sự nhanh chóng, bạn có thể thấy rằng t thực sự cung cấp cho chúng tôi một tty giả hoặc một lời
‫nhắc tương tự như những gì bạn sẽ có thông qua ssh.
‫Và sau đó nếu chúng ta cuộn đến i, đó
‫thực sự là điều cho phép chúng ta giữ phiên đó mở để có thể tiếp tục chạy nhiều lệnh hơn.
‫Nếu chúng ta chạy một docker container -it, và sau đó chạy một nginx khác. Hãy gọi nó là proxy.
‫Sau đó, chúng ta sẽ phải chỉ định một lệnh thay thế.
‫Nếu bạn nhớ ở đầu phần này, nơi chúng ta đã nói về định dạng của dòng lệnh
‫docker, khi bạn đang thực hiện chạy vùng chứa docker, như bạn có thể xem qua phần trợ giúp, ở cuối phần này, sau hình
‫ảnh, bạn có lệnh và đối số tùy chọn mà bạn có thể gửi vào vùng chứa mới này mà
‫bạn sắp bắt đầu cho nó biết sẽ chạy gì. Hình ảnh có một lệnh mặc định trong đó chúng ta sẽ xem cách
‫cấu hình sau.
‫Nhưng nếu bạn muốn thay đổi những gì đã chạy khi khởi động, bạn có thể làm điều đó ngay từ dòng chạy.
‫Hãy chỉ nói Bash. Bởi vì Bash là một trong những shell phổ biến mà bạn thường thấy trong một thùng
‫chứa sẽ cung cấp cho bạn một shell để làm việc.
‫Nhìn kìa. Tôi đang được nhắc nhở.
‫Bạn sẽ nhận thấy lời nhắc của tôi cho biết root là người dùng mà vùng chứa đã bắt đầu. Nó không thực sự có nghĩa là tôi root
‫trên máy chủ.
‫Nó chỉ có nghĩa là tôi đang hoạt động với tư cách là người chủ trên vùng chứa.
‫Số sau nó thực sự là ID vùng chứa.
‫Nếu tôi thực hiện một ls -al, tôi sẽ nhận được danh sách đầy đủ mọi thứ ở nơi tôi đang ở.
‫Và bạn có thể thấy rằng tôi đang ở trong đường dẫn gốc của hệ thống tệp bên trong vùng chứa.
‫Tôi thực sự đang xem tất cả các tệp bên trong vùng chứa dựa trên hình ảnh Nginx.
‫Từ đây, tôi có thể thay đổi các tệp cấu hình, tôi có thể tải
‫xuống các gói từ internet và thực hiện bất kỳ công việc quản trị thông thường nào mà bạn sẽ
‫làm từ một trình bao thông thường.
‫Để thoát ra khỏi shell khi bạn hoàn thành, tôi sẽ gõ exit, giống như bạn làm với bất kỳ trình bao nào và bây giờ vùng
‫chứa đó đã dừng lại.
‫Nếu chúng tôi thực sự làm một ls container docker, bạn sẽ không thấy nó ở đó.
‫Hãy nhớ rằng, chúng tôi gọi nó là proxy.
‫Vì vậy, tôi đã phải làm một -a.
‫Và nó ở đó. Bây giờ hãy xem lệnh mà nó đã chạy. Lệnh mặc định cho vùng chứa Nginx là chạy
‫chính chương trình Nginx.
‫Nhưng khi chúng tôi nhập lệnh cuối cùng của mình, chúng tôi đã thay đổi chương trình mặc định đó thực sự là Bash,
‫cung cấp cho chúng tôi trình bao của chúng tôi. Khi chúng tôi ra khỏi vỏ, thùng chứa dừng lại. Vì container s chỉ chạy miễn là
‫lệnh mà nó chạy khi khởi động chạy. Vì chúng tôi đã thay đổi nó thành Bash, chỉ cần thoát khỏi Bash là thoát khỏi
‫nó Bây giờ, điều
‫gì sẽ xảy ra nếu tôi sử dụng bản phân phối đầy đủ của Linux thay vì thực sự sử dụng Nginx. Hãy tạo một Ubuntu
‫đầy đủ.
‫Nó thực sự sẽ tải xuống hình ảnh Ubuntu và đặt tôi vào lời nhắc của vùng chứa mới này.
‫Nếu bạn đã từng sử dụng Ubuntu, bạn sẽ biết về trình quản lý gói apt.
‫Vì vậy, tôi có thể sử dụng nó ở đây. Giống như tôi làm trong một máy chủ Ubuntu tiêu chuẩn. Tôi thực sự có thể cài
‫đặt một cái gì đó
‫apt-get install -y
‫curl.
‫Vấn đề về Ubuntu và các bản phân phối khác bên trong vùng chứa là chúng thường rất tối thiểu.
‫Một đĩa CD trực tiếp hoặc bản tải xuống ISO của Ubuntu mà bạn thường đặt trên máy ảo sẽ có nhiều phần mềm
‫được cài đặt theo mặc định hơn so với bộ chứa Ubuntu, đây thực sự là một phiên bản Ubuntu rất tối
‫thiểu mà bạn luôn có thể thêm nhiều hơn phần mềm với trình quản lý gói apt.
‫Vì vậy, bây giờ thùng chứa đang chạy này đã được cài đặt curl và tôi có thể sử dụng nó giống như tôi làm trên một máy cục bộ.
‫Khi tôi thoát khỏi shell một lần nữa, nó sẽ thực sự dừng container. docker container
‫ls. Bạn để ý tôi không thấy. Đó là hình ảnh Ubuntu mà chúng tôi vừa chạy.
‫Nếu tôi khởi động lại thùng chứa đó, nó sẽ được lắp vào đó.
‫Nhưng nếu tôi tạo một vùng chứa mới từ hình ảnh Ubuntu, thì vùng chứa khác đó sẽ không được cài
‫đặt dòng lệnh curl.
‫Điều gì sẽ xảy ra nếu chúng tôi muốn chạy lại vùng chứa đó và lấy lại Bash ngay trong đó.
‫Chúng tôi có thể sử dụng lệnh bắt đầu bộ chứa docker.
‫Bạn sẽ nhận thấy nó hơi khác khi chúng tôi bắt đầu một vùng chứa hiện có, nhưng nó tương
‫tự như nó ... nó chỉ là một ai đó.
‫Sau đó là tên của vùng chứa Ubuntu. Bạn sẽ nhận thấy rằng chúng tôi đã quay lại ngay và
‫tôi có thể cuộn google lại và nó hoạt động.
‫Nếu tôi thoát ra, nó lại dừng lại.
‫Điều gì sẽ xảy ra nếu tôi muốn thực sự nhìn thấy trình bao bên trong một vùng chứa đang chạy đã chạy một
‫cái gì đó như MySQL hoặc Nginx.
‫Chúng tôi cũng có thể làm điều đó.
‫Và đó là sử dụng lệnh execute. docker container điều hành.
‫Và bạn có thể thấy chúng tôi có một vài tùy chọn ở đây.
‫Và cái phổ biến nhất là ... giả sử tôi muốn nhảy vào vùng chứa MySQL vì tôi cần thực
‫hiện một số nội dung quản trị trên chính MySQL.
‫Tôi có thể làm điều đó một lần nữa và sau đó đặt tên của vùng chứa. Sau đó, chương trình tôi muốn chạy.
‫Và trong trường hợp này một lần nữa đó là Bash và bây giờ tôi đang ở trong vùng chứa với MySQL.
‫Tôi thực sự có thể thực hiện một ps aux ngay bên trong thùng chứa liệt kê các quy trình. Tất nhiên, điều này sẽ hiển thị cho tôi
‫daemon MySQL đang chạy ở chế độ nền, cũng như quy trình Bash mà tôi hiện
‫đang sử dụng, cũng như lệnh ps
‫mà tôi vừa chạy. Trong trình bao này, tôi có thể nhảy vào chính MySQL bằng dòng lệnh mysql. Bạn sẽ nhận thấy khi tôi
‫thoát Bash shell này và thực hiện lệnh ls, MySQL vẫn đang chạy. Bởi vì trình thực thi vùng chứa docker thực sự chạy một quy trình bổ
‫sung trên một vùng chứa đang chạy hiện có, nó sẽ không ảnh
‫hưởng đến quy trình gốc cho MySQL daemon. Hãy thử một lần nữa.
‫Như bạn có thể thấy ở đây, điều này rất hữu ích để nhảy vào vùng chứa khi bạn cần khắc
‫phục sự cố hoặc khi bạn cần thay đổi một chút gì đó trên hệ thống đang chạy, cũng như sử dụng các vùng chứa của các
‫bản phân phối khác nhau để cung cấp cho bạn môi trường mà bạn sẽ có nếu bạn có một máy đầy đủ
‫như Ubuntu hoặc Alpine.
‫Bây giờ Alpine là gì? Chúng tôi đã không đề cập đến Alpine trước đây. Alpine là một bản phân phối khác của Linux,
‫nhưng Alpine được thiết kế rất nhỏ.
‫Nó thực sự chỉ có kích thước 5MB.
‫Nếu tôi thực hiện một công cụ kéo núi cao, điều đó sẽ kéo xuống hình ảnh Alpine mới nhất và nếu tôi thực hiện một hình
‫ảnh docker ls, bạn thực sự có thể thấy hình ảnh Alpine nhỏ như thế nào so với Ubuntu.
‫Điều thú vị về Alpine là nó cũng đi kèm với trình quản lý gói của riêng mình.
‫Vì vậy, bạn sẽ thấy Alpine là một tùy chọn trên Docker Hub rất nhiều trong phần tiếp theo khi chúng ta xem qua hình ảnh
‫và Docker Hub.
‫Nhưng bây giờ chúng ta hãy làm một Bash shell bên trong Alpine. docker container run -it bash núi cao.
‫Bây giờ những gì vừa xảy ra ở đây?
‫Tại sao tôi vào đó?
‫Nó cho tôi biết rằng nó đang bắt đầu quá trình vùng chứa và nó khiến tệp thực thi bash
‫không được tìm thấy trong đường dẫn. Và điều đó thực sự có nghĩa là Bash không có trong vùng chứa.
‫Và điều này quay trở lại khái niệm rằng chúng ta chỉ có thể chạy những thứ trong vùng chứa đã tồn tại trong hình
‫ảnh của
‫nó khi bạn khởi động nó.
‫Hoặc có thể một cái gì đó mà bạn đã thêm sau này thông qua các lệnh thực thi hoặc chạy.
‫Nhưng trong trường hợp này, làm thế nào tôi có được trong hình ảnh Alpine?
‫Chà, Alpine quá nhỏ nên nó không thực sự có Bash trong đó. Nhưng nó có sh. Vì vậy, chúng ta có thể thay thế
‫lệnh bằng sh, không hoàn toàn có đầy đủ tính năng như Bash nhưng đưa chúng ta vào ngay vùng chứa.
‫Nếu bạn tìm kiếm Alpine Linux trên internet, bạn sẽ biết rằng trình quản lý gói của nó là
‫apk và chúng tôi thực sự có thể sử dụng nó để cài đặt Bash nếu chúng tôi thực sự cần nó.
‫Chỉ để tóm tắt thực sự nhanh chóng những gì chúng ta đã học được trong bài học này.
‫Chúng tôi đã tìm hiểu về tùy chọn -it cho việc chạy vùng chứa, nó cung cấp cho chúng ta tính năng tương đương với một trình bao tương tác
‫để thực sự thực hiện mọi thứ trong vùng chứa như chúng ta làm nếu chúng ta sử dụng một máy chủ nào đó.
‫Sau đó, chúng tôi đã học
‫một lệnh mới cho trình thực thi vùng chứa docker với lệnh này thực hiện chính xác điều tương tự như khi chạy, nhưng nó thực
‫hiện trên một vùng chứa hiện có đang chạy mà không bắt đầu một vùng chứa mới.
‫Và cuối cùng, chúng ta đã tìm hiểu một chút về Alpine và nó khác với các bản phân phối Linux lớn như thế nào
‫và nó thực sự có kích thước 4MB và lý tưởng cho hình ảnh vùng chứa như thế nào.