當前位置:首頁 » 雲伺服器 » docker搭建http代理伺服器

docker搭建http代理伺服器

發布時間: 2023-02-17 01:44:16

『壹』 linux下docker基礎環境搭建

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 報錯:curl: (6) Could not resolve host: get.docker.com; 未知的錯誤

# 解決:cat /etc/resolv.conf 里加了個 nameserver 8.8.8.8

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

驗證安裝:docker-compose --version

# compose 那個亞馬遜的老是下載不了,可換對應地址:

sudo curl -L https://get.cloud.io/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose


查看docker版本: docker --version

啟動docker: systemctl start docker 或者 service docker start

停止docker: systemctl stop docker

查看docker鏡像文件: docker images

查看docker內容器: docker ps -a


修改 /etc/dockers 文件下的配置文件 daemon.json (配置作用參考附錄)

操作完成後需要重啟docker: systemctl restart docker



服務端安裝git:yum install git

拉取一下文件和命令:git clone http://172.16.1.35/demo/demo-dockers.git

查看本地和遠端版本:git branch -a

切換本地分支為dev:git checkout -b dev origin/dev

啟動docker:service docker start

後 執行文件中的shell:./init.sh all (包含:mysql,mongo,redis,solr,activemq,tomcat)

刪除多下載的鏡像:docker rmi --force 3068f6bb852e

容器列表: docker ps -a

進入某個容器:docker exec -it [CONTAINER ID] /bin/bash

查看某個容器進程:docker top [NAMES]




查看 demo-dockers 目錄下 java-runtime 文件位置下有對應幾個項目配置文件 application-alpha.yml



修改配置文件後,需要重新啟動對應java項目,執行啟動腳本 ./init-java-runtime.sh + [項目名或者all]



獲取鏡像文件的地址:http://172.18.5.112:5001/repository/demo/ 查找對應需要的鏡像包



更換鏡像文件: vi java-runtime.yml 內,image後的對應項目後跟的包名中



重啟對應項目: ./init-java-runtime.sh [項目名]



查看對應項目啟動log: docker logs -f --tail 500 [生成的容器名稱]

(容器重啟:docker restart [容器id或名稱])



{

"authorization-plugins": [],//訪問授權插件

"data-root": "",//docker數據持久化存儲的根目錄

"dns": [],//DNS伺服器

"dns-opts": [],//DNS配置選項,如埠等

"dns-search": [],//DNS搜索域名

"exec-opts": [],//執行選項

"exec-root": "",//執行狀態的文件的根目錄

"experimental": false,//是否開啟試驗性特性

"storage-driver": "",//存儲驅動器

"storage-opts": [],//存儲選項

"labels": [],//鍵值對式標記docker元數據

"live-restore": true,//dockerd掛掉是否保活容器(避免了docker服務異常而造成容器退出)

"log-driver": "",//容器日誌的驅動器

"log-opts": {},//容器日誌的選項

"mtu": 0,//設置容器網路MTU(最大傳輸單元)

"pidfile": "",//daemon PID文件的位置

"cluster-store": "",//集群存儲系統的URL

"cluster-store-opts": {},//配置集群存儲

"cluster-advertise": "",//對外的地址名稱

"max-concurrent-downloads": 3,//設置每個pull進程的最大並發

"max-concurrent-uploads": 5,//設置每個push進程的最大並發

"default-shm-size": "64M",//設置默認共享內存的大小

"shutdown-timeout": 15,//設置關閉的超時時限(who?)

"debug": true,//開啟調試模式

"hosts": [],//監聽地址(?)

"log-level": "",//日誌級別

"tls": true,//開啟傳輸層安全協議TLS

"tlsverify": true,//開啟輸層安全協議並驗證遠程地址

"tlscacert": "",//CA簽名文件路徑

"tlscert": "",//TLS證書文件路徑

"tlskey": "",//TLS密鑰文件路徑

"swarm-default-advertise-addr": "",//swarm對外地址

"api-cors-header": "",//設置CORS(跨域資源共享-Cross-origin resource sharing)頭

"selinux-enabled": false,//開啟selinux(用戶、進程、應用、文件的強制訪問控制)

"userns-remap": "",//給用戶命名空間設置 用戶/組

"group": "",//docker所在組

"cgroup-parent": "",//設置所有容器的cgroup的父類(?)

"default-ulimits": {},//設置所有容器的ulimit

"init": false,//容器執行初始化,來轉發信號或控制(reap)進程

"init-path": "/usr/libexec/docker-init",//docker-init文件的路徑

"ipv6": false,//開啟IPV6網路

"iptables": false,//開啟防火牆規則

"ip-forward": false,//開啟net.ipv4.ip_forward

"ip-masq": false,//開啟ip掩蔽(IP封包通過路由器或防火牆時重寫源IP地址或目的IP地址的技術)

"userland-proxy": false,//用戶空間代理

"userland-proxy-path": "/usr/libexec/docker-proxy",//用戶空間代理路徑

"ip": "0.0.0.0",//默認IP

"bridge": "",//將容器依附(attach)到橋接網路上的橋標識

"bip": "",//指定橋接ip

"fixed-cidr": "",//(ipv4)子網劃分,即限制ip地址分配范圍,用以控制容器所屬網段實現容器間(同一主機或不同主機間)的網路訪問

"fixed-cidr-v6": "",//(ipv6)子網劃分

"default-gateway": "",//默認網關

"default-gateway-v6": "",//默認ipv6網關

"icc": false,//容器間通信

"raw-logs": false,//原始日誌(無顏色、全時間戳)

"allow-nondistributable-artifacts": [],//不對外分發的產品提交的registry倉庫

"registry-mirrors": [],//registry倉庫鏡像

"seccomp-profile": "",//seccomp配置文件

"insecure-registries": [],//非https的registry地址

"no-new-privileges": false,//禁止新優先順序(??)

"default-runtime": "runc",//OCI聯盟(The Open Container Initiative)默認運行時環境

"oom-score-adjust": -500,//內存溢出被殺死的優先順序(-1000~1000)

"node-generic-resources": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],//對外公布的資源節點

