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 exe...
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.yaml中healthcheck配置项作用:可用于检查容器是否正常运行,初始状态为starting,最后一次检查完成后显示sucess或者unhealthy,以下是命令执行返回的状态对应容器状态0:状态是sucess,容器正常运行1:状态是unhealthy,容器非正常运行2:忽略执行命令的状态包含healthcheck的docker-compose文件 12345678910111213141516171819202122version: "3.7" #docker compose的版本services: tomcat: image: tomcat:v10.0.7 ports: - 18080:8080 # 暴露端口信息 - "宿主机端口:容器暴露端口" container_name: tomcat_test #设置启动容器的名称,若不设置会默认生成一个 links: - mysql:db #指定关联的容器 mysql: image: ...
Docker Compose 中的特殊符号问题
$美元符号 docker-compose和$$语法均受支持。 不支持扩展的外壳样式功能,例如${VARIABLE-default}和${VARIABLE/foo/bar}。 当配置需要美元符号时,可以使用$$(双美元符号)。 这也可以防止Compose插值。 所以写作: $${Time.now},其计算结果为${Time.now}
低版本 Docker 升级高版本 Docker
摘自:https://blog.csdn.net/weixin_46152207/article/details/127533584 在升级前确定几个重点:原配置文件备份一下123456789101112131415161718192021222324252627282930313233343536373839404142[root@localhost ~]# cat /usr/lib/systemd/system/docker.service [Unit]Description=Docker Application Container EngineDocumentation=http://docs.docker.comAfter=network.targetWants=docker-storage-setup.serviceRequires=docker-cleanup.timer[Service]Type=notifyNotifyAccess=mainEnvironmentFile=-/run/containers/registries.confEnvironmentFile...
几种修改 Docker 默认存储位置的方法
转自:https://blog.csdn.net/BigData_Mining/article/details/104921479 需求 docker容器存放目录磁盘空间满了,需要转移数据,修改Docker默认存储位置 解决方法方法1:迁移到新目录 停止docker服务。 1systemctl stop docker; //每个liunx版本的命令不一样。 创建新的docker目录,执行命令df -h,找一个大的磁盘。我的是放在/home目录下面,我的/home目录大小有900G。 我在 /home目录下面建了/home/work/docker_root目录,执行的命令是: 1mkdir -p /home/work/docker_root 迁移/var/lib/docker目录下面的文件到 /home/docker/lib下面 1cp -R /var/lib/docker/* /home/work/docker_root 注意:如果文件内容很...
加快 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...
CentOS 7 卸载 Docker 环境
死所有运行容器1# docker kill $(docker ps -a -q) 删除所有容器1# docker rm $(docker ps -a -q) 删除所有镜像1# docker rmi $(docker images -q) 停止 docker 服务1# systemctl stop docker 删除存储目录1234# rm -rf /etc/docker# rm -rf /run/docker# rm -rf /var/lib/dockershim# rm -rf /var/lib/docker 如果发现删除不掉,需要先 umount,如 1# umount /var/lib/docker/devicemapper 卸载 docker 查看已安装的 docker 包 1# yum list installed | grep docker 卸载相关包12345# yum –y remove docker-buildx-plugin.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64 docker-ce-roo...
Docker 开启 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
记录 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 的时候,就需要将最不可能产生更...
