Docker 开放API使用

使用Docker开放API需要开启2375端口(Docker默认不开启)

下面列举开启方式:

​ 在/usr/lib/systemd/system/docker.service,配置远程访问。

主要是在[Service]这个部分,加上下面两个参数

Copy# vim /usr/lib/systemd/system/docker.service
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重启

Copysystemctl daemon-reload
systemctl restart docker

详情:https://www.cnblogs.com/hongdada/p/11512901.html

API使用:

1.依赖
 <dependency>
      <groupId>com.github.docker-java</groupId>
      <artifactId>docker-java</artifactId>
      <version>3.1.1</version>
 </dependency>
2.实现
package cn.zonhar.service;

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerResponse;

public interface DockerClientService {
    /**
     * 连接docker服务器
     * @return
     */
    public DockerClient connectDocker();
    /**
     * 创建容器
     * @param client
     * @return
     */
    public CreateContainerResponse createContainers(DockerClient client,String containerName,String imageName,int internalPort,int externalPort );
    /**
     * 启动容器
     * @param client
     * @param containerId
     */
    public void startContainer(DockerClient client,String containerId);
    /**
     * 停止容器
     * @param client
     * @param containerId
     */
    public void stopContainer(DockerClient client,String containerId);
    /**
     * 删除容器
     * @param client
     * @param containerId
     */
    public void removeContainer(DockerClient client,String containerId);
}

package cn.zonhar.service.impl;

import cn.zonhar.service.DockerClientService;
import com.alibaba.fastjson.JSONObject;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.Info;
import com.github.dockerjava.api.model.Ports;
import com.github.dockerjava.core.DockerClientBuilder;
import org.springframework.stereotype.Service;

import static com.github.dockerjava.api.model.HostConfig.newHostConfig;
@Service
public class DockerClientServiceImpl implements DockerClientService {
    /**
     * 连接docker服务器
     * @return
     */
    @Override
    public DockerClient connectDocker(){
        DockerClient dockerClient = DockerClientBuilder.getInstance("tcp://ip:2375").build();
        Info info = dockerClient.infoCmd().exec();
        String infoStr = JSONObject.toJSONString(info);
        System.out.println("docker的环境信息如下:=================");
        System.out.println(info);
        return dockerClient;
    }

    /**
     * 创建容器
     * @param client
     * @return
     */
    @Override
    public CreateContainerResponse createContainers(DockerClient client, String containerName, String imageName, int internalPort, int externalPort ){
        //映射端口 externalPort(物理机外部端口) -> internalPort(容器内部端口)
        ExposedPort tcp80 = ExposedPort.tcp(internalPort);
        Ports portBindings = new Ports();
        portBindings.bind(tcp80, Ports.Binding.bindPort(externalPort));

        CreateContainerResponse container = client.createContainerCmd(imageName)
                .withName(containerName)
                .withHostConfig(newHostConfig().withPortBindings(portBindings))
                .withExposedPorts(tcp80).exec();
        return container;
    }


    /**
     * 启动容器
     * @param client
     * @param containerId
     */
    @Override
    public void startContainer(DockerClient client, String containerId){
        client.startContainerCmd(containerId).exec();
    }

    /**
     * 停止容器
     * @param client
     * @param containerId
     */
    @Override
    public void stopContainer(DockerClient client, String containerId){
        client.stopContainerCmd(containerId).exec();
    }

    /**
     * 删除容器
     * @param client
     * @param containerId
     */
    @Override
    public void removeContainer(DockerClient client, String containerId){
        client.removeContainerCmd(containerId).exec();
    }

}
3.为了方便运维人员管理容器,我们可以装个图形化界面(Portainer)

轻量级图形页面管理之Portainer

1.查看portainer镜像

[root@localhost ~]# docker search portainer

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n92esyLt-1580288615136)(C:\Users\zonhar\AppData\Roaming\Typora\typora-user-images\image-20200129164701984.png)]

2.选择喜欢的portainer风格镜像,下载

[root@localhost ~]# docker pull portainer/portainer 

3.启动dockerui容器

[root@localhost ~]# docker run -d --name portainerUI -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

4.浏览器访问 http://ip:9000 , 设置一个密码即可,点击创建用户
在这里插入图片描述

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