"runtimes": {//運行時

"cc-runtime": {

"path": "/usr/bin/cc-runtime"

},

"custom": {

"path": "/usr/local/bin/my-runc-replacement",

"runtimeArgs": [

"–debug"]

}

}

}



服務端安裝git:yum install git

拉取一下文件和命令:git clone http://172.16.1.35/gchat/gaga-dockers.git

指定分支克隆git clone -b dev-1 http://172.16.1.35/gchat/gaga-dockers.git

查看本地和遠端版本:git branch -a

切換本地分支為dev:git checkout -b dev origin/dev

啟動docker:service docker start

後 執行文件中的shell:./init.sh all (順序:mysql,mongo,redis,solr,activemq,tomcat)

刪除多下載的鏡像:docker rmi --force 3068f6bb852e

容器列表: docker ps -a

進入某個容器:docker exec -it [CONTAINER ID] /bin/bash

查看某個容器進程:docker top [NAMES]


# 查看是否安裝了tomcat: rpm -qa | grep tomcat

# 查找文件:find / -name tomcat

# 切換Tomcat目錄:cd /usr/local/tomcat/bin

# 關閉Tomcat:./shutdown.sh

# 查看docker中的java版本:docker exec container_name java -version


git拉代碼:git clone [email protected]:gchat/gaga-server.git

查看遠端分支:git branch -r

創建本地dev分支 並切換到dev分支:git checkout -b dev origin/dev

查看本地分支:git branch

切換回眸分支:git checkout master


查看所有JDK在系統中位置:/usr/libexec/java_home -V


參考地址: https://www.runoob.com/docker/docker-command-manual.html

查找docker 安裝包:yum list installed | grep docker

停掉docker:systemctl stop docker

刪除對應文件:yum remove docker.x86_64 docker-client.x86_64 docker-common.x86_64 -y

查看下docker rpm源:rpm -qa | grep docker

刪除對應路徑:rm -rf /var/lib/docker

注釋:

本次也是由於業務需要,需要重新搭建新的測試伺服器,這也是搭建中的一個插曲,後續會使用 Jenkins 進行相關的持續集成,大家一起學習分享!~

『貳』 Docker安裝frp實現遠程桌面連接

[TOC]

