国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

利用阿里云 OSS 搭建私有 Docker 倉庫

haoguo / 1266人閱讀

摘要:前言最近開始研究的應用,于是打算搭建一個私有的倉庫,并使用阿里云的作為存儲引擎。登陸成功后,執行以下命令即可上傳配置阿里云首先在剛才執行的命令行窗口中按退出服務。待上傳完畢,可以打開阿里云的控制臺界面檢查文件是否被正確上傳上去了。

前言

最近開始研究 Docker 的應用,于是打算 搭建一個私有的 Docker 倉庫,并使用阿里云的 OSS 作為存儲引擎 。從網上搜索到的資料大都是比較舊的,新版本的 Registry 服務與舊版本的差別比較大,瞎折騰了一天,踩坑無數。突然有感, 網上的過時資料(或者說得不清不楚的)真是坑死人不償命 ,還是得把這兩天摸索出來的門道記錄下來,一是好讓自己過一段時間后再部署 Docker 倉庫時不用重踩一次坑,二來也順便給后來者提個醒。

系統環境

客戶端 docker 版本

docker version
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.3
Git commit: a34a1d5
Built: Fri Nov 20 17:56:04 UTC 2015
OS/Arch: darwin/amd64

Server:
Version: 1.9.1
API version: 1.21
Go version: go1.4.3
Git commit: a34a1d5
Built: Fri Nov 20 17:56:04 UTC 2015
OS/Arch: linux/amd64
服務器端 docker 版本

Boot2Docker version 1.9.1, build master : cef800b - Fri Nov 20 19:33:59 UTC 2015
Docker version 1.9.1, build a34a1d5
客戶端 docker-compose 版本

docker-compose version 1.5.2, build 7240ff3
docker-py version: 1.5.0
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014
如果系統沒有docker-compose命令,可以執行以下命令安裝:

$ curl -L https://github.com/docker/com...uname -s-uname -m > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
啟動 Registry 服務

安裝

為了發揮 Docker 容器技術的優勢,我們直接使用 Docker 鏡像來部署服務。

首先在 服務器端 新建工作目錄并進入該目錄:

$ mkdir my_registry && cd my_registry
在當前目錄下新建文件docker-compose.yml:

registry:
restart: always
image: "registry:2"
ports:

- 127.0.0.1:5000:5000

volumes:

- ./auth:/auth
- ./data:/var/lib/registry

environment:

- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd

在啟動 Registry 服務時,需要用到以下兩個目錄:

auth目錄用于存放docker login時的賬號和密碼
data目錄用于存放docker push時上傳上來的文件
執行以下命令新建這兩個目錄:

$ mkdir auth && mkdir data
接著,創建一個測試賬號(用戶名:test,密碼:123456)并保存到auth/htpasswd中:

$ htpasswd -Bbn test 123456 > auth/htpasswd
現在我們來啟動 Registry 服務:

$ docker-compose up -d
由于本地沒有名為registry:2的鏡像,控制臺可能會打印出如下信息然后暫停一陣:

Pulling registry (registry:2)...
稍等一兩分鐘,可以看到控制臺打印出如下信息則說明已經啟動成功了:

Creating dockertest_registry_1
Attaching to dockertest_registry_1
registry_1 | time="2016-01-13T21:57:14Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." go.version=go1.5.2 instance.id=25aa4d1d-0510-4cb6-9006-1083bff5fc15 version=v2.2.1
registry_1 | time="2016-01-13T21:57:14Z" level=info msg="redis not configured" go.version=go1.5.2 instance.id=25aa4d1d-0510-4cb6-9006-1083bff5fc15 version=v2.2.1
registry_1 | time="2016-01-13T21:57:14Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.5.2 instance.id=25aa4d1d-0510-4cb6-9006-1083bff5fc15 version=v2.2.1
registry_1 | time="2016-01-13T21:57:14Z" level=info msg="Starting upload purge in 11m0s" go.version=go1.5.2 instance.id=25aa4d1d-0510-4cb6-9006-1083bff5fc15 version=v2.2.1
registry_1 | time="2016-01-13T21:57:14Z" level=info msg="listening on [::]:5000" go.version=go1.5.2 instance.id=25aa4d1d-0510-4cb6-9006-1083bff5fc15 version=v2.2.1
測試

現在再打開一個命令行窗口,并進入my_registry目錄。

執行以下命令創建一個新鏡像:

$ docker tag registry:2 127.0.0.1:5000/test/registry
說明:鏡像名為127.0.0.1:5000/test/registry,其中127.0.0.1:5000表示服務器地址,test/registry表示鏡像名。

上傳之前要先登錄:

$ docker login 127.0.0.1:5000
說明:按提示輸入上文創建的用戶名和密碼,郵箱可以不用填寫。

登陸成功后,執行以下命令即可上傳:

$ docker push 127.0.0.1:5000/test/registry
配置阿里云 OSS

首先在剛才執行docker-compose up的命令行窗口中按CTRL + C退出服務。

將文件docker-compose.yml改為以下內容:

registry:
restart: always
image: "registry:2"
ports:

- 127.0.0.1:5000:5000

volumes:

- ./auth:/auth

environment:

- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
- REGISTRY_STORAGE=oss
- REGISTRY_STORAGE_OSS_ACCESSKEYID=your_oss_accesskey_id
- REGISTRY_STORAGE_OSS_ACCESSKEYSECRET=your_oss_accesskey_secret
- REGISTRY_STORAGE_OSS_REGION=your_oss_region
- REGISTRY_STORAGE_OSS_BUCKET=your_oss_bucket
- REGISTRY_STORAGE_OSS_ENDPOINT=your_oss_bucket.your_oss_region.aliyuncs.com

說明:由于使用阿里云 OSS 作為存儲引擎,所以不需要再將文件存儲到本地,因此將volumes中的data目錄配置去掉;environment新增了REGISTRY_STORAGE系列的環境變量配置,需要將該部分的值替換為對應的accesskey_id、accesskey_secret、region、bucket和endpoint等信息。

刪除data目錄并重新啟動服務:

$ rm -Rf data && docker-compose up
再執行剛才的命令上傳鏡像:

$ docker push 127.0.0.1:5000/test/registry
可以感覺到這次的上傳速度沒有第一次的快,因為它還需要上傳到阿里云 OSS。待上傳完畢,可以打開阿里云 OSS 的控制臺界面檢查文件是否被正確上傳上去了。

配置 SSL 證書

如果我們要在客戶端(不是在服務器端測試)pull或push鏡像時,docker使用的是https協議,因此會報unable to ping registry endpoint錯誤:

The push refers to a repository [registry.example.com:5000/test] (len: 1)
unable to ping registry endpoint https://registry.example.com:...
v2 ping attempt failed with error: Get https://registry.example.com:... dial tcp registry.example.com:5000: i/o timeout
v1 ping attempt failed with error: Get https://registry.example.com:... dial tcp 199.99.99.9:9000: i/o timeout
所以必須要配置 SSL 證書。

安裝

首先需要準備證書文件,分別保存到auth/domain.crt和auth/domain.key中。

新建 Nginx 的配置文件auth/nginx.conf:

upstream docker-registry {
server registry:5000;
}

Set a variable to help us decide if we need to add the "Docker-Distribution-Api-Version" header. The registry always sets this header. In the case of nginx performing auth, the header will be unset since nginx is auth-ing before proxying.

map $upstream_http_docker_distribution_api_version $docker_distribution_api_version {
"registry/2.0" "";
default registry/2.0;
}

server {
listen 443 ssl;
server_name myregistrydomain.com;

# SSL
ssl_certificate /etc/nginx/conf.d/domain.crt;
ssl_certificate_key /etc/nginx/conf.d/domain.key;

# Recommendations from https://raymii.org/s/tutorial...
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;

# disable any limits to avoid HTTP 413 for large image uploads
client_max_body_size 0;

# required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/doc...
chunked_transfer_encoding on;

location /v2/ {

# Do not allow connections from docker 1.5 and earlier
# docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
if ($http_user_agent ~ "^(docker/1.(3|4|5(?!.[0-9]-dev))|Go ).*$" ) {
  return 404;
}

# To add basic authentication to v2 use auth_basic setting.
auth_basic "Registry realm";
auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd;

## If $docker_distribution_api_version is empty, the header will not be added.
## See the map directive above where this variable is defined.
add_header "Docker-Distribution-Api-Version" $docker_distribution_api_version always;

proxy_pass                          http://docker-registry;
proxy_set_header  Host              $http_host;   # required for docker client"s sake
proxy_set_header  X-Real-IP         $remote_addr; # pass on real client"s IP
proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
proxy_set_header  X-Forwarded-Proto $scheme;
proxy_read_timeout                  900;

}
}
將文件docker-compose.yml改為如下內容:

