docker-compose:Dockerfile参数以及说明

这篇具有很好参考价值的文章主要介绍了docker-compose:Dockerfile参数以及说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、Dockerfile

FROM

选择基础镜像,docker当前要生成的镜像以哪个镜像为基础。

FROM java

RUN

容器 构建时 需要运行的命令(区别于后面的CMD)

有两种格式:

  • shell命令格式
RUN commond
构如:建时,打印hello world
RUN echo "Hello World !"   
  • exec 格式
RUN ["executable", "param1", "param2"]
RUN ["echo","Hello world !"] 

CMD

容器启动之后要运行的命令

注意 CMD一个文件中只能有一条指令Dockerfile。如果您列出多个,CMD 则只有最后一个会生效。

三种格式:

  • shell命令格式
CMD echo "Hello World !"   
  • exec格式
CMD ["executable", "param1", "param2"]
CMD ["echo","Hello world !"] 
  • 作为 ENTRYPOINT 的参数使用

若 变量 ENTRYPOINT 存在,CMD将作为参数进行传递,而不是执行。

ENTRYPOINT

容器启动之后要运行的命令,同上述CMD ,同样若有多个参数,只有最后一个参数生效。

也是两种形式:

ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2

1、docker至少指定一个CMD 或者 ENTRYPOINT命令

2、CMD 在运行时会被参数覆盖

不同格式下CMDENTRYPOINT的关系:

没有ENTRYPOINT ENTRYPOINT nginx -c ENTRYPOINT [“nginx”,“-c”]
没有CMD 报错,至少存在一个 /bin/bash -c nginx -c nginx -c
CMD [“nginx.conf”] nginx.conf /bin/bash -c nginx -c nginx.conf nginx -c nginx.conf
CMD nginx.conf /bin/bash -c nginx.conf /bin/bash -c nginx -c nginx.conf nginx -c /bin/bash -c nginx.conf

所以若指定nginx配置文件应该使用 ENTRYPOINT ["nginx","-c"]CMD ["nginx.conf"],并且CMD命令可被替换,所以通常用这种格式。

LABLE

标签 键值对的形式

LABEL <key>=<value> <key>=<value> <key>=<value> ...

如 打上作者标签
LABLE author = '杀生丸'
若要引用变量请使用双引号,单引号会直接解析成字符串输出
LABLE author = "xxx-${author}"

LABLE替换了 MAINTAINER 的使用

MAINTAINER <name>

EXPOSE

对外暴露的端口

EXPOSE <port> [<port>/<protocol>...]

ADD

将主机的文件复制到镜像中,如仅限本地的 tar 提取和远程 URL 支持

ADD [--chown=<user>:<group>] [--checksum=<checksum>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]

将home开头的所有文件复制到mydir文件夹下
ADD hom* /mydir/

COPY

ADD,复制文件,只能从主机复制文件到镜像中。

COPY [--chown=<user>:<group>] [--checksum=<checksum>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]

将home开头的所有文件复制到mydir文件夹下
COPY hom* /mydir/

VOLUME

容器卷,也就是挂在数据,用于数据保存和持久化工作

VOLUME ["/data"]

USER

指定该镜像以什么样的用户去执行,如果都不指定,默认是root

WORKDIR

工作目录,进入容器后的落脚点,如果不指定则是 /.

WORKDIR /xxx/

ENV

环境变量、键值对的形式,运行时ENV 依然有效。

ENV <key>=<value> ...

ENV MY_NAME="John Doe"
ENV MY_DOG=Rex\ The\ Dog
ENV MY_CAT=fluffy

ARG

使用ARGENV指令来指定指令可用的变量RUN。若变量同名,ENV有更高优先级。运行时ARG无效。

FROM ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER=${CONT_IMG_VER:-v1.0.0}
RUN echo $CONT_IMG_VER

示例

FROM alpine
WORKDIR /app
COPY src/ /app  #相似命令ADD,ADD自带解压
RUN echo >> 1.txt
CMD tail -f 1.txt #ENTRYPOINT俩如果未指定都是继承自父镜像,如果祖辈也都没指定CMD或ENTRYPOINT,则镜像无法构建

