docker-compose.yml文件

version:指定 docker-compose.yml 的版本

执行docker-compose.yml文件之前先查看yml文件的版本信息version 和docker-compose的版本是否匹配一致

不一致要卸载docker-compose安装适配的版本

  1. V1 版本的 docker-compose.yml 只被支持到 docker-compose 1.6.x。再往后的 docker-compose 版本就不再支持 V1 版本的 docker-compose.yml

V1 版本的 docker-compose.yml 文件格式主要区别就是: 

- 没有开头的 version 声明 - 没有 services 声明 - 不支持 depends_on - 不支持命名的 volumes, networks, build arguments 声明

  1. V2版本仅支持单机模式
  2. V3版本支持单机模式也支持多机模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
version: '2'
services:
  web:  #服务名,自定义的
    image: dockercloud/hello-world  #指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
    ports:
      - 8080
    networks:
      - front-tier
      - back-tier
 
  redis:
    image: redis
    links:
      - web
    networks:
      - back-tier
 
  lb:
    image: dockercloud/haproxy
    ports:
      - 80:80
    links:
      - web
    networks:
      - front-tier
      - back-tier
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
 
networks:
  front-tier:
    driver: bridge
  back-tier:
driver: bridge

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: '2'
services:
  c-chemical-mysql:  #服务名,自定义的
    build:
      context: ./
      dockerfile: ./doc/db/Dockerfile
    environment:
      MYSQL_ROOT_PASSWORD: root
    restart: always
    container_name: c-chemical-mysql
    image: c-chemical-mysql  #指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
    ports:
      - 13306:3306
    volumes:
      - ./doc/conf/mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
    privileged: true
 
  c-chemical-redis:
    image: redis:4.0.10
    restart: always
    container_name: c-chemical-redis
    volumes:
      - ./doc/conf/redis/redis.conf:/etc/redis/redis.conf
    command: redis-server /etc/redis/redis.conf

一份标准配置文件应该包含 version、services、networks 三大部分,其中最关键的就是 services 和 networks 两个部分

2. build

服务可以基于镜像Dockerfile两种方式构建。build指定 Dockerfile 的路径。Compose 根据Dockerfile构建镜像,然后使用构建好的镜像启动服务容器。

Dockerfile的路径可以是绝对路径、相对路径,或者设定上下文根目录,然后以该目录为准指定 Dockerfile。

1
2
3
4
5
build: /path/to/build/dir
build: ./dir
build:
  context: ../
  dockerfile: path/of/Dockerfile

注意 build 都是一个目录,dockerfile 标签指定Dockerfile 文件。
如果同时指定了 image 和 build 两个标签,那么 Compose 会构建镜像并且把镜像命名为 image 后面的那个名字。

command

1
command 容器启动后默认执行命令

也可以写成类似 Dockerfile 中的格式:

1
command: [bundle, exec, thin, -p, 3000]

container_name

Compose 的容器名称格式是:<项目名称><服务名称><序号>
虽然可以自定义项目名称、服务名称,但是如果你想完全控制容器的命名,可以使用这个标签指定:

container_name: app

environment

环境变量设置,可使用数组或字典两种方式。示例:

1
2
3
4
5
6
7
8
9
environment:
 RACK_ENV: development
 SHOW: 'true'
 SESSION_SECRET:
 
environment:
 - RACK_ENV=development
 - SHOW=true
 - SESSION_SECRET

  

privileged: true

大约在0.6版,privileged被引入docker。
使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
甚至允许你在docker容器中启动docker容器。

开了可以挂载host上的硬盘或其它的设备, 如打印机, 摄像头什么的都可以, volumes和这参数没什么关系

 
创建容器时没有添加参数  --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动。

现在要添加该参数怎么办呢,方法有二:

1、Docker 命令修改

docker container update --restart=always 容器名字
 
posted @   linuxws  阅读(4380)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2019-01-08 开发规范与要求
2019-01-08 python——函数
2019-01-08 python——文件操作
2019-01-08 python——字符编码
2019-01-08 python——基本数据类型1——简介
点击右上角即可分享
微信分享提示