由於工做緣由須要使用Java調用裝有docker環境的機器完成打鏡像 上傳鏡像庫的操做,進過調查,發現了兩個比較經常使用的Java API工具,分別是 docker-java 和 spotify-docker-client,Github地址分別以下:java
docker-java:https://github.com/docker-java/docker-javalinux
spotify-docker-client:https://github.com/spotify/docker-clientgit
二者作個簡單的對比:github
Star/Fork(2018/12/19) | 文檔豐富度 | API功能覆蓋度 | 使用複雜度 | |
docker-java | 1188/638 | 相對完善 | 基本功能 | 簡單 |
spotify-docker-client | 1101/450 | 相對完善 | 功能實現較多 | 相對複雜 |
1.升級docker版本(可選)docker
#刪除舊的版本的docker yum remove docker docker-common docker-selinux docker-engine yum erase docker docker-common docker-client docker-compose #設置docker yum源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #update yum update #要先安裝docker-ce-selinux-17.03.2.ce,不然安裝docker-ce會報錯 yum install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm #以查看全部倉庫中全部docker版本,並選擇特定版本安裝 yum list docker-ce --showduplicates | sort -r #因爲repo中默認只開啓stable倉庫,故這裏安裝的是最新穩18.03.0.ce-1.el7.centos yum install docker-ce #安裝指定的版本 例如: yum install docker-ce-17.12.0.ce-1.el7.centos sudo yum install <FQPN> #啓動 systemctl start docker #查看版本 docker version
2. 開啓docker遠程訪問centos
默認狀況下,Docker守護進程Unix socket(/var/run/docker.sock)來進行本地進程通訊,而不會監放任何端口,所以只能在本地使用docker客戶端或者使用Docker API進行操做。若是想在其餘主機上操做Docker主機,就須要讓Docker守護進程打開一個HTTP Socket,這樣才能實現遠程通訊。bash
方法一:socket
vi /lib/systemd/system/docker.service
找到Execstart=/usr/bin/dockerd後加上-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 退出而且保存maven
方法二:tcp
Centos 7.X docker-ce:
修改/etc/sysconfig/docker文件,在最後增長一行DOCKER_OPTS
# docker-latest daemon can be used by starting the docker-latest unitfile. # To use docker-latest client, uncomment below lines #DOCKERBINARY=/usr/bin/docker-latest #DOCKERDBINARY=/usr/bin/dockerd-latest #DOCKER_CONTAINERD_BINARY=/usr/bin/docker-containerd-latest #DOCKER_CONTAINERD_SHIM_BINARY=/usr/bin/docker-containerd-shim-latest DOCKER_OPTS="-H unix:///var/run/docker.sock -H 0.0.0.0:2375"
方法一二都須要使配置生效:
#docker.service changed on disk. Run 'systemctl daemon-reload' to reload units. systemctl daemon-reload systemctl restart docker.service
Centos 6.x docker 1.X.X
$ sudo vi /etc/sysconfig/docker other_args="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock" $ sudo service docker restart # centos docker的其它操做方式 $ sudo service docker start $ sudo service docker stop $ /bin/systemctl start docker.service
3.引入spotify-docker-client依賴(以標準maven工程爲例)
錯誤分析:
1.systemctl start docker 報錯,內容:
Dec 19 19:13:09 VM_0_4_centos dockerd[13361]: time="2018-12-19T19:13:09.334930508+08:00" level=warning msg="[!] DON'T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON'T KNOW WHA Dec 19 19:13:09 VM_0_4_centos dockerd[13361]: time="2018-12-19T19:13:09.339318789+08:00" level=info msg="libcontainerd: new containerd process, pid: 13364" Dec 19 19:13:10 VM_0_4_centos dockerd[13361]: time="2018-12-19T19:13:10.343022632+08:00" level=error msg="[graphdriver] prior storage driver overlay2 failed: driver not supported" Dec 19 19:13:10 VM_0_4_centos dockerd[13361]: Error starting daemon: error initializing graphdriver: driver not supported Dec 19 19:13:10 VM_0_4_centos systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE Dec 19 19:13:10 VM_0_4_centos systemd[1]: Failed to start Docker Application Container Engine. -- Subject: Unit docker.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit docker.service has failed. -- -- The result is failed.
緣由:/var/lib/docker 目錄有舊的container 文件,版本變動後須要刪除
解決辦法:
mv /var/lib/docker /var/lib/docker.old service docker start rm -rf /var/lib/docker.old