Docker 开放API使用(创建容器/启动容器/停止容器/删除容器)
Docker 开放API使用使用Docker开放API需要开启2375端口(Docker默认不开启)下面列举开启方式:在/usr/lib/systemd/system/docker.service,配置远程访问。主要是在[Service]这个部分,加上下面两个参数Copy# vim /usr/lib/systemd/system/docker.service[Service]Ex...
   ·  
 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 , 设置一个密码即可,点击创建用户

更多推荐
 
 




所有评论(0)