由於沒有公網IP,無法遠程連接家裡的電腦,搜到了 frp 這個項目,嘗試使用後發現效果不錯,所以寫出安裝過程分享。
frp是一個反向代理工具,可以將流量轉發到目標主機,包括TCP,UDP,HTTP,HTTPS。其基本原理是目標主機安裝客戶端連接到代理伺服器建立固定連接,客戶主機通過代理伺服器連接到目標主機進行訪問。
市面上有向日葵,TeamViewer也是類似原理,只不過這里變成代理伺服器需要我們自己提供,比如從騰訊雲或者阿里雲購買一台輕量伺服器作為代理伺服器,有固定的公網IP可以訪問。自建伺服器的好處是帶寬獨享,可以有更穩定的連接效果。
而製作鏡像是希望能夠方便多次部署。

SELinux是關閉狀態,不需要處理

防火牆是關閉狀態,把防火牆開啟

提前開放一段埠范圍,用於frp流量轉發。

查看docker

docker還沒安裝,需要自己安裝。
添加docker的安裝源。

查看docker-ce版本

這里看到提示 versionlock ,由於只是安裝frp,所以先把鎖刪掉。

Docker可以默認安裝最新版本,或者指定版本安裝,分別指令如下。

這里直接安裝最新版本,等待安裝完成

安裝完後確認docker版本,並啟動docker服務

登錄代理伺服器,創建目錄並將frp復制到目錄下

將frps.ini備份並編輯frps.ini。

編輯Dockerfile

配置完畢,可以開始構建鏡像
構建需要拉取CentOS,根據網速可能需要等待一會兒

查看鏡像,可以看到鏡像已經製作完成,TAG是v1

基於鏡像開啟容器

查看監聽埠是否開啟

查看容器日誌

目前看來一切正常。嘗試訪問監控面板。
之前配置埠 dashboard_port = 20001,假設代理伺服器IP是106.13.127.200,那麼通過 http://106.13.127.200:20001 訪問監控面板
正常情況下,會提示輸入之前配置的用戶和密碼,並看到如下頁面

代理伺服器配置好後,配置目標主機,
關於遠程連接的配置這里不做說明,默認已配置好遠程連接的參數,只是需要代理伺服器中轉。
frpc和frps配置類似,編輯frpc.ini

具體配置

運行frpc

查看frpc的日誌frpc.log

查看frps的日誌

目標主機與代理伺服器成功建立TCP和UDP連接

客戶主機打開遠程桌面連接,輸入IP和埠進行連接106.13.127.200:20010
可以看到成功連接,並且已啟用UDP

frp也支持P2P模式,即客戶主機和目標主機直接建立連接,理論上會有更好的連接效果。但是由於現實中的網路環境,這種模式可能失敗。本人嘗試過有失敗情況,也有成功情況。可以參考frp文檔自行嘗試。

Windows遠程桌面會嘗試使用UDP提供更好的效果,所以這里同時配置了TCP和UDP代理。如果希望有更好的效果,可以考慮配置GPU渲染。關於遠程桌面的流量和GPU有機會其他文章說明。

『叄』 如何給docker設置http代理

1、添加以下內容到/etc/sysconfig/docker文件
HTTP_PROXY=192.168.20.176:1080
https_proxy=192.168.20.176:1080
http_proxy=192.168.20.176:1080
HTTPS_PROXY=192.168.20.176:1080
export https_proxy http_proxy HTTPS_PROXY HTTP_PROXY

把192.168.20.176替換為你的代理IP
2、重啟docker服務

『肆』 linux怎麼安裝docker