最后构建镜像

docker build -t test .
-t tag 镜像名称 . 当前目录

运行镜像,生成新的容器。

docker run test

二、docker-compose编排

images

指定镜像

# 描述 Compose 文件的版本信息
version: "3.9"

# 定义服务,可以多个
services:
  redis-6382: # 服务名称
    image: redis:7.0 # 创建容器时所需的镜像

container_name

默认事故services下标签作为容器名,也可自己指定。

container_name: app

build

指定dockerfile 进行构建,在dockerfile文件中设置的参数无需再docker-compose.yml中再次设置。

可以直接指定目录,默认读取Dockerfile文件,也可以如下所示指定文件

 build: /path/to/build/dir

 build:
  context: ./dir
   dockerfile: Dockerfile-alternate

command

容器启动后的命令,如指定redis的配置文件

command: redis-server /etc/redis/redis.conf

depends_on

表示指定镜像之间的依赖关系,以及启动顺序。理解成sping的依赖即可。

如下,web依赖了db以及redis,所以会先加载redis和db容器,最后加载web容器。

services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

entrypoint

Dockerfile中的作用。

env_file

指定文件,可将文件内容作为环境变量添加到容器中,但是在容器构建期间环境变量无效。

env_file:
  - ./a.env
  - ./b.env

environment

设置环境变量,可以将变量保存到容器中。

environment:
  RACK_ENV: development
  SHOW: "true"
  USER_INPUT:

external_links

在使用Docker过程中,我们会有许多单独使用docker run启动的容器,为了使Compose能够连接这些不在docker-compose.yml中定义的容器,我们需要一个特殊的标签,就是external_links,它可以让Compose项目里面的容器连接到那些项目配置外部的容器(前提是外部容器中必须至少有一个容器是连接到与项目内的服务的同一个网络里面)。

external_links:
 - redis_1
 - project_db_1:mysql
 - project_db_1:postgresql

labels

容器中打上标签,同Dockerfile的lable作用

labels:
  com.example.description: "Accounting webapp"
  com.example.department: "Finance"
  com.example.label-with-empty-value: ""

links

定义在不同容器的网络链接。 链接到其它服务中的容器。使用服务名称(同时作为别名),或者“服务名称:服务别名”

web:
  links:
    - db
    - db:database
    - redis

ports

宿主机与容器映射的端口。 [HOST:]CONTAINER[/PROTOCOL]

ports:
 - "3000"
 - "8000:8000"

network_mode

网络模式

network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"

networks

定义容器附加的网络,默认是bridge模式

services:
  some-service:
    networks:
      - some-network
      - other-network

也可指定别名使用子标签 aliases ,相同的服务可以在不同的网络有不同的别名。

services:
  some-service:
    networks:
      some-network:
        aliases:
         - alias1
         - alias3
      other-network:
        aliases:
         - alias2

restart

重启策略

	restart: "no"
    restart: always
    restart: on-failure
    restart: unless-stopped

volumes

挂载一个目录或者一个已存在的数据卷容器

services:
  redis-6382: # 服务名称
    volumes: # 数据卷,目录挂载
      - /var/lib/mysql # 只指定一个目录,在容器内部创建容器卷
      - /usr/local/redis_cluster/master01/conf:/etc/redis
      - /usr/local/redis_cluster/master01/data:/data

volumes_from

从其他容器或服务挂载数据卷。

volumes_from:
  - service_name
  - service_name:ro
  - container:container_name
  - container:container_name:rw

working_dir

工作目录

示例

安装mysql以及redis集群

具体说明参考:

redis集群搭建过程

Mysql集群搭建过程文章来源地址https://www.toymoban.com/news/detail-794462.html

# 描述 Compose 文件的版本信息
version: "3.9"

