Docker Compose安装和部署容器

标签: 无 分类: 未分类 创建时间:2022-07-22 01:32:39 更新时间:2024-11-23 10:24:24

1.Deepin安装docker-compose

在Deepin中,可以直接使用apt命令进行安装

(1) 使用apt进行安装

1
2
3
4
5
6
## 命令行安装,这样安装的版本可能比较低
sudo apt install docker-compose
## 查看安装位置
which docker-compose
## 问题就是使用了sudo命令之后,如果不带sudo执行docker-compose,会提示没有那个文件或者目录,解决办法就是创建软链接
sudo ln -s /usr/bin/docker-compose /usr/local/bin/docker-compose

(2) 使用源码安装
使用源码安装,但是我安装之后,还是提示没有这个命令:“/usr/local/bin/docker-compose: 1: /usr/local/bin/docker-compose: Not: not found”

1
2
3
4
5
6
## 下载
curl -L "https://github.com/docker/compose/releases/download/2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
## 授权命令
sudo chmod +x docker-compose
## 卸载
sudo rm /usr/local/bin/docker-compose

(3) pip3安装
使用这个方法可以安装最新的版本,这个好

1
2
3
4
5
## 安装pip3
apt-get install python3-pip
yum install python3-pip
## 安装docker-compose
pip3 install docker-compose
参考文章:
1.解决docker-compose: command not found问题的两种常用方法 两种方法安装了docker-compose,一种是命令行,一种是使用的源码安装。
2.ubuntu安装docker-compose后运行提示No such file or directory
3.Docker-compose: /usr/local/bin/docker-compose : line 1: Not: command not found 这里提到了使用pip3进行docker-compose安装

2.docker compose服务启动顺序

在使用docker-compose的 depends_on 的时候,虽然解决了依赖的问题,但是服务启动顺序的问题,并没有解决,比如mysql启动之后,5s钟才能启动nacos,否则就会找不到数据库。官方提供了 wait-for-it.sh 脚本,检查某一个端口是否启动,启动之后在进行接下去的部署。

经过一段时间的摸索,主要有这么几种方式:
1.使用心跳检查

2.使用docker-compose-wait等工具

3.使用自定义脚本

参考文章:
1.docker compose服务启动顺序 docker-compose 中的 depends_on 配置是容器的启动顺序, 并不是容器中服务的启动顺序。这里讲了两种方法解决服务启动顺序的问题,一种是在docker-compose.yml中写脚本,一种是单独的脚本,提供了entrypoint.sh脚本,可以等待某一个服务真正的启动之后,再启动,我尝试了这里的脚本,但是失败了,只能放弃了。
2.Docker-compose编排微服务顺序启动 针对这个问题,docker-compose官方给的建议是,通过wait-for-it.sh脚本来控制。
3.docker-compose解决容器依赖问题 wait-for-it
4.Docker Compose等待依赖项 1.使用 dockerize 工具;2.使用 docker-compose-wait 工具;
5.心跳检测、心跳检测模板:service_healthy 这里有一个心跳检查,在 depends_on 中设置了条件,在被依赖的镜像中设置了 healthcheck
6.linux下使用命令来查看某一端口是否开放 netstat -ntpl (TCP类型的端口) 端口是否开启
7.HEALTHCHECK 健康检查 这里是关于 healthcheck 的配置

问题

(1) failed to create shim task: OCI runtime create failed: unable to retrieve OCI runtime error
这个主要是docker环境异常的问题,使用 docker info 查看docker信息,发现 runc version: N/A ,正常的话,应该会有 runc version: 1.0.0~rc6+dfsg1-3 版本信息。

【解决】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## 下载安全版本的runc到本地电脑
https://github.com/opencontainers/runc/releases/download/v1.1.3/runc.amd64
## 下载好的runc.amd64文件上传到服务器、修改文件名并赋权
mv runc.amd64 runc && chmod +x runc
## 备份原有的runc
mv /usr/bin/runc /home/runcbak
## 停止docker
systemctl stop docker.socket
systemctl stop docker.service
## 替换新版本runc
cp runc /usr/bin/runc
## 启动docker
systemctl start docker
## 检查runc是否升级成功
执行docker version命令,发现 runc Version为v1.1.3-0-g6724737f 代表runc升级成功
参考文章:
1.【错误解决】docker找不到runc:failed to create shim: OCI runtime create failed: unable to retrieve OCI runtime 这里就是将runc上传,并替换掉原先的几个文件就可以了。
2.Containerd task启动容器ctr: failed to create shim task: OCI runtime create failed 这里源码重新安装了runc
3.runc —— 从入门到放弃
4.docker runc升级 这里讲了如何升级runc,没有进行编译,就是使用了下载安装包,然后上传,替换就可以了。
5. opencontainers /runc 下载地址
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。