1 在 CentOS 6.4 上安裝 docker
docker當前官方只支持Ubuntu,所以在 CentOS 安裝Docker比較麻煩(Issue #172)。
docker官方文檔說要求Linux kernel至少3.8以上,CentOS 6.4是2.6的內核,於是我哼哧哼哧的編譯安裝了最新的kernel 3.11.6,重啟後運行docker還是失敗,最後找到原因,是因為編譯時忘記集成aufs模塊了。aufs 需要和 kernel 一起編譯,很麻煩。
不過不需要這么麻煩,有強人已經編譯好了帶aufs模塊的內核,見這里Installing docker.io on centos 6.4 (64-bit)
1.1 取消selinux,因為它會干擾lxc的正常功能
sudo vim /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted

1.2 安裝 Fedora EPEL
sudo yum install http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

1.3 添加 hop5 repo地址
cd /etc/yum.repos.d
sudo wget http://www.hop5.in/yum/el6/hop5.repo

1.4 安裝 docker-io
sudo yum install docker-io

會自動安裝帶aufs模塊的3.10內核,以及docker-io包。
1.5 將 cgroup 文件系統添加到 /etc/fstab , 只有這樣docker才能正常工作
sudo echo "none /sys/fs/cgroup cgroup defaults 0 0" >> /etc/fstab

1.6 修改grub引導順序
sudo vim /etc/grub.conf
default=0

設置default為新安裝的內核的位置,一般是0
1.7 重啟
sudo reboot

1.8 檢查新內核是否引導成功
重啟後,檢查一下新內核是否引導起來了
uname -r
3.10.5-3.el6.x86_64

說明成功了
看一下 aufs是否存在
grep aufs /proc/filesystems
nodev aufs

說明存在
1.9 啟動 docker daemon 進程
sudo docker -d &

如果你在公司,且公司內部都是通過代理上網,則可以把代理伺服器告訴docker,用如下命令(參考這里):
sudo HTTP_PROXY=http://xxx:port docker -d &

1.10 下載 ubuntu 鏡像
sudo docker pull ubuntu

1.11 運行 hello world
sudo docker run ubuntu /bin/echo hello world
hello world

安裝成功了!!

『伍』 使用docker搭建STUN/TURN伺服器

前言     STUN,首先在RFC3489中定義,作為一個完整的NAT穿透解決方案,英文全稱是Simple Traversal of UDP Through NATs,即簡單的用UDP穿透NAT。     TURN,首先在RFC5766中定義,英文全稱是Traversal Using Relays around NAT:Relay Extensions to Session Traversal Utilities for NAT,即使用中繼穿透NAT:STUN的擴展       簡單的說,TURN與STURN的共同點都是通過修改應用層中的私網地址達到NAT穿透的效果,異同點是TURN是通過兩方通訊的「中間人」方式實現穿透。     ICE的全稱Interactive Connectivity Establ.shment(互動式連接建立),由IETF的MMUSIC工作組開發出來的,它所提供的是一種框架,使各種NAT穿透技術可以實現統一。     STUN和TURN伺服器和ICE可以參考閱讀: P2P技術詳解(三):P2P技術之STUN、TURN、ICE詳解     本文介紹如何通過DOCKER搭建STUN和TURN伺服器,步驟如下 1:創建Dockerfile,內容如下: FROM      ubuntu:14.04 MAINTAINER Patxi Gortázar <[email protected]> RUN apt-get update && apt-get install -y \   curl \   libevent-core-2.0-5 \   libevent-extra-2.0-5 \   libevent-openssl-2.0-5 \   libevent-pthreads-2.0-5 \   libhiredis0.10 \   libmysqlclient18 \   libpq5 \   telnet \   wget RUN wget http://turnserver.open-sys.org/downloads/v4.4.2.2/turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz \   && tar xzf turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz \   && dpkg -i coturn_4.4.2.2-1_amd64.deb COPY ./turnserver.sh /turnserver.sh ENV TURN_USERNAME test ENV TURN_PASSWORD test ENV REALM kurento.org ENV NAT true EXPOSE 3478 3478/udp ENTRYPOINT ["/turnserver.sh"] 2:創建turnserver.sh,內容如下 #!/bin/bash set-e if[$NAT="true"-a-z"$EXTERNAL_IP"];then #Try to get public IP PUBLIC_IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4)||echo"No public ip found on http://169.254.169.254/latest/meta-data/public-ipv4" if[-z"$PUBLIC_IP"];then PUBLIC_IP=$(curl http://icanhazip.com)||exit1 fi #Try to get private IP PRIVATE_IP=$(ifconfig|awk'/inet addr/{print substr($2,6)}'|grep -v 127.0.0.1)||exit1 exportEXTERNAL_IP="$PUBLIC_IP/$PRIVATE_IP" echo"Starting turn server with external IP:$EXTERNAL_IP" fi echo'min-port=49152'>/etc/turnserver.conf echo'max-port=65535'>>/etc/turnserver.conf echo'fingerprint'>>/etc/turnserver.conf echo'lt-cred-mech'>>/etc/turnserver.conf echo"realm=$REALM">>/etc/turnserver.conf echo'log-file stdout'>>/etc/turnserver.conf echo"user=$TURN_USERNAME:$TURN_PASSWORD">>/etc/turnserver.conf [$NAT="true"]&&echo"external-ip=$EXTERNAL_IP">>/etc/turnserver.conf exec/usr/bin/turnserver"$@" 3:使用docker build 創建鏡像,執行結果如下 [root@www]# docker build -t teststurn_1 . Sending build context to Docker daemon  4.096kB Step 1/11 : FROM      ubuntu:14.04 ---> 6e4f1fe62ff1 Step 2/11 : MAINTAINER Patxi Gortázar <[email protected]> ---> Using cache ---> 4460f9f84053 Step 3/11 : RUN apt-get update && apt-get install -y  curl  libevent-core-2.0-5  libevent-extra-2.0-5  libevent-openssl-2.0-5  libevent-pthreads-2.0-5  libhiredis0.10  libmysqlclient18  libpq5  telnet  wget ---> Using cache ---> 05ed9ced48a5 Step 4/11 : RUN wget http://turnserver.open-sys.org/downloads/v4.4.2.2/turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz  && tar xzf turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz  && dpkg -i coturn_4.4.2.2-1_amd64.deb ---> Using cache ---> d82ed28fdac9 Step 5/11 : COPY ./turnserver.sh /turnserver.sh ---> Using cache ---> 1d37a488282c Step 6/11 : ENV TURN_USERNAME test ---> Running in bfd88f08db42 Removing intermediate container bfd88f08db42 ---> cf8af0504b95 Step 7/11 : ENV TURN_PASSWORD test ---> Running in b8ef33b7c213 Removing intermediate container b8ef33b7c213 ---> 32a832f23169 Step 8/11 : ENV REALM kurento.org ---> Running in bbe129edf5b3 Removing intermediate container bbe129edf5b3 ---> 21fdfe34689b Step 9/11 : ENV NAT true ---> Running in 5bdfe8555d5e Removing intermediate container 5bdfe8555d5e ---> dc7fc896841c Step 10/11 : EXPOSE 3478 3478/udp ---> Running in 67aaa1966f68 Removing intermediate container 67aaa1966f68 ---> a12646ed45ff Step 11/11 : ENTRYPOINT ["/turnserver.sh"] ---> Running in b8fc2ff09265 Removing intermediate container b8fc2ff09265 ---> f5e5acad0f81 Successfully built f5e5acad0f81 Successfully tagged teststurn_1:latest 執行完後可以看到自己創建的鏡像名稱為teststurn_1  4:啟動docker的鏡像,並開啟埠3478      docker run -d -p 3478:3478 -p 3478:3478/udp teststurn_1    啟動後需要等待一兩分鍾才能測試順暢 5:測試伺服器效果     打開 https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/  並輸入自己的本機IP和埠,分別測試兩種協議服務是否生效

『陸』 如何給docker設置http代理

解決方案一:

停止docker服務,手動以使用2375埠監聽所有網路介面的方式啟動docker daemon。
$ systemctl stop docker.service
$ nohup docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &

解決方案二:

編輯配置文件,Ubuntu下是/etc/default/docker,CentOS下是/etc/sysconfig/docker。不過通過修改這兩個文件來配置daemon已經是discouraged的了。不鼓勵使用這種方法。HTTP_PROXY="http://[proxy-addr]:[proxy-port]/"
HTTPS_PROXY="https://[proxy-addr]:[proxy-port]/"
export HTTP_PROXY HTTPS_PROXY

解決方案三:

該方法是持久化的,修改後會一直生效。該方法覆蓋了默認的docker.service文件。

1. 為docker服務創建一個內嵌的systemd目錄
$ mkdir -p /etc/systemd/system/docker.service.d

2. 創建/etc/systemd/system/docker.service.d/http-proxy.conf文件,並添加HTTP_PROXY環境變數。其中[proxy-addr]和[proxy-port]分別改成實際情況的代理地址和埠:
[Service]
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/"

3. 如果還有內部的不需要使用代理來訪問的Docker registries,那麼嗨需要制定NO_PROXY環境變數:
[Service]
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=https://[proxy-addr]:[proxy-port]/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"

4. 更新配置:
$ systemctl daemon-reload

5. 重啟Docker服務:
$ systemctl restart docker

『柒』 使用 OpenResty Docker 鏡像快速搭建 Web 伺服器

在日常工作中經常需要搭建 Web 伺服器和反向代理伺服器,用於測試和生產的情況都有。雖然用於測試的場景有很多便捷的方法,但是在向生產環境遷移時會導致有些工作不能復用。綜合看起來,還是用 Nginx 最為方便。本文嘗試提供一些配置模板。

需要提前了解的內容:

選擇 OpenResty 的原因:

OpenResty 默認安裝位置:

安裝目錄中 Nginx 相關文件:

默認服務指向 Web 文件夾

映射關系:

默認 配置文件 位置(後續的配置會覆蓋這里的內容):

在絕大多數情況,覆蓋上面的配置文件就可以了。

但是,這些配置文件的內容,只能是包含在 http 段內的配置,並不能作為完整的配置文件使用。

比如:

可以包含: upstream 、 server

不能包含: tcp

完整配置文件位置:

配置文件相關信息:

https://github.com/openresty/docker-openresty/blob/master/README.md#nginx-config-files

鏡像默認配置為到 /etc/nginx/conf.d/ 讀取配置,所以要把配置文件放到這里。其餘的掛載或埠映射根據需要進行。

假設需要建立如下服務:

(1)通過 http://localhost:20000/shared1/ 訪問 /tmp/webroot/shared1

(2)通過 http://localhost:20000/shared2/ 訪問 /tmp/webroot/myshare

(3)通過 http://localhost:20000// 訪問 http://www..com

配置文件:

啟動命令行:

詳情參考: docker-openresty - Docker tooling for OpenResty - Nginx Config Files

模擬為應用提供多級反向代理,查看訪問鏈路。簡單分為三部分:

使用 Docker Compose 來配置並串聯各容器,文件較多,訪問 GitHub 查看。

(完)

『捌』 如何搭建及使用docker registry

registry是什麼?
registry是Docker的鏡像存儲服務,docker hub上的registry鏡像見Registry官方鏡像,更多詳細信息請參見源碼
搭建registry
在伺服器上執行如下命令安裝docker,這里選擇騰訊雲(Ubuntu Server 14.04.1 LTS 64位)鏡像來創建伺服器
curl -fsSL https://get.docker.com/ | sh

安裝docker-compose Docker Compose是一個定義及運行多個Docker容器的工具。使用Docker Compose只需要在一個配置文件中定義多個Docker容器,然後使用一條命令將多個容器啟動,Docker Compose會通過解析容器間的依賴關系,按先後順序啟動所定義的容器。詳見Docker Compose
curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose

啟動registry服務,此例中包含nginx和registry兩個容器,涉及的包及配置文件請參見附件,解壓後,直接執行如下命令即可創建服務。
docker-compose up -d

停止服務
docker-compose stop

重啟服務
docker-compose restart

下線服務
docker-compose down

上傳鏡像
因為上面搭建的registry服務是http的,所以docker啟動參數需要配置--insecure-registry localhost選項,修改/etc/default/docker文件
DOCKER_OPTS="--insecure-registry localhost"

重啟docker
service docker restart

拉取上傳鏡像 docker pull;docker tag;docker push(tag默認為latest)
docker pull hello-world
docker tag hello-world localhost/library/hello-world
docker push localhost/library/hello-world

下載鏡像
docker pull localhost/library/hello-world

刪除鏡像
docker rmi localhost/library/hello-world

獲取鏡像倉庫列表
# curl http://localhost/v2/_catalog
{"repositories":["library/hello-world"]}

未上傳鏡像前的輸出如下:
# curl http://localhost/v2/_catalog
{"repositories":[]}

獲取鏡像tag列表
# curl -X GET http://localhost/v2/library/hello-world/tags/list
{"name":"library/hello-world","tags":["latest"]}

獲取鏡像manifests信息
# curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://localhost/v2/library/hello-world/manifests/latest
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1473,
"digest": "sha256:"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 974,
"digest": "sha256:"
}
]
}

