‫Yêu cầu đối với bài giảng này bao gồm việc biết kiến thức cơ bản về vùng
‫chứa và hình ảnh trong Docker và hiểu các lớp,
‫hoặc ít nhất là kiến thức cơ bản về các lớp. Biết một số điều về Docker Hub.
‫Bài giảng này sẽ là tất cả về thẻ hình ảnh và cách tải chúng lên Docker Hub.
‫Thực ra có rất nhiều thứ liên quan đến thẻ vì chúng không trực quan như
‫bạn nghĩ khi mới bắt đầu sử dụng. Chúng thực sự cần phải ở một định dạng cụ thể để hoạt
‫động với sổ đăng ký, cụ thể là với Docker Hub. Sau đó, tôi sẽ nói với bạn về mối quan hệ giữa
‫các thẻ được gán cho hình ảnh của bạn và ID của những hình ảnh đó.
‫Vậy hãy bắt đầu.
‫Đầu tiên hãy nói về việc gắn thẻ. thẻ hình ảnh docker --help. Về mặt kỹ thuật, hình ảnh không có tên mặc dù chúng ta thường đề cập đến
‫chúng như vậy khi chúng ta đang nói chuyện một cách tình cờ.
‫Nếu chúng ta
‫tạo ls hình ảnh docker, bạn nhận thấy rằng không có cột tên.
‫Ngoài ID hình ảnh, không ai trong chúng ta sẽ nhớ những ID đó phải không?
‫Chúng tôi phải đề cập đến chúng bằng ba phần thông tin khác nhau.
‫Trên màn hình này cho lệnh ls hình ảnh, chúng tôi thực sự chỉ thấy hai trong số chúng. Ở bên trái, chúng ta
‫đang thấy kho lưu
‫trữ, sau đó chúng ta thấy thẻ. Kho lưu trữ thực sự được tạo thành từ
‫tên người dùng hoặc tổ chức gạch chéo kho lưu trữ.
‫Ở đây chúng tôi chỉ xử lý hình ảnh kho lưu trữ chính thức
‫nên chúng tôi sẽ chỉ xem tên kho lưu trữ thực tế.
‫Chúng tôi đã đề cập trước đó rằng những hình ảnh đặc biệt được coi là chính thức là những hình ảnh
‫duy nhất có quyền được gọi là tên của kho lưu trữ, không phải tên thực của kho lưu trữ gạch
‫chéo của tổ chức.
‫Nhưng nếu chúng ta xem qua Docker Hub và tôi chỉ thực hiện tìm kiếm trên mysql, chúng ta sẽ thấy rằng
‫thực sự có một tổ chức, không chỉ mysql chính thức, được gọi là mysql, mà
‫còn có tổ chức SQL với một máy chủ mysql, có vẻ như khá phổ biến và nó
‫đã có hơn một triệu lượt tải xuống. Có vẻ như những gì nó ở đây là đây thực sự
‫là cùng một máy chủ MySQL nhưng nó thực sự được tạo ra bởi nhóm MySQL tại Oracle.
‫Nếu tôi thực sự muốn tải nó xuống, bạn sẽ thấy
‫ở đây ở bên phải, tôi phải thực hiện một docker kéo mysql / mysql-server. Tôi thực sự có thể nhấp
‫vào nút sao chép và tôi sao chép nó vào. Nó thực sự sẽ tải xuống hình ảnh dựa trên tổ chức duy nhất này
‫và nếu tôi thực hiện lại hình ảnh docker, bạn sẽ nhận thấy rằng tên kho lưu trữ bao gồm tên tổ chức.
‫Trên tài khoản của tôi trên Docker Hub, tôi được gọi là bretfisher. Bạn có thể nhìn thấy nó từ trên cùng bên phải.
‫Vì vậy, nếu tôi nhìn vào bảng điều khiển của mình và xem hình ảnh của tôi mà tôi có được
‫công khai, chẳng hạn, hãy nhìn vào ứng dụng gật đầu.
‫Nếu bạn tải xuống phần mềm
‫này, tôi cần thực hiện thao tác kéo docker bretfisher / gật đầu.
‫Bây giờ chúng ta đã hiểu cách đặt tên của kho lưu trữ, thẻ dùng để làm gì?
‫Thẻ không phải là một phiên bản và cũng không phải là một nhánh, nhưng nó rất giống các thẻ Git.
‫Vì vậy, nó giống như một chút của cả hai.
‫Nó thực sự chỉ là một con trỏ đến một cam kết hình ảnh cụ thể, và thực sự có thể là bất cứ thứ gì, vào kho lưu trữ đó.
‫Nếu chúng tôi quay lại Docker Hub trong một phút và xem hình ảnh chính thức của mysql, bạn sẽ thấy trên trang nhất nó có
‫các thẻ khác nhau này. Những gì họ đang cố gắng nói ở đây là số 8. 0. 0
‫và 8. 0 và 8 đều là thẻ cho cùng một ID hình ảnh.
‫Nếu tôi cuộn lên đây và nhìn vào nút thẻ, tôi sẽ nhận được danh sách chi tiết đầy đủ về tất cả các thẻ
‫khác nhau mà họ đã cấp cho mysql.
‫Vì vậy, hãy đến với Nginx, đó là thứ mà chúng tôi đã và đang làm việc rất nhiều.
‫Ở đây chúng ta sẽ thấy rằng nó không chỉ là những con số mà nó còn thực sự là những cái tên.
‫Điều quan trọng là phải chỉ ra rằng đây thực sự là những hình ảnh giống hệt
‫nhau và Docker đủ thông minh để biết điều đó. Tôi truy cập dòng lệnh của mình và tôi thấy rằng tôi đã tải xuống nginx mới nhất.
‫Nếu tôi nhìn vào trang web, tôi thấy thẻ mới nhất ngay tại đây nhưng nó cũng được gọi là dòng chính.
‫Vì vậy, điều gì sẽ xảy ra nếu tôi đã làm một docker kéo nginx: mainline? Điều này cho chúng ta biết là nó thực sự đã biết rằng dựa trên ID hình ảnh,
‫hình ảnh này đã có trong bộ nhớ cache của tôi. Bây giờ nếu tôi tạo lại hình
‫ảnh docker, tôi sẽ thấy hai nginx khác nhau. Bạn sẽ nhận thấy rằng chúng có cùng một ID hình ảnh chính xác vì chúng không thực sự được lưu trữ hai lần trong
‫bộ nhớ cache và một lần nữa, điều này quay trở lại rất nhiều khoản tiết kiệm. Các thẻ này chỉ là các nhãn
‫trỏ đến một ID hình ảnh thực tế và chúng ta có thể có nhiều trong số chúng trỏ đến cùng một
‫ID.
‫Vậy làm cách nào để tạo nhãn mới?
‫Tôi có thể tạo Dockerfile của riêng mình và tạo hình ảnh tùy chỉnh của riêng tôi, nhưng chúng tôi
‫cũng có thể gắn thẻ lại các hình ảnh Docker hiện có để tôi có thể thực
‫hiện gắn thẻ hình ảnh docker nginx bretfisher / nginx. Định dạng của lệnh này là hình ảnh mà tôi sẽ đưa ra một thẻ
‫mới trước tiên, và sau đó là thẻ mới mà tôi muốn cung cấp cho nó.
‫Nếu tôi đã tạo một thẻ hình ảnh docker - trợ giúp một lần nữa, chỉ để làm mới bộ nhớ của bạn, nó sẽ hiển
‫thị SOURCE_IMAGE và
‫một thẻ tùy chọn và sau đó là NEW_IMAGE một thẻ tùy chọn.
‫Vì vậy, nếu bạn không chỉ định thẻ, nó sẽ luôn mặc định là mới nhất. Mới nhất không thực sự luôn có nghĩa là mới nhất vì về mặt
‫kỹ thuật, tôi có thể lấy một số phần mềm cũ và gắn thẻ nó mới nhất.
‫Không có gì đặc biệt về nó nhưng nó chỉ là loại mặc định. Thực sự, tôi ước họ
‫chỉ gọi nó là mặc định chứ không phải mới nhất.
‫Vì vậy, nó hơi khó
‫hiểu, nhưng nhìn chung trên Docker Hub, đặc biệt là khi bạn đang sử dụng hình ảnh chính thức, bạn có thể
‫tin tưởng rằng phiên bản mới nhất nói chung là phiên bản ổn định mới nhất của phần mềm mà bạn muốn sử dụng.
‫Vì vậy, chúng ta hãy làm một hình
‫ảnh docker ls một lần nữa. Chú ý những gì đã xảy ra.
‫Tôi đã thêm một thẻ mới vào hình ảnh hiện có mà tôi không tạo.
‫Nó hiển thị cùng một ID
‫hình ảnh và bây giờ nó được gắn nhãn với tên người dùng của tôi và một repo mới chưa tồn tại trên Docker Hub.
‫Nếu chúng tôi đã đi và xem trang tổng
‫quan của tôi, tôi không có bất kỳ thứ gì được gọi là bretfisher / nginx.
‫Vì vậy, điều gì sẽ xảy ra nếu tôi thực hiện đẩy hình ảnh docker, tương tự như đẩy Git, bretfisher / nginx?
‫bị từ chối: quyền truy cập được yêu cầu vào tài nguyên bị từ chối.
‫Vì vậy, rõ ràng nó đã cố gắng tải lên những gì tôi vừa tạo, nó đã cố gắng tải lên thẻ đó, nhưng nó đã cấp cho tôi quyền truy cập
‫bị từ chối.
‫Đó là bởi vì tôi chưa thực sự đăng nhập.
‫Vì vậy, nếu bạn nhìn vào docker --help, bạn sẽ thấy lệnh đăng nhập và đăng xuất. Chúng tôi chưa sử dụng chúng.
‫Vì vậy, khi bạn có tài khoản Docker Hub miễn phí của riêng mình, bạn thực sự có thể đăng nhập từ đăng nhập docker dòng lệnh.
‫Vì vậy, những gì điều này thực sự đã làm là có điều này được ghi vào một tệp, theo mặc định là trong hồ sơ của tôi dưới dạng con mèo. docker / cấu hình. json và nó thực sự
‫đã lưu trữ một khóa xác thực cho phép CLI docker cục bộ của tôi truy cập Docker Hub với tư cách
‫là tôi.
‫Đây là một điểm quan trọng mà chúng ta sẽ tìm hiểu sau này trong quá trình sản xuất là bất
‫cứ nơi nào bạn đăng nhập bằng Docker CLI, theo mặc định, nó sẽ lưu trữ khóa xác thực này cho tài khoản của bạn trong
‫hồ sơ của người dùng đó.
‫Vì vậy, chỉ cần nhận thức được điều đó.
‫Nếu bạn đang sử dụng một máy mà bạn không tin tưởng, khi bạn hoàn tất, chỉ cần nhập đăng xuất docker.
‫Vì vậy, bây giờ chúng ta đã đăng nhập, tôi sẽ nhấn vào mũi tên lên để cố gắng đẩy lại hình ảnh đó.
‫ĐƯỢC RỒI.
‫Vậy là coi như xong.
‫Hãy chuyển đến Docker Hub và nhấn làm mới. Đây rồi,
‫bretfisher / nginx. Một lần nữa, tôi không thực sự phải tạo nó từ đầu để tải nó lên.
‫Tôi chỉ đơn giản là đưa một thẻ mới cho một hình ảnh hiện có và khi tôi tải nó lên, nó sẽ
‫tự động tạo một repo mới dựa trên thẻ đó.
‫Tất nhiên tôi có thể điền tất cả thông tin ở đây và bạn sẽ thấy rằng nó được
‫đặt mặc định thành tên thẻ mới nhất vì tôi không chỉ định. Vì vậy, tôi thực sự có thể quay lại và thực hiện thao
‫tác mũi tên lên cho đến khi tôi đến thẻ của mình và tôi thực sự có thể đặt cho nó một thẻ khác.
‫Chúng tôi sẽ thêm một thẻ bổ sung vào cùng một hình ảnh đó và tôi sẽ gọi nó là thử nghiệm. Nếu chúng tôi tạo một hình ảnh docker ls,
‫bạn
‫sẽ thấy rằng bây giờ tôi có ba tất cả với cùng một ID hình ảnh.
‫Nếu tôi đã thực hiện thử nghiệm hình ảnh docker push bretfisher / nginx: và lần này tôi đã chỉ định thử nghiệm, hãy lưu ý cách
‫nó cho biết các lớp đã tồn tại.
‫Đó là một phần của tỷ lệ tiết kiệm tuyệt vời của chúng tôi.
‫Khi chúng tôi tải xuống và tải lên hình ảnh, tức là đã có các lớp tồn tại, nó sẽ không cần tải
‫lại chúng lên nữa.
‫Nếu chúng tôi quay lại và tôi nhấn làm mới, bạn sẽ thấy rằng bây giờ tôi có một thẻ khác.
‫Nhưng tất nhiên nếu tôi chỉ tạo một hình ảnh docker ls, chúng tôi thấy giống như chúng tôi đã thấy rằng đó là cùng một ID hình
‫ảnh và cả hai bên của kết nối này đều biết điều đó. Nếu tôi muốn đây là một kho lưu trữ riêng tư, vì đó
‫là một tính năng được hỗ trợ của Docker Hub, những gì tôi có thể muốn làm là tạo kho lưu trữ trước và
‫khi tôi tạo nó, tôi đã chỉ định nó là riêng tư.
‫Sau đó, khi tôi nhấn vào nó, mã sẽ không bao giờ được công khai trên Internet.
‫Chà, có rất nhiều thứ liên quan đến hình ảnh và thẻ của chúng.
‫Vì vậy, chúng ta hãy chỉ làm một đánh giá nhanh.
‫Như bạn thấy, bạn có thể gắn thẻ bất kỳ thứ gì vào hình ảnh nhưng chúng phải ở một
‫định dạng cụ thể để hoạt động với Docker Hub. Bạn không thể chỉ gọi một cái gì đó nginx và sau đó tải nó
‫lên vì nó sẽ không hoạt động trừ khi nó có ID tài khoản hoặc ID tổ chức của bạn ở phía trước.
‫Sau đó, tôi đã nói về cách bạn thực sự có thể có nhiều thẻ cho cùng một ID hình ảnh và chỉ
‫vì bạn gắn thẻ lại hoặc gắn thẻ khác cho một hình ảnh hiện có, nó không thực sự thay đổi ID hình ảnh đó.
‫Hãy nhớ rằng thẻ mới nhất thực sự chỉ là thẻ mặc định.
‫Vốn dĩ không có gì đặc biệt về nó, nhưng chúng tôi giả định rằng trên Docker Hub, ở đó
‫có khá nhiều tiêu chuẩn rằng mọi người sử dụng thẻ mới nhất như một cách để chỉ ra phiên bản ổn định
‫mới nhất của hình ảnh của họ. Tôi đã chỉ cho bạn cách nhanh chóng đăng nhập và thoát khỏi Docker Hub từ CLI. Hãy nhớ rằng điều đó lưu trữ ID phiên
‫trong cấu hình cục bộ của bạn nếu bạn đang sử dụng máy Linux và bạn đảm bảo rằng bạn đăng xuất để xóa ID
‫đó nếu bạn đang sử dụng máy
‫chủ hoặc máy chủ Linux dùng chung, chẳng hạn như máy chủ. Sau đó, xin nhắc lại, nếu bạn muốn tạo một
‫hình ảnh Docker Hub riêng tư, bạn có thể nên tạo kho lưu trữ trước khi tải nó
‫lên.