背景:
使用com.github.docker-java库可以很方便地在Java中操作Docker。下面是一个详细的教程,包括创建镜像、创建容器、启动容器、停止容器和删除容器的步骤以及每一步的说明。
前提:
首先,在你的Java项目中添加com.github.docker-java库的依赖。你可以在你的构建工具(如Maven或Gradle)的配置文件中添加以下依赖项:
|
创建Docker客户端
|
通过withDockerHost()
方法设置了Docker守护进程的连接地址,withDockerCertPath()
方法设置了TLS证书的路径,withApiVersion()
方法设置了Docker API的版本。最后,通过调用build()
方法构建了一个DockerClient
对象。
-
DockerClientBuilder
类是用于构建和配置DockerClient
对象的构建器类。它提供了一组方法,用于设置与Docker守护进程通信所需的参数和配置。 -
getInstance()
是DockerClientBuilder
类的静态方法。通过调用该方法,可以获取DockerClientBuilder
的单例实例。 -
DockerClientBuilder
使用单例模式的设计,主要是为了提供对Docker守护进程的访问的全局共享实例。这样可以避免重复创建和销毁DockerClientBuilder
实例,提高了性能和效率。 -
使用
DockerClientBuilder.getInstance()
方法获取DockerClientBuilder
的实例后,可以通过该实例进行链式调用,设置各种与Docker守护进程通信相关的参数和配置。 -
通过链式调用
DockerClientBuilder
的方法,可以设置例如Docker守护进程的连接地址、认证信息、超时时间、TLS配置等。这些方法包括withDockerHost()
、withDockerCertPath()
、withDockerConfig()
、withApiVersion()
等。 -
最后,通过调用
build()
方法,可以构建出一个DockerClient
对象,用于与Docker守护进程进行交互。该对象可以执行各种Docker操作,如创建容器、启动容器、构建镜像等。
创建镜像
|
withDockerfile(new File(dockerfilePath))
:指定Dockerfile的路径,用于构建镜像。withTags(Collections.singleton(imageName + ":" + imageTag))
:指定镜像的标签。可以通过withTags
方法传递一个包含镜像标签的集合,这里使用Collections.singleton()
方法创建一个只包含一个元素的集合
withBaseDirectory(baseDirectory)
:设置基础目录,该目录中包含了构建镜像所需的所有文件。与withDockerfile()
一起使用时,会自动将基础目录中的Dockerfile关联到构建命令中。withNoCache()
:禁用缓存,每次构建镜像时都会重新执行所有命令,确保使用最新的文件和依赖项。withPull(pull)
:指定是否应该在构建之前拉取最新的基础镜像,默认为false
,即不拉取。withQuiet()
:设置静默模式,不输出构建镜像的日志信息。withBuildArg(buildArg)
:使用Map<String, String>
类型的参数设置构建参数。键值对表示构建参数的名称和值。withLabels(labels)
:使用Map<String, String>
类型的参数设置镜像的标签。键值对表示标签的键和值。withBuildArgs(buildArgs)
:使用Map<String, String>
类型的参数设置构建参数。与withBuildArg()
类似,但可以一次设置多个构建参数。withPull()
:设置是否应该在构建之前拉取最新的基础镜像。withProgressHandler(progressHandler)
:设置用于处理构建镜像进度的ProgressHandler
。
创建容器
|
在上述代码中,imageName
表示要使用的镜像的名称,containerName
表示要创建的容器的名称。hostPort
和containerPort
分别表示主机端口和容器端口,用于进行端口映射。volumeHostPath
和volumeContainerPath
表示主机路径和容器路径,用于挂载卷。其中,CreateContainerResponse
对象,包含了有关新创建容器的信息,比如容器的ID、名称等。以便接下来的启动停止容器等操作
withName(containerName)
:为容器指定一个名称。withPortBindings(portBindings)
:指定容器的端口绑定。portBindings
是一个PortBinding
对象,用于将主机端口映射到容器内的端口。withBinds(bindings)
:指定容器的卷绑定。bindings
是一个Bind
对象,用于将主机的目录或卷挂载到容器内的路径。
启动容器
1 |
|
停止和删除容器
|
在上述代码中,container.getId()
获取到的是容器的ID。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!