其中即為執行docker images時看到的IMAGE ID。 layers表示了鏡像的層次關系,可以通過layers中的digest來拉取blob,見下面獲取鏡像blob
獲取鏡像blob
在上面獲取hello-world:latest鏡像的manifests信息中可以看到其只有一個layer,以此為例來看如何獲取鏡像blob。從拉取的結果可以看到獲取的blob與文件sha256是一致的。執行docker pull實際上就是首先獲取到鏡像的manifests信息後,再拉取blob的。
# curl -s -X GET http://localhost/v2/library/hello-world/blobs/sha256: -o hello-world.blob
# ls -l hello-world.blob
-rw-r--r-- 1 root root 974 Nov 23 09:56 hello-world.blob
# sha256sum hello-world.blob
hello-world.blob

##刪除鏡像(soft delete)
首先通過curl -i 參數獲取到鏡像的Docker-Content-Digest,registry 2.3及以後的版本必須在header中指定Accept: application/vnd.docker.distribution.manifest.v2+json,否則默認返回的是schema1的digest,其與schema2的digest不同,使用不指定上述頭信息返回的digest刪除時會返回404。
# curl -i -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://localhost/v2/library/hello-world/manifests/latest

HTTP/1.1 200 OK
Server: nginx/1.11.5
Date: Wed, 23 Nov 2016 02:17:51 GMT
Content-Type: application/vnd.docker.distribution.manifest.v2+json
Content-Length: 524
Connection: keep-alive
Docker-Content-Digest: sha256:
Docker-Distribution-Api-Version: registry/2.0
Etag: "sha256:"

