文档章节

Docker Java API 开发

MrPei
 MrPei
发布于 2018/12/19 15:27
字数 884
阅读 42
收藏 5

因为工作原因需要使用Java调用装有docker环境的机器完成打镜像 上传镜像库的操作,进过调查,发现了两个比较常用的Java API工具,分别是 docker-java 和 spotify-docker-client,Github地址分别如下:

docker-java:https://github.com/docker-java/docker-java

spotify-docker-client:https://github.com/spotify/docker-client

两者做个简单的对比:

  Star/Fork(2018/12/19) 文档丰富度 API功能覆盖度 使用复杂度
docker-java 1188/638 相对完善 基本功能 简单
spotify-docker-client 1101/450 相对完善 功能实现较多 相对复杂

 

1.升级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远程访问

默认情况下,Docker守护进程Unix socket(/var/run/docker.sock)来进行本地进程通信,而不会监听任何端口,因此只能在本地使用docker客户端或者使用Docker API进行操作。如果想在其他主机上操作Docker主机,就需要让Docker守护进程打开一个HTTP Socket,这样才能实现远程通信。

方法一:

vi /lib/systemd/system/docker.service

找到Execstart=/usr/bin/dockerd后加上-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock  退出并且保存

方法二:

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

 

© 著作权归作者所有

共有 人打赏支持
MrPei
粉丝 6
博文 75
码字总数 34302
作品 0
朝阳
高级程序员
私信 提问
为 Java EE 应用提供的 9 种 Docker 方法

你想在 Java EE 应用中使用 Docker 吗? 一个典型的Java EE应用程序由应用服务器(例如:WildFly)和数据库(例如:Mysql)组成的。除此以外,你也许还需要一个前端负载:例如Apache,用于多...

oschina
2015/03/12
12.4K
20
JDocker v1.0.2 一大波优化和修复来袭

JDocker 是基于 Docker1.12+ (Docker API 1.24+) 封装的开发Docker包,通过封装 Docker API 使开发者可以快速的使用 Java 开发出控制和操作 Docker 的应用,使用流式操作,简单明了。 完善的测...

愚民日记
2017/06/01
1K
11
Docker, Java EE 7, 和 Maven with WebLogic 12.1.3

WebLogic 12.1.3 已经发布了,这个版本包括了Java EE7里对数据库的Web应用开发最为重要的API,以下是这个版本支持的部分规范: Java Persistence API 2.1 (使用EclipseLink实现) JAX-RS 2.0 ...

oschina
2014/07/02
4.9K
6
使用Docker运行Java应用程序

使用Docker运行Java应用程序 部署软件混乱; 需要克服许多问题才能生成顺畅且无痛的部署过程。诸如环境设置,依赖性地狱,编排管理以及系统可用性等问题是部署新应用程序时遇到的许多问题中的...

优惠券发放
2018/05/30
0
0
如何提高阿里云上应用的可用性(一)

如今,开发并上线一款应用十分方便。因为云计算提供了从最基础的计算资源如服务器网络、数据库服务、中间件PaaS平台到各种应用支撑的云管理服务,同时开源社区的迅猛发展也提供了从数据库、缓...

阿里云云栖社区
2018/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

07 分支管理 —— Feature分支

07 分支管理 —— Feature分支 软件开发中,总有无穷无尽的新的功能要不断添加进来。添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好...

lwenhao
13分钟前
0
0
matlab-线性代数 创建 N阶数量矩阵 N阶单位矩阵 对角矩阵 范德蒙矩阵 等差数列

  matlab : R2018a 64bit     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   创建N阶数量矩阵 code cle......

志成就
24分钟前
0
0
python 利用 descriptor 实现自己的 property

1.概念简介 1.1 property 在 python 代码中,property 是非常常见的一个内置函数。property 可以为一个 python 类的 attribute 设置 getter/setter,可以类比之 C# 的 properties。 见下面的...

御坂网络路由器
58分钟前
3
0
xssfilter-代码段

class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { /** * @param request */ public XssHttpServletRequestWrapper(HttpServletRequest request) { super(request); ......

qiang123
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部