# 定义服务,可以多个
services:
  mysql_master: # 服务名称
    image: mysql # 创建容器时所需的镜像
    container_name: mysql_master # 容器名称
    restart: always # 容器总是重新启动
    privileged: true
    volumes: # 数据卷,目录挂载
      - /usr/local/mysql_cluster/master/data:/var/lib/mysql:rw
      - /usr/local/mysql_cluster/master/conf/my.cnf:/etc/mysql/my.cnf
    environment:
        - MYSQL_ROOT_PASSWORD=******
  mysql_slave: # 服务名称
    image: mysql # 创建容器时所需的镜像
    container_name: mysql_slave # 容器名称
    restart: always # 容器总是重新启动
    privileged: true
    volumes: # 数据卷,目录挂载
      - /usr/local/mysql_cluster/slave/data:/var/lib/mysql:rw
      - /usr/local/mysql_cluster/slave/conf/my.cnf:/etc/mysql/my.cnf
    environment:
        - MYSQL_ROOT_PASSWORD=******
   redis-6382: # 服务名称
    image: redis:7.0 # 创建容器时所需的镜像
    container_name: redis-6382 # 容器名称
    restart: always # 容器总是重新启动
    network_mode: "host" # host 网络模式
    volumes: # 数据卷,目录挂载
      - /usr/local/redis_cluster/master01/conf:/etc/redis
      - /usr/local/redis_cluster/master01/data:/data
    command: redis-server /etc/redis/redis.conf # 覆盖容器启动后默认执行的命令

  redis-6383:
    image: redis:7.0 # 创建容器时所需的镜像
    container_name: redis-6383
    network_mode: "host"
    volumes:
      - /usr/local/redis_cluster/master02/conf:/etc/redis
      - /usr/local/redis_cluster/master02/data:/data
    command: redis-server /etc/redis/redis.conf

  redis-6384:
    image: redis:7.0 # 创建容器时所需的镜像
    container_name: redis-6384
    network_mode: "host"
    volumes:
      - /usr/local/redis_cluster/master03/conf:/etc/redis
      - /usr/local/redis_cluster/master03/data:/data
    command: redis-server /etc/redis/redis.conf

  redis-6385: # 服务名称
    image: redis:7.0 # 创建容器时所需的镜像
    container_name: redis-6385 # 容器名称
    restart: always # 容器总是重新启动
    network_mode: "host" # host 网络模式
    volumes: # 数据卷,目录挂载
      - /usr/local/redis_cluster/slave01/conf:/etc/redis
      - /usr/local/redis_cluster/slave01/data:/data
    command: redis-server /etc/redis/redis.conf

  redis-6386:
    image: redis:7.0 # 创建容器时所需的镜像
    container_name: redis-6386
    network_mode: "host"
    volumes:
      - /usr/local/redis_cluster/slave02/conf:/etc/redis
      - /usr/local/redis_cluster/slave02/data:/data
    command: redis-server /etc/redis/redis.conf

  redis-6387:
    image: redis:7.0 # 创建容器时所需的镜像
    container_name: redis-6387
    network_mode: "host"
    volumes:
      - /usr/local/redis_cluster/slave03/conf:/etc/redis
      - /usr/local/redis_cluster/slave03/data:/data
    command: redis-server /etc/redis/redis.conf

