Docker Java API 開發

由於工做緣由須要使用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
相關文章
相關標籤/搜索