ENTRYPOINT和CMD
ENTRYPOINT和CMD都是让用户指定一个可执行程序, 这个可执行程序在container启动后自动启动 执行运行一个没有调用ENTRYPOINT或者CMD的docker镜像, 一定返回错误 12$ docker run alpineFATA[0000] Error response from daemon: No command specified 覆盖 首先两者都可以执行命令覆盖, 覆盖的情况如下 在写Dockerfile时, ENTRYPOINT或者CMD命令会自动覆盖基础镜像的ENTRYPOINT或者CMD命令. 在docker镜像运行时, 用户也可以在命令指定具体命令, 覆盖在Dockerfile里的命令. CMD: CMD命令可以直接接命令进行覆盖ENTRYPOINT: 使用--entrypoint参数覆盖默认的ENTRYPOINT 因为CMD命令很容易被docker run命令的方式覆盖, 所以, 如果你希望你的docker镜像的功能足够灵活, 建议在Dockerfile里调用CMD命令 执行命令的两种方法shell表示法:1CMD...
制作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: ...
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":...
解决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...
开启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