搭建Docker的API服务

关于作者
金山老师:从事Java、大数据、Python职业化培训6年,项目管理、软件开发14年。欢迎添加我的微信号【jshand】,最近建了一些微信交流群,扫描下方二维码添加公众号,回复:进群
部分讲课录屏已经上传到bilibili,欢迎搜索“是金山老师”
在这里插入图片描述

介绍

利用docker提供的API访问docker 在远端操作容器的创建、部署、启动、停止等。

安装

安装Docker服务,此处不做过多介绍,参考上一个笔记。

开启远程访问

本次基于安装的Docker基本信息如下

[root@localhost ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.8
 API version:       1.41
 Go version:        go1.16.6
 Git commit:        3967b7d
 Built:             Fri Jul 30 19:55:49 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.8
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.6
  Git commit:       75249d8
  Built:            Fri Jul 30 19:54:13 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.9
  GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
 runc:
  Version:          1.0.1
  GitCommit:        v1.0.1-0-g4144b63
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

首先编辑docker的宿主机文件 /lib/systemd/system/docker.service

修改以ExecStart开头的行

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

编辑后文件内容如下:

[root@localhost ~]# cat /lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3

# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s

# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity

# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes

# kill only the docker process, not all processes in the cgroup
KillMode=process
OOMScoreAdjust=-500

[Install]
WantedBy=multi-user.target

修改后保存文件,然后通知docker服务做出的修改

systemctl daemon-reload

重启docker服务

service docker restart

接下来测试一下看是否能连接到docker api。上面的2375就是对应端口

[root@localhost ~]# curl http://192.168.3.8:2375/version

{"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"20.10.8","Details":{"ApiVersion":"1.41","Arch":"amd64","BuildTime":"2021-07-30T19:54:13.000000000+00:00","Experimental":"false","GitCommit":"75249d8","GoVersion":"go1.16.6","KernelVersion":"3.10.0-1160.el7.x86_64","MinAPIVersion":"1.12","Os":"linux"}},{"Name":"containerd","Version":"1.4.9","Details":{"GitCommit":"e25210fe30a0a703442421b0f60afac609f950a3"}},{"Name":"runc","Version":"1.0.1","Details":{"GitCommit":"v1.0.1-0-g4144b63"}},{"Name":"docker-init","Version":"0.19.0","Details":{"GitCommit":"de40ad0"}}],"Version":"20.10.8","ApiVersion":"1.41","MinAPIVersion":"1.12","GitCommit":"75249d8","GoVersion":"go1.16.6","Os":"linux","Arch":"amd64","KernelVersion":"3.10.0-1160.el7.x86_64","BuildTime":"2021-07-30T19:54:13.000000000+00:00"}
[root@localhost ~]#

此时本级可以访问,如果其他机器访问的话可能2375端口没有开放,需要在防火墙中打开添加2375端口tcp放行。

#添加2375端口
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=2375/tcp
success
#防火墙重启
[root@localhost ~]# firewall-cmd --reload
success
#查看开放的端口
[root@localhost ~]# firewall-cmd --permanent --zone=public --list-ports
2375/tcp

使用另外一个机器内网浏览器访问http://192.168.3.8:2375/version,此时 192.168.3.8是我的docker所在机器的ip地址

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您解答这个问题。 首先,为了创建一个具有伸缩性的Docker集群,我们需要选择一个适合的容器编排工具。目前比较流行的容器编排工具有Kubernetes、Docker Swarm和Apache Mesos等。在这里,我们选择Kubernetes作为我们的容器编排工具。 接下来,我们需要安装Kubernetes并搭建Docker服务。Kubernetes有一个独立的二进制文件kubeadm,它可以帮助我们快速搭建一个Kubernetes集群。我们可以在每台服务器上安装Docker,并使用kubeadm在这些服务器上启动Kubernetes集群。具体步骤如下: 1. 在每台服务器上安装Docker。可以使用以下命令安装Docker: ``` sudo apt-get update sudo apt-get install docker.io ``` 2. 在每台服务器上安装kubeadm、kubelet和kubectl。可以使用以下命令安装: ``` sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl ``` 3. 在其中一台服务器上初始化Kubernetes集群。可以使用以下命令初始化: ``` sudo kubeadm init --pod-network-cidr=10.244.0.0/16 ``` 4. 安装网络插件。Kubernetes需要一个网络插件来为容器分配IP地址。这里我们选择使用Calico作为网络插件。可以使用以下命令安装: ``` kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml ``` 5. 将其他服务器加入Kubernetes集群。可以使用kubeadm提供的命令来将其他服务器加入集群: ``` sudo kubeadm join <ip_address_of_master>:<port> --token <token> --discovery-token-ca-cert-hash sha256:<hash> ``` 这里的`<ip_address_of_master>`是Kubernetes的主节点IP地址,`<port>`是Kubernetes API服务器的端口号,`<token>`和`<hash>`是kubeadm初始化集群时生成的。 6. 部署应用程序。现在我们可以使用Kubernetes来部署我们的应用程序了。可以使用kubectl提供的命令来部署应用程序,例如: ``` kubectl create deployment myapp --image=myimage:v1 ``` 这里的`myapp`是应用程序的名称,`myimage:v1`是Docker镜像的名称和版本号。 7. 扩展应用程序。现在我们可以使用Kubernetes来扩展我们的应用程序了。可以使用kubectl提供的命令来扩展应用程序,例如: ``` kubectl scale deployment/myapp --replicas=3 ``` 这里的`myapp`是应用程序的名称,`--replicas=3`表示我们要将应用程序的副本数扩展到3。 以上就是基于Kubernetes创建Docker集群并搭建Docker服务的步骤。使用Kubernetes,我们可以轻松地管理Docker容器并实现伸缩性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金山老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值