到了这里,关于docker-compose:Dockerfile参数以及说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • docker学习:dockerfile和docker-compose

    docker学习:dockerfile和docker-compose

    以下内容,部分来自gpt生成,里面的描述可能会出现问题,但代码部分,我都会进行测试。 对于一个docker,例如python,我们需要其在构建成容器时,就有np。有以下两种方法: pull python,并run后,在里面pip install numpy,随后对这个容器进行打包保存 在pull python时,就将pip ins

    2024年02月08日
    浏览(11)
  • Docker Dockerfile Docker-compose学习笔记

    Docker Dockerfile Docker-compose学习笔记

    Docker目前支持Centos7及以后的版本。64位操作系统,内核版本至少为3.10 安装软件源,以及devicemapper存储类型 添加Docker yum源 安装Docker 启动Docker 测试是否能获取镜像 查看获取的镜像 生效配置信息 安装Docker需要保证你的电脑开启虚拟化 进入任务管理器→点击性能→看一下CPU是

    2024年02月12日
    浏览(24)
  • 使用docker-compose部署RocketMQ5.x 单机部署+配置参数详解

    使用docker-compose部署RocketMQ5.x 单机部署+配置参数详解

    提前先拉取需要的镜像文件,避免后面部署的时候出现镜像拉取失败的问题。 镜像地址: https://hub.docker.com/r/apache/rocketmq/tags 我在部署的时候最新发行版是5.1.0可以根据需求自行选择一个5.x的版本,部署流程不会有太大改变。 拉取最新版即可 这里使用compose v2版本 1、下载(使

    2024年02月08日
    浏览(28)
  • Docker部署RocketMQ5.x (单机部署+配置参数详解+不使用docker-compose直接部署)

    Docker部署RocketMQ5.x (单机部署+配置参数详解+不使用docker-compose直接部署)

    官网地址:https://rocketmq.apache.org/ 镜像地址: https://hub.docker.com/r/apache/rocketmq/tags 我在部署的时候最新发行版是5.1.0可以根据需求自行选择一个5.x的版本,部署流程不会有太大改变。 NameServer是一个简单的 Topic 路由注册中心,支持 Topic、Broker 的动态注册与发现,几乎无状态节点

    2024年02月06日
    浏览(15)
  • Dockerfile与docker-compose容器编排(Docker系列第3章,共3章)

    不同的组件需要不同的docker配置(例如容器卷,端口,环境变量等),使用你懂得工具看hub.docker.com官方手册。 不要死记硬背,因为这种东西不是天天要写,过段时间就忘了,很容易引起挫败感。 Dockerfile或者Docker-compose的编写,可以安装一些编辑器插件辅助编写。 非官方中

    2024年04月15日
    浏览(16)
  • 启动docker容器的几种方法和注意事项(docker-compose,dockerfile)

    注意使用挂载命令volumes的时候,类似文件挂载可以这样写 表示宿主机docker-compose.yml当前目录下的/target/poi.jar文件挂载到容器默认目录app下 (如果是通过命令docker run -d -p 8088:8088 -v ./target/poi.jar:./app/,这样启动容器有两个报错,第一个是这样必须写绝对路径,不能写相对路径

    2024年02月11日
    浏览(35)
  • Prometheus-07 Docker-compose安装配置prometheus以及初步分析CPU/内存利用率分析

    关于docker-compose的配置安装可以参考我的这篇笔记: Docker-compose安装配置讲解 创建docker-compose.yml配置文件

    2024年02月10日
    浏览(16)
  • docker-compose 调整JVM参数

    docker-compose 调整JVM参数

    服务器配置比较低,导致部署在docker里的微服务占用内存太大部分本奎,就想调整下jvm参数优化下,又网上很多调整JVM参数的方法不能用或者调整后不生效,参考多篇文章后总结一个方法。 推荐 使用解决方式2 1、 docker-compose.yml 里加上environment的配置,如下: 2、执行 启动之

    2023年04月18日
    浏览(16)
  • 使用docker-compose.yml快速搭建开发、部署环境(nginx、tomcat、mysql、jar包、各种程序)以及多容器通信和统一配置

    image 镜像名称,可去镜像市场查找自己需要的 hostname 容器内服务名 container_name 容器名 volumes 可以把自己电脑的路径映射到容器中的文件夹中 networks 写同一个网络可以让容器之间进行通信 启动 在项目根目录的命令行中输入 docker-compose up 停止 在项目根目录的命令行中输入 d

    2024年02月12日
    浏览(16)
  • 解析Docker与docker-compose中volume参数的使用

    解析Docker与docker-compose中volume参数的使用

    目录 数据卷Volume的概念 数据挂载的实现方式 宿主机路径挂载在docker/docker-compose中的使用 卷标映射挂载在docker/docker-compose中的使用 A.匿名挂载 B.具名挂载 参考文献: 在docker内有个“数据卷持久化”的概念,也就是我们常说的“数据挂载”。它的作用是,将宿主机上的数据与

    2024年02月01日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包