nginx:
image: "nginx:1.9"
ports:

- 443:443

links:

- registry:registry

volumes:

- ./auth/:/etc/nginx/conf.d

registry:
restart: always
image: "registry:2"
ports:

- 127.0.0.1:5000:5000

environment:

- REGISTRY_STORAGE=oss
- REGISTRY_STORAGE_OSS_ACCESSKEYID=your_oss_accesskey_id
- REGISTRY_STORAGE_OSS_ACCESSKEYSECRET=your_oss_accesskey_secret
- REGISTRY_STORAGE_OSS_REGION=your_oss_region
- REGISTRY_STORAGE_OSS_BUCKET=your_oss_bucket
- REGISTRY_STORAGE_OSS_ENDPOINT=your_oss_bucket.your_oss_region.aliyuncs.com

說明:刪除registry項目的environment中REGISTRY_AUTH開頭的變量以及volumes項,因為auth認證已經在 Nginx 中配置了。

執行以下命令啟動服務:

$ docker-compose up
說明:如果本地不存在名為nginx:1.9的鏡像,控制臺可能會打印出Pulling nginx (nginx:1.9)...并先下載該鏡像。

測試

假設剛才配置的證書域名為docker.ucdok.com,現在我們 在客戶端執行以下命令 登錄:

$ docker login docker.ucdok.com
生成新的鏡像:

$ docker pull ubuntu
$ docker tag ubuntu docker.ucdok.com/test/ubuntu
上傳新的鏡像:

$ docker push docker.ucdok.com/test/ubuntu
其他問題

增加用戶

可以執行htpasswd命令來創建,并將其保存到auth/htpasswd文件中:

$ htpasswd -Bbn username password >> auth/htpasswd
在后臺啟動服務

啟動服務時增加-d參數:

$ docker-compose up -d
停止后臺服務

在docker-compose.yml文件所在目錄執行以下命令:

$ docker-compose stop

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26943.html

相關文章

  • 搭建私有Docker倉庫,存儲到阿里OSS

    摘要:包括兩個關鍵組成部分和。簡單理解,第一個是負責存儲的,第二個是負責管理鏡像的。使用阿里云的保存鏡像文件默認鏡像文件存到本地磁盤,這個可擴展性不是很好,我們可以把鏡像文件存到中。注查詢網址阿里云的其他參數查詢網址 Docker Registry簡介 Docker Registry是開源的軟件,可以進行存儲和分發Docker鏡像。Docker Registry包括兩個關鍵組成部分:Doc...

    Cc_2011 評論0 收藏0
  • SpringBoot 整合 阿里OSS 存儲服務,快來免費搭建一個自己的圖床

    摘要:筆主很早就開始用阿里云存儲服務當做自己的圖床了。阿里云對象存儲文檔,本篇文章會介紹到整合阿里云存儲服務實現文件上傳下載以及簡單的查看。 Github 地址:https://github.com/Snailclimb/springboot-integration-examples(SpringBoot和其他常用技術的整合,可能是你遇到的講解最詳細的學習案例,力爭新手也能看懂并且能夠在看完...

    鄒強 評論0 收藏0
  • Nexus3私有倉庫搭建 docker+maven+npm

    摘要:安裝號稱是世界上最流行的私服管理軟件可以搭建幾乎目前所有常見的倉庫如等更是增加了對倉庫的支持應該是搭建私服的唯一選擇有兩個版本和其中版本是免費專業版需要收費對于日常的倉庫管理已經足夠用支持二進制文件安裝和安裝這里選擇安裝簡單方便運行以下命令 安裝 Nexus號稱是世界上最流行的私服管理軟件(The worlds most popular repository),可以搭建幾乎目前所有常見...

    bang590 評論0 收藏0
  • DevOps 從零開始-倉庫環境搭建Docker,Nginx,Nexus,Gitlab,免費Htt

    摘要:本文章用于描述如何從零開始進行阿里云倉庫的搭建,以及過程中遇到的相關問題。涉及的內容包括,,,,。目標硬盤掛載阿里云額外購買的硬盤服務,需要僅掛載后才可以正常使用。域名代理免費代理的域名通過阿里云域名解析暴露到外網。 本文章用于描述如何從零開始進行阿里云倉庫的搭建,以及過程中遇到的相關問題。涉及的內容包括Docker,Nginx,Nexus,Gitlab,Https。 背景 需要搭建一...

    FWHeart 評論0 收藏0

發表評論

0條評論

haoguo

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<