{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1473,
"digest": "sha256:"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 974,
"digest": "sha256:"
}
]
}

根據上一步返回的Docker-Content-Digest刪除,返回202表示刪除成功
# curl -k -v -s -X DELETE http://localhost/v2/library/hello-world/manifests/sha256:

* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 80 (#0)
> DELETE /v2/library/hello-world/manifests/sha256: HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost
> Accept: */*
>
< **HTTP/1.1 202 Accepted**
* Server nginx/1.11.5 is not blacklisted
< Server: nginx/1.11.5
< Date: Wed, 23 Nov 2016 02:29:59 GMT
< Content-Type: text/plain; charset=utf-8
< Content-Length: 0
< Connection: keep-alive
< Docker-Distribution-Api-Version: registry/2.0
<
* Connection #0 to host localhost left intact

確認結果
# curl -X GET http://localhost/v2/library/hello-world/tags/list
{"name":"library/hello-world","tags":null}

刪除鏡像(hard delete)
在上一步中,只是刪除了鏡像的manifests信息,解引用的blob還在佔用磁碟空間,執行如下命令可以查看可以刪除的blob
docker exec -it myregistry_registry_1 /bin/registry garbage-collect --dry-run /etc/registry/config.yml

要刪除blob,釋放磁碟空間,需要執行下面的命令。需要特別注意的是在執行下面的命令時registry必須是只讀模式(只讀模式可在registry配置文件中設置),否則可能會導致數據不一致。
docker exec -it myregistry_registry_1 /bin/registry garbage-collect /etc/registry/

『玖』 如何給docker設置http代理

式鏡像打標簽:使用docker tag命令或者執行docker build候用-t傳遞參數兩種情況參數形式通repository_name:tag_name例:docker tag myrepo:mytag資源庫傳Docker Hub資源庫名字加由Docker Hub用戶名斜線組前綴例:amouat/myrepo:mytag沒添加tag部參數例:docker tag myrepo:1.0 myrepoDocker自給latest標簽前面些內容或許已經熟知其實點內容並沒神奇
能鏡像標簽latest認資源庫新鏡像資源庫擁者約定擁latest標簽鏡像才定新鏡像例我輕易鏡像變帶latest標簽鏡像例:
$ docker images myrepo
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

熱點內容
openwrt編譯取消跑碼 發布:2025-05-19 16:50:28 瀏覽:125
知道了寬頻賬號密碼如何連接 發布:2025-05-19 16:49:49 瀏覽:655
時間輪資料庫 發布:2025-05-19 16:45:20 瀏覽:269
ipad緩存垃圾怎麼清理 發布:2025-05-19 16:44:46 瀏覽:536
視頻加解壓 發布:2025-05-19 16:35:28 瀏覽:6
c語言大學教程第六版 發布:2025-05-19 16:04:21 瀏覽:741
androidvr播放器 發布:2025-05-19 15:55:32 瀏覽:965
我的世界pc如何創建伺服器 發布:2025-05-19 15:51:24 瀏覽:734
搶腳本 發布:2025-05-19 15:47:14 瀏覽:407
ct4哪個配置性價比最高 發布:2025-05-19 15:38:02 瀏覽:954