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共享宿主机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多阶段构建
多阶段构建虽然能够减小镜像体积,但是构建的速度慢了许多。原因在于:一是相比于原先的单阶段构建,多了一些构建步骤;二是缓存失效,多阶段编译之后只保留最终镜像的缓存,中间镜像的缓存丢失。其中缓存失效的问题在CI环境中尤为显著。 加快多阶段构建的措施有两项:并行构建和保留缓存并行构建 从Docker 18.09开始引入了并行构建,启用方法有两种: 临时启用:设置环境变量DOCKER_BUILDKIT=1; 原构建命令: docker build -f Dockerfile -t test_name . 增加DOCKER_BUILDKIT=1后的命令: DOCKER_BUILDKIT=1 docker build -f Dockerfile -t test_name . 默认启用:在/etc/docker/daemon.json中设置{ "features": { "buidkit": true...
记录docker构建优化
记录一次node项目优化方案优化前: 以ubuntu发行版为基础镜像 不带小版本号 每次构建都从头构建(这里也推荐将package*json先copy过来进行install再copy . .,如果文件没变化,那就使用缓存,不重新构建) 优化后: 建立runtime基础镜像(包含提前安装好的基础依赖和环境, 包括node_modules),并使用alpine为基础镜像发行版 使用nexus管理项目包(docker/npm/maven) 指定具体版本号(只有 major version,没有指定 minor version、patch version。当该基础镜像 minor 或 patch 版本更新后,如果本地的镜像缓存也被清除了,那么打包就会使用新版本的基础镜像) 构建 Docker 镜像的时候,会缓存 Dockerfile 中尚未更改的所有步骤。所以,如果新构建时更改任何指令,将后的指令步骤将会重新来不再使用缓存。举例来说,就是指令 3 发生了变更,其后的 4-n 就会重跑并重新生成缓存。因此,编写 Dockerfile...
加快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...
Docker-compose网络
默认网络 默认情况下,compose中的多个服务会加入一个名为default的网络。这些服务在default网络中是互通的。该default网络的全称是以compose文件所在文件夹名字做为前缀。比如文件夹为hello_world的compose。其一组服务对应的网络名为:hello_world_default。 这组service在该网络中,以compose文件中的第二组端口通信。 12345678910version: "3"services: web: build: . ports: - "8000:8000" db: image: postgres ports: - "8001:5432" 比如上述配置中,在hello_world_default网络中,web服务使用8000端口和db服务的5432端口通信。第一组端口8000和8001是宿主机访问web和db服务的端口。 使用已存在的网络1234docker network create...
docker-compose中的特殊符号问题
$美元符号 docker-compose和$$语法均受支持。 不支持扩展的外壳样式功能,例如${VARIABLE-default}和${VARIABLE/foo/bar}。 当配置需要美元符号时,可以使用$$(双美元符号)。 这也可以防止Compose插值。 所以写作: $${Time.now},其计算结果为${Time.now}
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: ...
开启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
制作centos镜像并保持后台运行
手段有很多,只要保证后台是运行状态中即可1. 添加shell脚本: tail -f xxx文件,利用tail -f追逐更改日志,保证xxx文件有,即可(没有前面可以先touch xxx文件)2.添加tty: true来启用交互来维持后台运行,在docker-compose和k8s yaml中都有对应项, k3s中测试不好使,没找到原因,docker-compose测试倒是ok
