Nếu bạn đang làm việc cho một tổ chức và muốn giữ hình ảnh docker của mình trong nhà để triển khai nhanh chóng, thì việc lưu trữ kho lưu trữ Docker riêng là hoàn hảo. Việc có sổ đăng ký docker riêng cho phép bạn sở hữu đường ống phân phối hình ảnh của mình và kiểm soát chặt chẽ hơn đối với việc lưu trữ và phân phối hình ảnh. Bạn có thể tích hợp sổ đăng ký của mình với hệ thống CI/CD để cải thiện quy trình làm việc của mình.
Hướng dẫn này sẽ hướng dẫn bạn cách thiết lập và sử dụng sổ đăng ký Docker riêng trên máy chủ chạy Rocky Linux 8 bằng cách sử dụng Amazon S3 làm vị trí lưu trữ.
Tường lửa hoạt động với các vùng khác nhau và vùng công cộng là vùng mặc định mà chúng tôi sẽ sử dụng. Liệt kê tất cả các dịch vụ và cổng đang hoạt động trên tường lửa.
Nó sẽ hiển thị đầu ra sau.
Cho phép các cổng HTTP và HTTPS.
Kiểm tra lại trạng thái của tường lửa.
Bạn sẽ thấy kết quả tương tự.
Tải lại tường lửa để bật các thay đổi.
Cài đặt kho lưu trữ Docker chính thức.
Cài đặt Docker.
Bật và chạy daemon Docker.
Thêm người dùng hệ thống của bạn vào nhóm Docker để tránh sử dụng sudo để chạy lệnh Docker.
Đăng nhập lại vào máy chủ của bạn sau khi đăng xuất để bật thay đổi.
Tải xuống và cài đặt bản phát hành ổn định mới nhất của Docker Compose.
Áp dụng quyền thực thi cho tệp nhị phân đã tải xuống.
Cài đặt tập lệnh Docker-compose Bash Completion.
Tải lại cài đặt hồ sơ của bạn để bash-completion hoạt động.
Chuyển sang thư mục docker-registry.
Tạo một thư mục để lưu trữ mật khẩu xác thực HTTP, các tệp cấu hình Nginx và chứng chỉ SSL.
Tạo một thư mục khác để lưu trữ nhật ký Nginx.
Bước tiếp theo là thiết lập tệp cấu hình với một vài cài đặt quan trọng. Những cài đặt này cũng có thể được xác định trong tệp docker-compose.yml, nhưng có một tệp riêng sẽ tốt hơn nhiều.
Tạo một bucket với các cài đặt sau.
Thay thế S3_BUCKET_NAME bằng tên thùng S3 của bạn.
Ghi lại khóa bí mật, giá trị bí mật và vùng thùng của thùng để sử dụng sau.
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Chúng ta hãy xem qua những gì chúng ta đã thiết lập trong tệp compose của mình.
Docker registry giao tiếp qua cổng 5000, đây là cổng mà chúng tôi đã đưa ra trong máy chủ của mình với docker.
[*]
./auth:/etc/nginx/conf.d ánh xạ đảm bảo rằng tất cả các thiết lập của Nginx đều có sẵn trong vùng chứa.
[*]
./auth/nginx.conf:/etc/nginx/nginx.conf:ro ánh xạ tệp thiết lập Nginx từ hệ thống sang một tệp trong vùng chứa ở chế độ chỉ đọc.
[*]
./logs:/var/log/nginx cho phép truy cập vào nhật ký của Nginx trên hệ thống bằng cách ánh xạ đến thư mục nhật ký Nginx trong vùng chứa.
[*]
Thiết lập của sổ đăng ký Docker được lưu trữ trong tệp /etc/docker/registry/config.yml trong vùng chứa và chúng tôi đã ánh xạ nó tới tệp config.yml trong thư mục hiện tại, tệp mà chúng tôi sẽ tạo ở bước tiếp theo.
Tạo tệp mật khẩu trong thư mục ~/docker-registry/auth.
Cờ -c hướng dẫn lệnh tạo một tệp mới và cờ -B dùng để sử dụng thuật toán bcrypt được Docker hỗ trợ. Thay thế user1 bằng tên người dùng bạn chọn.
Nếu bạn muốn thêm nhiều người dùng hơn, hãy chạy lại lệnh nhưng không có cờ -c.
Bây giờ, tệp sẽ được ánh xạ tới vùng chứa sổ đăng ký để xác thực.
Cài đặt kho lưu trữ EPEL và Certbot.
Tạo chứng chỉ SSL.
Lệnh trên sẽ tải xuống chứng chỉ vào thư mục /etc/letsencrypt/live/registry.example.com trên máy chủ của bạn.
Tạo chứng chỉ nhóm Diffie-Hellman.
Kiểm tra việc gia hạn chứng chỉ.
Nếu chạy thử thành công, điều đó có nghĩa là chứng chỉ của bạn sẽ được tự động gia hạn.
Tạo và mở tệp ~/docker-registry/auth/nginx.conf để chỉnh sửa.
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc sau khi hoàn tất.
Cấu hình SELinux để cho phép kết nối mạng cho Private Docker Registry.
Khởi chạy vùng chứa docker.
Kiểm tra trạng thái của vùng chứa.
Đăng nhập vào sổ đăng ký Docker.
Bạn cũng có thể mở URL https://registry.example.com/v2/ trong trình duyệt của mình và nó sẽ yêu cầu tên người dùng và mật khẩu. Bạn sẽ thấy một trang trống có {} trên đó.
Bạn có thể kiểm tra URL trên thiết bị đầu cuối bằng cách sử dụng curl.
Tải xuống hình ảnh docker Ubuntu mới nhất.
Gắn thẻ hình ảnh này cho sổ đăng ký riêng tư.
Đẩy hình ảnh vào sổ đăng ký.
Kiểm tra xem việc đẩy có thành công không.
Nhập mật khẩu xác thực Nginx của bạn khi được nhắc và bạn sẽ thấy danh sách các kho lưu trữ có sẵn thông qua sổ đăng ký.
Kiểm tra danh sách các hình ảnh Docker hiện có để sử dụng.
Đăng nhập vào sổ đăng ký Docker riêng từ máy khách.
Kéo ảnh Ubuntu từ sổ đăng ký.
Liệt kê tất cả ảnh trên máy khách của bạn.
Tạo và khởi chạy một vùng chứa bằng ảnh đã tải xuống.
Bạn sẽ được đăng nhập vào Shell bên trong vùng chứa Ubuntu.
Chạy lệnh sau để kiểm tra phiên bản Linux.
Bây giờ, bạn có thể bắt đầu sử dụng sổ đăng ký Docker từ máy khách của mình.
Hướng dẫn này sẽ hướng dẫn bạn cách thiết lập và sử dụng sổ đăng ký Docker riêng trên máy chủ chạy Rocky Linux 8 bằng cách sử dụng Amazon S3 làm vị trí lưu trữ.
Điều kiện tiên quyết
- Hai máy chủ Linux có Rocky Linux 8. Một máy chủ sẽ hoạt động như máy chủ lưu trữ sổ đăng ký, trong khi máy chủ còn lại sẽ được sử dụng như máy khách để gửi yêu cầu và nhận hình ảnh từ máy chủ.
- Tên miền đã đăng ký trỏ đến máy chủ lưu trữ. Chúng tôi sẽ sử dụng registry.example.com cho hướng dẫn của mình.
- Người dùng không phải root có quyền sudo trên cả hai máy.
Bước 1 - Cấu hình Tường lửa
Bước đầu tiên là cấu hình tường lửa. Rocky Linux sử dụng Tường lửa Firewalld. Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --staterunning
Mã:
$ sudo firewall-cmd --permanent --list-services
Mã:
cockpit dhcpv6-client ssh
Mã:
$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https
Mã:
$ sudo firewall-cmd --permanent --list-services
Mã:
cockpit dhcpv6-client http https ssh
Mã:
$ sudo firewall-cmd --reload
Bước 2 - Cài đặt Docker và Docker Compose
Bước này là bắt buộc trên cả máy chủ và máy khách.Cài đặt kho lưu trữ Docker chính thức.
Mã:
$ sudo dnf install yum-utils$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
Mã:
$ sudo dnf install docker-ce docker-ce-cli containerd.io
Mã:
$ sudo systemctl enable docker --now
Mã:
$ sudo usermod -aG docker $(whoami)
Tải xuống và cài đặt bản phát hành ổn định mới nhất của Docker Compose.
Mã:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Mã:
$ sudo chmod +x /usr/local/bin/docker-compose
Mã:
$ sudo curl \ -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \ -o /etc/bash_completion.d/docker-compose
Mã:
$ source ~/.bashrc
Bước 3 - Cấu hình Docker Registry
Tạo thư mục người dùng
Tạo thư mục cho cấu hình sổ đăng ký.
Mã:
$ mkdir ~/docker-registry
Mã:
$ cd ~/docker-registry
Mã:
$ mkdir auth
Mã:
$ mkdir logs
Tạo Amazon S3 Bucket
Bạn có thể lưu trữ dữ liệu sổ đăng ký và hình ảnh trên máy chủ của mình hoặc sử dụng dịch vụ lưu trữ đám mây. Đối với hướng dẫn của chúng tôi, chúng tôi sẽ sử dụng dịch vụ đám mây Amazon S3.Bước tiếp theo là thiết lập tệp cấu hình với một vài cài đặt quan trọng. Những cài đặt này cũng có thể được xác định trong tệp docker-compose.yml, nhưng có một tệp riêng sẽ tốt hơn nhiều.
Tạo một bucket với các cài đặt sau.
- ACL phải bị vô hiệu hóa.
- Quyền truy cập công khai vào bucket phải bị vô hiệu hóa.
- Phiên bản bucket phải bị vô hiệu hóa.
- Bật mã hóa Bucket bằng khóa do Amazon S3 quản lý. (SSE-S3)
- Khóa đối tượng phải bị vô hiệu hóa.
Mã:
{ "Phiên bản": "17-10-2012", "Câu lệnh": [ { "Hiệu ứng": "Cho phép", "Hành động": [ "s3:ListBucket", "s3:GetBucketLocation", "s3:ListBucketMultipartUploads" ], "Tài nguyên": "arn:aws:s3:::S3_BUCKET_NAME" }, { "Hiệu ứng": "Cho phép", "Hành động": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Tài nguyên": "arn:aws:s3:::S3_BUCKET_NAME/*" } ]}
Ghi lại khóa bí mật, giá trị bí mật và vùng thùng của thùng để sử dụng sau.
Tạo tệp Docker Compose
Tạo tệp docker-compose.yml và mở tệp đó để chỉnh sửa.
Mã:
$ nano docker-compose.yml
Mã:
version: '3.3'services: registry: image: registry:2 restart: always environment: - REGISTRY_STORAGE=s3 - REGISTRY_STORAGE_S3_REGION=us-west-2 - REGISTRY_STORAGE_S3_BUCKET=hf-docker-registry - REGISTRY_STORAGE_S3_ENCRYPT=true - REGISTRY_STORAGE_S3_CHUNKSIZE=5242880 - REGISTRY_STORAGE_S3_SECURE=true - REGISTRY_STORAGE_S3_ACCESSKEY=AKIA3FIG4NVFCJ6STMUA - REGISTRY_STORAGE_S3_SECRETKEY=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 - REGISTRY_STORAGE_S3_V4AUTH=true - REGISTRY_STORAGE_S3_ROOTDIRECTORY=/image-registry - REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR=inmemory - REGISTRY_HEALTH_STORAGEDRIVER_ENABLED=false nginx: image: "nginx:alpine" ports: - 443:443 links: - registry:registry volumes: - ./auth:/etc/nginx/conf.d - ./auth/nginx.conf:/etc/nginx/nginx.conf:ro - ./logs:/var/log/nginx - /etc/letsencrypt:/etc/letsencrypt
Chúng ta hãy xem qua những gì chúng ta đã thiết lập trong tệp compose của mình.
-
Bước đầu tiên là lấy hình ảnh mới nhất của phiên bản 2 của sổ đăng ký Docker từ hub. Chúng tôi không sử dụng thẻ mới nhất vì nó có thể gây ra sự cố trong trường hợp nâng cấp phiên bản lớn. Đặt thành 2 cho phép bạn lấy tất cả các bản cập nhật 2.x trong khi ngăn chặn việc tự động nâng cấp lên phiên bản chính tiếp theo, điều này có thể gây ra những thay đổi đột ngột.
-
Bộ chứa sổ đăng ký được đặt để luôn khởi động lại trong trường hợp xảy ra lỗi hoặc tắt máy đột ngột.
-
Chúng tôi đã đặt nhiều biến môi trường khác nhau cho bộ lưu trữ Amazon S3. Chúng ta hãy xem qua chúng một cách nhanh chóng.
- REGISTRY_STORAGE đặt loại bộ lưu trữ. Chúng tôi đã chọn s3 vì chúng tôi đang sử dụng Amazon S3.
- REGISTRY_STORAGE_S3_REGION thiết lập vùng của thùng S3 của bạn.
- REGISTRY_STORAGE_S3_BUCKET thiết lập tên của thùng S3 của bạn.
- REGISTRY_STORAGE_S3_ENCRYPT- đặt thành true nếu bạn đã bật mã hóa Thùng.
- REGISTRY_STORAGE_S3_CHUNKSIZE thiết lập kích thước của các khối tải lên. Kích thước phải lớn hơn 5MB (5 * 1024 * 1024).
- REGISTRY_STORAGE_S3_SECURE- đặt thành true nếu bạn định sử dụng HTTPS.
- REGISTRY_STORAGE_S3_ACCESSKEY và REGISTRY_STORAGE_S3_SECRETKEY - Thông tin xác thực người dùng bạn đã lấy sau khi tạo người dùng IAM.
- REGISTRY_STORAGE_S3_V4AUTH - đặt thành true nếu bạn sử dụng xác thực AWS v4. Nếu bạn gặp lỗi liên quan đến đăng nhập S3, hãy đặt thành false.
- REGISTRY_STORAGE_S3_ROOTDIRECTORY - đặt thư mục gốc trong thùng của bạn, nơi dữ liệu sổ đăng ký của bạn sẽ được lưu trữ.
- REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR - đặt vị trí cho Bộ nhớ đệm. Trong trường hợp của chúng tôi, chúng tôi đang lưu trữ nó trong bộ nhớ. Bạn cũng có thể đặt nó để sử dụng Redis.
- REGISTRY_HEALTH_STORAGEDRIVER_ENABLED - Đặt thành false để tắt dịch vụ kiểm tra tình trạng lưu trữ của Sổ đăng ký. Có một lỗi với Registry có thể gây ra sự cố nếu bạn không đặt thành false.
Docker registry giao tiếp qua cổng 5000, đây là cổng mà chúng tôi đã đưa ra trong máy chủ của mình với docker.
[*]
./auth:/etc/nginx/conf.d ánh xạ đảm bảo rằng tất cả các thiết lập của Nginx đều có sẵn trong vùng chứa.
[*]
./auth/nginx.conf:/etc/nginx/nginx.conf:ro ánh xạ tệp thiết lập Nginx từ hệ thống sang một tệp trong vùng chứa ở chế độ chỉ đọc.
[*]
./logs:/var/log/nginx cho phép truy cập vào nhật ký của Nginx trên hệ thống bằng cách ánh xạ đến thư mục nhật ký Nginx trong vùng chứa.
[*]
Thiết lập của sổ đăng ký Docker được lưu trữ trong tệp /etc/docker/registry/config.yml trong vùng chứa và chúng tôi đã ánh xạ nó tới tệp config.yml trong thư mục hiện tại, tệp mà chúng tôi sẽ tạo ở bước tiếp theo.
Thiết lập Xác thực
Để thiết lập xác thực HTTP, bạn cần cài đặt gói httpd-tools.
Mã:
$ sudo dnf install httpd-tools
Mã:
$ htpasswd -Bc ~/docker-registry/auth/nginx.htpasswd user1Mật khẩu mới:Nhập lại mật khẩu mới:Đang thêm mật khẩu cho người dùng user1
Nếu bạn muốn thêm nhiều người dùng hơn, hãy chạy lại lệnh nhưng không có cờ -c.
Mã:
$ htpasswd -B ~/docker-registry/auth/registry.password user2
Bước 4 - Cài đặt SSL
Để cài đặt chứng chỉ SSL bằng Let's Encrypt, chúng ta cần tải xuống công cụ Certbot, có sẵn trong kho lưu trữ Epel.Cài đặt kho lưu trữ EPEL và Certbot.
Mã:
$ sudo dnf install epel-release$ sudo dnf install certbot
Mã:
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d registry.example.com
Tạo chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Mã:
$ sudo certbot renew --dry-run
Sao chép tệp Dhparam vào container
Sao chép chứng chỉ nhóm Diffie-Hellman vào thư mục ~/docker-registry/auth, thư mục này sẽ được ánh xạ tới container.
Mã:
$ sudo cp /etc/ssl/certs/dhparam.pem ~/docker-registry/auth
Bước 5 - Cấu hình Nginx
Bước tiếp theo bao gồm cấu hình máy chủ Nginx làm proxy giao diện người dùng cho máy chủ đăng ký Docker. Docker registry đi kèm với một máy chủ tích hợp hoạt động ở cổng 5000. Chúng ta sẽ đặt nó sau Nginx.Tạo và mở tệp ~/docker-registry/auth/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano ~/docker-registry/auth/nginx.conf
Mã:
events { worker_connections 1024;}http { upstream docker-registry { server registry:5000; } ## Đặt một biến để giúp chúng ta quyết định xem chúng ta có cần thêm tiêu đề ## 'Docker-Distribution-Api-Version' hay không. ## Registry luôn đặt tiêu đề này. ## Trong trường hợp nginx thực hiện xác thực, tiêu đề sẽ không được đặt ## vì nginx đang xác thực trước khi ủy quyền. bản đồ $upstream_http_docker_distribution_api_version $docker_distribution_api_version { '' 'registry/2.0'; } máy chủ { lắng nghe 443 ssl http2; tên máy chủ registry.example.com; # Chứng chỉ SSL ssl /etc/letsencrypt/live/registry.example.com/fullchain.pem; khóa chứng chỉ ssl /etc/letsencrypt/live/registry.example.com/privkey.pem; chứng chỉ ssl đáng tin cậy /etc/letsencrypt/live/registry.example.com/chain.pem; nhật ký truy cập /var/log/nginx/registry.access.log; nhật ký lỗi /var/log/nginx/registry.error.log; # Khuyến nghị từ https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers bật; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_session_cache shared:SSL:10m; ssl_dhparam /etc/nginx.d/conf.d/dhparam.pem; resolver 8.8.8.8; # vô hiệu hóa mọi giới hạn để tránh HTTP 413 khi tải lên hình ảnh lớn client_max_body_size 0; # bắt buộc để tránh HTTP 411: xem Sự cố #1486 (https://github.com/moby/moby/issues/1486) chunked_transfer_encoding bật; location /v2/ { # Không cho phép kết nối từ docker 1.5 và các phiên bản trước đó # docker pre-1.6.0 không thiết lập đúng tác nhân người dùng trên ping, hãy bắt "Go *" tác nhân người dùng nếu ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) { return 404; } # Để thêm xác thực cơ bản vào v2, hãy sử dụng cài đặt auth_basic. auth_basic "Registry realm"; auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd; ## Nếu $docker_distribution_api_version trống, tiêu đề sẽ không được thêm vào. ## Xem chỉ thị map ở trên, trong đó biến này được định nghĩa. add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always; proxy_pass http://docker-registry; proxy_set_header Host $http_host; # bắt buộc vì lợi ích của máy khách docker proxy_set_header X-Real-IP $remote_addr; # truyền IP thực của máy khách proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 900; } }}
Cấu hình SELinux để cho phép kết nối mạng cho Private Docker Registry.
Mã:
$ sudo setsebool -P httpd_can_network_connect on
Bước 6 - Khởi chạy Docker Registry
Chuyển sang thư mục của Docker Registry.
Mã:
$ cd ~/docker-registry
Mã:
$ docker-compose up -d
Mã:
$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES88d6addc1687 nginx:alpine "/docker-entrypoint.…" 5 phút trước Đã đăng 5 phút 80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp docker-registry_nginx_12b112edc1c72 registry:2 "/entrypoint.sh /etc…" 5 phút trước Đã đăng 5 phút 5000/tcp docker-registry_registry_1
Mã:
$ docker login -u=testuser -p=testpassword https://registry.example.com
Bạn có thể kiểm tra URL trên thiết bị đầu cuối bằng cách sử dụng curl.
Mã:
$ curl -u testuser -X GET https://registry.nspeaks.xyz/v2/Nhập mật khẩu máy chủ cho người dùng 'testuser':{}
Mã:
$ docker pull ubuntu:latest
Mã:
$ docker tag ubuntu:latest registry.example.com/ubuntu2004
Mã:
$ docker push registry.example.com/ubuntu2004
Mã:
$ curl -u testuser -X GET https://registry.nspeaks.xyz/v2/_catalogNhập mật khẩu máy chủ cho người dùng 'testuser':{"repositories":["ubuntu2004"]}
Kiểm tra danh sách các hình ảnh Docker hiện có để sử dụng.
Mã:
$ docker imagesTHẺ KHO LƯU TRỮ ID ẢNH KÍCH THƯỚC ĐÃ TẠOregistry 2 d3241e050fc9 5 ngày trước 24,2MBnginx alpine 53722defe627 5 ngày trước 23,4MBhttpd 2 118b6abfbf55 5 ngày trước 144MBubuntu latest ff0fea8310f3 2 tuần trước 72,8MBregistry.nspeaks.xyz/ubuntu2004 latest ff0fea8310f3 2 tuần trước 72,8MB
Bước 7 - Truy cập và sử dụng sổ đăng ký Docker từ Máy khách
Đăng nhập vào máy khách-máy chủ của bạn. Ở bước 1, chúng tôi đã cài đặt Docker trên máy khách.Đăng nhập vào sổ đăng ký Docker riêng từ máy khách.
Mã:
$ docker login -u=testuser -p=testpassword https://registry.example.com
Mã:
$ docker pull registry.example.com/ubuntu2004
Mã:
$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEregistry.nspeaks.xyz/ubuntu2004 latest ff0fea8310f3 2 tuần trước 72,8MB
Mã:
$ docker run -it registry.example.com/ubuntu2004 /bin/bash
Mã:
root@a2da49fdbea9:
Mã:
root@a2da49fdbea9$ cat /etc/os-releaseNAME="Ubuntu"VERSION="20.04.4 LTS (Focal Fossa)"ID=ubuntuID_LIKE=debianPRETTY_NAME="Ubuntu 20.04.4 LTS"VERSION_ID="20.04"HOME_URL="https://www.ubuntu.com/"SUPPORT_URL="https://help.ubuntu.com/"BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"VERSION_CODENAME=focalUBUNTU_CODENAME=focal