制作centos镜像并保持后台运行
手段有很多,只要保证后台是运行状态中即可1. 添加shell脚本: tail -f xxx文件,利用tail -f追逐更改日志,保证xxx文件有,即可(没有前面可以先touch xxx文件)2.添加tty: true来启用交互来维持后台运行,在docker-compose和k8s yaml中都有对应项, k3s中测试不好使,没找到原因,docker-compose测试倒是ok
docker-compose-volumes的说明
docker-compose里两种设置volumes方式绝对路径的12345ghost: image: ghost volumes: - ./ghost/config.js:/var/lib/ghost/config.js 卷标的123456789101112131415161718192021222324252627version: "3.2"services: ch: build: context: . dockerfile: clickhouse.Dockerfile cache_from: - yandex/clickhouse-server:latest ports: - "8123:8123" volumes: - ch_db:/var/lib/clickhouse networks: - clickhouse# restart: always tabix: image...
docker-compose中的特殊符号问题
$美元符号 docker-compose和$$语法均受支持。 不支持扩展的外壳样式功能,例如${VARIABLE-default}和${VARIABLE/foo/bar}。 当配置需要美元符号时,可以使用$$(双美元符号)。 这也可以防止Compose插值。 所以写作: $${Time.now},其计算结果为${Time.now}
docker共享宿主机git私钥
Dockerfile123456789...# 共享宿主机git私钥RUN yum install git -y && \ mkdir -p /root/.ssh/ && \ echo "${SSH_KEY}" > /root/.ssh/id_rsa && \ chmod 600 /root/.ssh/id_rsa && \ touch /root/.ssh/known_hosts && \ ssh-keyscan <gitlab_id>/github.com/gitee.com >> /root/.ssh/known_hosts... 执行(~/.ssh/git/id_rsa是宿主机git私钥所在位置)1docker build -t <xxx> --build-arg SSH_KEY="$(cat ~/.ssh/git/id_rsa) .
docker私有镜像仓库非https解决办法
情况1.这种写法是没有配置Docker加速器的情况下在 /etc/docker/daemon.json 中设置以下: 12345678910// 没有配置加速器的// 单个私服的写法{ "insecure-registries": ["registry的IP地址:端口号"]}// 多个私服的写法{ "insecure-registries": ["registry1的IP地址:端口号","registry2的IP地址:端口号"]} 情况2.这种写法是配置过Docker加速器的情况下在 /etc/docker/daemon.json 中设置以下: 123456789101112// 没有配置加速器的// 单个私服的写法{ "registry-mirrors": ["https://0vlzmqf0.mirror.aliyunc...
解决docker push慢的问题 -- http代理
docker pull拉取镜像,可以用修改 /etc/docker/daemon.json 加入国内源的方式解决,但docker push不行。传统的**export http_proxy=**设置http代理变量的方式对docker无效,docker采取了自己的方式,下面进入正文 代理地址(panda): 192.168.3.153:41091 启用全局代理123456789101112# 创建目录mkdir -p /etc/systemd/system/docker.service.d# 创建文件vi /etc/systemd/system/docker.service.d/http-proxy.conf# 写入配置[Service]Environment="HTTP_PROXY=http://192.168.3.153:41091/"# 刷新更改systemctl daemon-reload && systemctl restart docker# 验证是否生效systemctl show -...
Docker error : no space left on device
参考: https://stackoverflow.com/questions/30604846/docker-error-no-space-left-on-device 执行cicd时报错no space left on device 但执行df -ih发现还有空间 使用docker system prune清理(期间也可以使用ncdu插件进行查看哪个路径下占用体积过大,按c显式detial)此命令会对如下组件进行删除 1234- all stopped containers- all networks not used by at least one container- all dangling images- all dangling build cache
加快docker构建java项目速度
前提 Python、Node.js、Go项目使用docker构建镜像的时候,在有 Docker cache 的情况下,连续构建镜像的速度是可以很快的。 一般的优化方式是先安装依赖模块,然后再编译打包代码库。这样安装依赖的 image layer 可以被 Docker 缓存,下次再构建就不用安装依赖。 但目前主流的java打包(这里不说像GraalVM等技术)方式都是将源码和依赖包打在一起, 这导致无法充分利用缓存层加快镜像的构建速度 思路 按照node项目打包思路, 先copy package*文件进行构建, 再copy源码 这里以springboot项目举例 先弄一份初始化springboot start工程放在所需项目里 然后需要写两份dockerfile文件 第一份用来copy springboot start工程以及pom文件 然后执行maven命令打包, 这里我们不需要源码正确与否, 因为我们已经将pom内的jar包打到了本地 第二份dockerfile以第一份镜像为基准, 将基础镜像的springboot start工程删掉 然后把源项目工程c...
开启2375远程访问
在/usr/lib/systemd/system/docker.service,配置远程访问。主要是在[Service]这个部分,加上下面两个参数: 123456cd /usr/lib/systemd/systemvi docker.serviceExecStart=ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 使用如下命令进行连接 1docker -H tcp://ip:2375 exec -it <容器> bash
记一次利用Semaphore处理大批次数据计算的解决方案
先描述下信号量的意义 1234567891011Semaphore是一个计数信号量。 在概念上,信号量维持一组许可证。如果有必要,每个acquire()都会阻塞,直到许可证可用,然后才能使用它。 每个release()添加许可证,潜在地释放阻塞获取方。但是,没有使用实际的许可证对象; Semaphore只保留可用数量的计数,并相应地执行。 信号量通常用于限制线程数,而不是访问某些(物理或逻辑)资源。在这里插入图片描述Semaphore实现的功能就类似有3个停车位,假如有6个人要停车,那么同时只能停多少辆车?同时只能有3个人能够占用,当3个人中 的任何一个人开车离开后,其中等待的另外3个人中又有一个人可以来停车了。另外等待的2个人中可以是随机获得优先机会,也可以是按照先来后到的顺序获得机会,这取决于构造Semaphore对象时传入的参数选项。单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁”,再由另一个线程释放“锁”,这可应用于死锁恢复的一些场合。 批量处理集合util123456789101112131415161718192021222...
