业务场景:后期会做一个类似“实验楼”的在线编程站点,需要用到在线使用Api创建指定镜像的虚拟机。这里先记录一下如何使用Ubuntu 21来进行Docker的安装和api的基础使用。

一、Docker

网上有很多相关教程文档,这里列举几个常用的

  • 1.安装
$ sudo apt-get install -y docker.io
  • 2.启动
$ systemctl start docker
  • 3.停止
$ systemctl stop docker
  • 4.开机自启
$ systemctl enable docker
  • 5.查看状态
$ systemctl status docker
  • 6.查看版本
$ docker version

接下来验证Docker

  • 1.输入以下命令,此时不用在乎命令具体含义,后面会解释分析。
$ sudo docker run hello-world
  • 2.如出现类似信息,表示Docker可正常使用了
Hello from Docker!

二、Docker操作镜像

说明:这里会讲解Docker对镜像的一些简单操作。所谓镜像,可以简单理解为一个软件,在Docker中安装一个软件,Docker即为容器。任何软件都可以进行封装成为Docker中的软件,包括操作系统。

  • 1.拉取新的镜像到Docker
$ sudo docker pull docker.io/portainer/portainer

拉取镜像可以理解为下载软件的行为,将别人封装好的软件安装进自己的容器中,使用如下命令。
这里以安装一个docker可视化web面板为例。其中使用pull表示拉取,后面的docker.io/portainer/portainer为镜像名称

  • 2.查看Docker中都有哪些镜像
$ sudo docker images

在未安装镜像之前,使用此命令仅能看到一个名为hello-world的镜像。在上一步使用命令安装了docker.io/portainer/portainer,所以本次的执行结果中会出现名为portainer/portainer的镜像。

  • 3.创建Docker中的镜像容器
$ sudo docker run -d --name portainerUI -p 192.168.0.182:9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

这里参数可参考菜鸟教程中的说明 Docker run命令 ,意思为:以后台运行的方式创建启动并返回一个唯一ID,这个容器的名称被指定为portainerUI,同时进行端口映射,将宿主机的192.168.0.182:9000端口映射到容器中9000端口中。这里容器端口为固定的,宿主机IP和端口可自行调整。后面-v 进行绑定卷,大概是管理的意思,最后的portainer/portainer表示为启动的容器名称。

  • 4.验证启动的容器
$ sudo docker ps

使用ps命令可查看正在运行的容器
仅针对上面的容器,在浏览器中打开地址 http://192.168.0.182:9000 能显示页面,即为成功运行
这里提到的是使用命令的方式创建和启动容器,我们后面使用HTTP API的方式进行容器的创建启动

  • 5.终止正在运行的容器
$ sudo docker stop 68692b82a394

其中68692b82a394为使用ps查询到容器对应的id

  • 6.启动已经创建的容器
$ sudo docker start 68692b82a394

这里是启动,使用第3步的方式是创建,这里是启动已经创建的容器。

三、Docker开放API

Docker的API需要用到2375端口,当然,这个端口你也可以自定义,此端口默认不开放,需要进行受到开放

  • 1.开启API功能,用vim或者vi编辑
sudo vim /usr/lib/systemd/system/docker.service
  • 2.找到[Service],在里面添加如下内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
  • 3.重启docker
systemctl daemon-reload
systemctl restart docker

四、使用Docker Api进行容器创建

这里开始讲解如何使用Docker的api进行容器的操作,不再使用终端。
使用postman或者其他工具,POST方式,发送的数据为JSON格式。其中name=xxxx中的xxx为创建容器的名称,类似于上面的-name参数

  • 1.创建容器

POST请求地址:http://192.168.0.182:2375/containers/create?name=xxxx
请求参数:

{
  "Hostname": "testname",
  "Domainname": "hehe",
  "Image": "centos:7.9.2009",
  "ExposedPorts": {
    "80/tcp": {}
  },
  "HostConfig": {
    "PortBindings": {
      "6901/tcp": [{"HostPort": "666"}]
    }
  },
}
  • 2.查看容器列表

GET请求参数:http://192.168.0.182:2375/containers/json?filters={"status":["created","restarting","running","removing","paused","exited","dead"]}
这里要参考这篇文章docker remote api 1.1 容器查询
Docker Api官方文档 官方文档

  • 3.启动/停止/重启 一个containers容器
$ curl -X POST http://192.168.0.182:2375/containers/{id}/start   (启动 注意这里是POST方法)
$ curl -X POST http://192.168.0.182:2375/containers/{id}/stop   (停止 注意这里是POST方法)
$ curl -X POST http://192.168.0.182:2375/containers/{id}/restart   (重启 注意这里是POST方法)

自此,完成了所有配置。后续可通过各种语言调用api进行docker操作了!

最后修改:2023 年 12 月 05 日
如果觉得我的文章对你有用,请随意赞赏