GVKun编程网logo

docker-compose 配置(dockercompose配置文件详解)

10

本篇文章给大家谈谈docker-compose配置,以及dockercompose配置文件详解的知识点,同时本文还将给你拓展25.dockercompose简介和docker-compose.yml参

本篇文章给大家谈谈docker-compose 配置,以及dockercompose配置文件详解的知识点,同时本文还将给你拓展25.docker compose 简介 和 docker-compose.yml 参数介绍、7.docker 学习笔记之入门,docker compose 简单配置、docke/docker-composer未导入镜像前配置、Docker Compose 版本过高(Docker 版本不匹配),降低 docker-compose 版本等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

docker-compose 配置(dockercompose配置文件详解)

docker-compose 配置(dockercompose配置文件详解)

本文介绍compose配置文件参数的使用,熟练编写compose文件

[root@docker lnmp]# cat lnmp.yaml
version: ''3''
services:
  nginx:
    build: /root/docker_demo/nginx/
    ports:
      - "80:80"
    links:
      - php:php
    volumes:
      - "/www:/usr/local/nginx/html"
  php:
    image: php
    expose:
      - "9000"
    volumes:
      - "/www:/usr/local/nginx/html"

上面的一个例子version代表版本

什么版本的docker-compose对应什么版本的docker:

services就是compose中定义的服务,compose管理的是project、service、container,project如果没有指定就是默认的lnmp.yml文件的lnmp

nginx、php就是属于services的子集栏,定义了两个service

nginx服务中有各种参数:

build:和docker中的build构建一样,后面的路径指向Dockerfile的位置:

[root@docker lnmp]# ll /root/docker_demo/nginx/
total 832
-rw-r--r--. 1 root root   1133 Nov  6 13:40 Dockerfile
-rw-r--r--. 1 root root   1033 Nov  6 10:17 fastcgi_params
-rw-r--r--. 1 root root 833473 Nov  6 09:35 nginx-1.8.1.tar.gz
-rw-r--r--. 1 root root    776 Nov  6 10:16 nginx.conf
-rw-r--r--. 1 root root    341 Nov  6 16:43 www.conf

ports参数就是docker在docker run启动容器时-p选项的意思差不多,映射到本机host,前者的端口是本机host,后面是container_port

links参数也是docker run在启动容器时--link选项的意思差不多,用于与容器间的互联访问,php:php,前者php是定义的service名称,后者的php是给它定义了一个别名

volumes:与docker run在启动容器时-v选项的意思差不多,用于host与container之间的映射挂载,前者是host_mount_dir,后面是container中的目录

volumes:
  # Just specify a path and let the Engine create a volume
  - /var/lib/mysql

  # Specify an absolute path mapping
  - /opt/data:/var/lib/mysql

  # Path on the host, relative to the Compose file
  - ./cache:/tmp/cache

  # User-relative path
  - ~/configs:/etc/configs/:ro

  # Named volume
  - datavolume:/var/lib/mysql

在下面的php这个service中:

image:代表的就是使用的docker images中的某个镜像名称去开启container(默认tag为latest),如果本地没有镜像将会进行pull 

image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd

有了上面的第一个简单的compose yml文件,于是进行启动container:

[root@docker lnmp]# docker-compose -f lnmp.yaml up --build

由于我这里进行了配置文件的修改,所以不再单独的up,而是up --build(If you change a service’s Dockerfile or the contents of its build directory, run docker-compose build to rebuild it.)

单独的docker-compose -f lnmp.yaml build只会进行build而不会进行启动容器,之后还需进行docker-compose -f lnmp.yaml up

 build: /root/docker_demo/nginx/,build参数这里可以指定解决路径也可以以compose的项目路径的相对路径进行指定

[root@docker lnmp]# cat lnmp.yaml
version: ''3''
services:
  nginx:
    build:
      context: /root/docker_demo/nginx/
      dockerfile: /root/docker_demo/nginx/Dockerfile

build参数的子集也可以根据Dockerfile构建的context来进行build

在build子集中还有args的使用,配合Dockerfile中的ARG结合使用

[root@docker nginx]# cat Dockerfile 
FROM centos_init:v2

MAINTAINER json_hc@163.com
ARG buildno
RUN echo "Build number: $buildno"

上面的Dockerfile中定义了build,但是并没有赋值,RUN执行打印这个值,而在compose的yml中:

[root@docker lnmp]# cat lnmp.yaml
version: ''3''
services:
  nginx:
    build:
      context: /root/docker_demo/nginx/
      dockerfile: /root/docker_demo/nginx/Dockerfile
      args:
        buildno: 2

定义了buildno的值,于是在docker-compose执行构建时使用了这个值,下面是过程

如果仅仅在yml文件中定义了args变量,而没有在Dockerfile中定义相同的变量,将会报错:

[Warning] One or more build-args [foo] were not consumed.

ARG在Dockerfile中的用法:

ARG <name>[=<default value>]
设置变量命令,ARG命令定义了一个变量,在docker build创建镜像的时候,使用 --build-arg <varname>=<value>来指定参数
ARG user1
ARG buildno
或者定义默认值
ARG user1=someuser
ARG buildno=1

ARG只是在build构建过程中使用,构建完成后,变量将会消失和ENV有着明显的区别

而在compose的yml文件中args的定义:

build:
  context: .
  args:
    buildno: 1
    password: secret

build:
  context: .
  args:
    - buildno=1
    - password=secret

上面两种方式都可以

[root@docker lnmp]# cat lnmp.yaml
version: ''3''
services:
  nginx:
    build:
      context: /root/docker_demo/nginx/
      dockerfile: /root/docker_demo/nginx/Dockerfile
      args:
        - buildno=2

command参数,覆盖容器内默认的命令

[root@docker lnmp]# cat lnmp.yaml
version: ''3''
services:
  nginx:
    build:
      context: /root/docker_demo/nginx/
      dockerfile: /root/docker_demo/nginx/Dockerfile
      args:
        - buildno=2
    command: ["/usr/local/nginx/sbin/nginx"]

这里定义command的命令,而Dockerfile中的nginx的启动命令:

CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

所以在[root@docker lnmp]# docker-compose -f lnmp.yaml up --build

构建并启动时并不会成功:

可以明显的看到command定义的命令替换掉了Dockerfile中的CMD命令

 

container_name:自定义容器名

[root@docker lnmp]# cat lnmp.yaml
version: ''3''
services:
  nginx:
    build:
      context: /root/docker_demo/nginx/
      dockerfile: /root/docker_demo/nginx/Dockerfile
      args:
        - buildno=2
    container_name: lnmp-nginx

可以看见nginx服务的容器名已经改为lnmp-nginx了

 

depends_on:定义服务间的依赖关系

比如数据库db,必须在web启动之前进行启动,也就是说web启动依赖db的启动

[root@docker lnmp]# cat lnmp.yaml
version: ''3''
services:
  nginx:
    build:
      context: /root/docker_demo/nginx/
      dockerfile: /root/docker_demo/nginx/Dockerfile
      args:
        - buildno=2
    container_name: lnmp-nginx
    depends_on:
      - db
    ports:
      - "80:80"
    links:
      - php:php
    volumes:
      - "/www:/usr/local/nginx/html"
  php:
    image: php
    expose:
      - "9000"
    volumes:
      - "/www:/usr/local/nginx/html"
  db:
    image: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: redhat
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

可以看出nginx服务是最后启动容器的,由于nginx依赖db,而php与nginx有link,所以nginx最后启动

 

dns:设置dns

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

可以设置是一个单一值,也可以是一个列表

 

dns_search:自定义搜索域:

dns_search: example.com
dns_search:
  - dc1.example.com
  - dc2.example.com

可以设置为单一值,也可以是一个列表

 

entrypoint:覆盖Dockerfile中的entrypoint,用法同Dockerfile中的用法

[root@docker lnmp]# cat lnmp.yaml
version: ''3''
services:
  nginx:
    build:
      context: /root/docker_demo/nginx/
      dockerfile: /root/docker_demo/nginx/Dockerfile
      args:
        - buildno=2
    container_name: lnmp-nginx
    entrypoint: ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

[root@docker lnmp]# docker-compose -f lnmp.yaml ps  
   Name                 Command               State           Ports         
----------------------------------------------------------------------------
lnmp-nginx   /usr/local/nginx/sbin/ngin ...   Up      0.0.0.0:80->80/tcp    
lnmp_db_1    docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp
lnmp_php_1   /usr/local/php/sbin/php-fpm      Up      9000/tcp

 

env_file:将定义的变量编写在文件中,然后在yml文件中进行添加

env_file: .env

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

创建env_file文件mysql_env.txt:

[root@docker lnmp]# ll
total 16
-rw-r--r--. 1 root root 477 Nov  9 17:00 docker-compose.yml.bak
-rw-r--r--. 1 root root 550 Nov 10 15:45 lnmp.yaml
-rw-r--r--. 1 root root 271 Nov 10 10:26 lnmp.yaml.bak
-rw-r--r--. 1 root root  98 Nov 10 15:46 mysql_env.txt

查看定义的变量:

[root@docker lnmp]# cat mysql_env.txt 
MYSQL_ROOT_PASSWORD=redhat
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress

变量的定义格式为这样

然后进行docker-compose:

[root@docker lnmp]# docker-compose -f lnmp.yaml up --build

进入到db服务中进行验证变量是否创建成功:

[root@docker nginx]# docker-compose -f /root/compose_project/lnmp/lnmp.yaml exec db sh
# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ''help;'' or ''\h'' for help. Type ''\c'' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)

mysql>

可以看见MySQL的root密码已经设置,也创建了数据库wordpress等等

 

environment:添加环境变量,可以是一个字典也可以是数组

environment:
  RACK_ENV: development
  SHOW: ''true''
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET
db:
    image: mysql
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=redhat
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress

定义完成后进行构建并启动后,进行验证:

[root@docker nginx]# docker-compose -f /root/compose_project/lnmp/lnmp.yaml exec db sh
# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ''help;'' or ''\h'' for help. Type ''\c'' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)

mysql>

 

expose:暴露container的端口,但是并没有映射到host主机上,用法类似于Dockerfile中的EXPOSE

php:
    image: php
    expose:
      - "9000"
    volumes:
      - "/www:/usr/local/nginx/html"

 

external_links:

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

 链接到 docker-compose.yml 外部的容器,甚至 并非 Compose 管理的容器。参数格式跟 links 类似。

这个参数下篇文章有介绍

 

extra_hosts:添加hostname映射,类似于docker cli下面的--add-host

extra_hosts:
      - "www.hcstart.com:192.168.101.14"

然后将这个compose file进行up:

[root@docker lnmp]# docker-compose -f lnmp.yml up --build
Creating network "lnmp_net1" with driver "bridge"
Creating lnmp-php ... 
Creating lnmp-php ... done
Creating lnmp-nginx ... 
Creating lnmp-nginx ... done
Attaching to lnmp-php, lnmp-nginx
[root@docker lnmp]# docker-compose -f lnmp.yml exec nginx cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.101.14  www.hcstart.com
172.19.0.3      35cc14084be9

上面的/etc/hosts就可以看见刚刚加入的www.hctsrat.com映射了

 

healthcheck:配置一个检查去测试服务中的容器是否运行正常

[root@docker lnmp]# cat lnmp.yml|grep health -A 4
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 1m30s
      timeout: 10s
      retries: 3

查看healthcheck的状态输出:

[root@docker lnmp]# docker inspect lnmp-nginx
"Health": {
                "Status": "healthy",
                "FailingStreak": 0,
                "Log": [
                    {
                        "Start": "2017-10-27T03:52:37.921723965-04:00",
                        "End": "2017-10-27T03:52:38.021941235-04:00",
                        "ExitCode": 0,
                        "Output": "  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0<h1>hello nginx and php</h1>\n\r100    29  100    29    0     0   5741      0 --:--:-- --:--:-- --:--:--  7250\n"
                    },

healthcheck中选项的详解:https://docs.docker.com/engine/reference/builder/#healthcheck

 

labels:添加元数据到container中,查看现有容器的labels:

[root@docker lnmp]# docker inspect -f {{.Config.Labels}} lnmp-nginx
map[com.docker.compose.oneoff:False com.docker.compose.service:nginx com.docker.compose.version:1.17.0 license:GPLv2 vendor:CentOS build-date:20170911 com.docker.compose.config-hash:edaa6c6d8f12639e28cb4bcdffda4961ef5a90f076e9017b204dacda56525e5b com.docker.compose.container-number:1 com.docker.compose.project:lnmp name:CentOS Base Image]

 

logging:为服务配置记录日志

[root@docker lnmp]# cat lnmp.yml|grep logging -A 4
    logging:
      driver: "json-file"
      options:
        max-size: "2000k"
        max-file: "10"

logging支持很多driver,而每一个driver对应的options都不一样:

[root@docker lnmp]# docker inspect -f {{.HostConfig.LogConfig}} lnmp-nginx
{json-file map[max-file:10 max-size:2000k]}
[root@docker lnmp]# docker info |grep ''Logging Driver''
Logging Driver: json-file

更多其他的driver查看:https://docs.docker.com/engine/admin/logging/overview/

 

sysctls:在容器中设置内核参数

sysctls:
  net.core.somaxconn: 1024
  net.ipv4.tcp_syncookies: 0

sysctls:
  - net.core.somaxconn=1024
  - net.ipv4.tcp_syncookies=0

 

 

 
 原文:https://www.cnblogs.com/jsonhc/p/7814138.html

25.docker compose 简介 和 docker-compose.yml 参数介绍

25.docker compose 简介 和 docker-compose.yml 参数介绍

1. docker compose概念  文档  https://docs.docker.com/compose/compose-file/compose-versioning

  一个基于 docker 的工具

  可以通过一个 yml 文件定义多容器的 docker 应用

  通过一条命令就可以根据 yml 文件的定义 去创建或者管理这多个容器

2 docker compose 版本 2 与 版本 3 的区别

  最大的区别

    version 2 只能用于单机

    version 3 可用于多机

3. docker-compose.yml

  

    Services

      一个 service 代表一个 container , 这个 container 可以从 dockerhub 的 image 来创建, 或者从本地的 Dockerfile build出来的image 来创建

      service 的启动 类似与 docker run , 我们可以给其指定 network 和 volume . 所以可以给 service 指定 network 和 volume 的引用

      eg :

      docker run -d --name db -v db-data:/var/liv/postgresql/data --network back-tier  postgres:9.4

      services:

        db:                #service 的名称为 db

          image: postgres:9.4      #service image 为 postgres:9.4  这是从远程拉取的

          volumes:

            - "db-data:/var/liv/postgresql/data"  #将外部db-data挂载到container 的 /var/liv/postgresql/data 内

          networks:

            - back-tier        #网络为 back-tier

      eg2:

      docker run -d --link db --link redis --network back-tier  worker

      services:

        worker:

          build: ./worker

          links:

            - db

            - redis

          networks:

            - back-tier        #在同一个网络上 不需要links

    Volumes:

      上面 的

      volumes:

       - "db-data:/var/liv/postgresql/data"  #将外部db-data挂载到container 的 /var/liv/postgresql/data 内

      会有单独的一个 volumes (与 services 同级别) 对db-data 进行 阐述

      类似于 docker volume create db-data

      eg:

      volumes:

        db-data:

    Nerworks:

      上面 的

      networks:

        - back-tier        #在同一个网络上 不需要links

      会有单独的一个 networks (与 services 同级别) 对back-tier 进行 阐述

      类似于  docker nerwork create -d bridge back-tier

      networks:

        front-tier:

          driver: bridge

        back-tier:

          driver: bridge

4编写 docker-compose.yml

# docker compose api 版本

version: ''3''

 

services:

# 定义了 两个 service 分别是 名字分别是 wordpress 和 mysql

  wordpress:

#image 为 word press

    image: wordpress

#本地 8888 端口 映射 容器 80 端口

    ports:

      - 8888:80

#wordpress 连接数据库 的 host 为 mysql , passwword 为 root 类似于 -e

    environment:

      WORDPRESS_DB_HOST: mysql

      WORDPRESS_DB_PASSWORD: root

#指定连接 的网络 为 my-bridge

    networks:

      - my-bridge

 

  mysql:

    image: mysql:5.7.27

# 数据库 root 的 连接密码 和 所使用的数据库名称

    environment:

      MYSQL_ROOT_PASSWORD: root

      MYSQL_DATABASE: wordpress

# 外部 mysql-data 挂载到 容器内的 /var/lib/mysql

    volumes:

      - mysql-data:/var/lib/mysql

#指定连接 的网络 为 my-bridge

    networks:

      - my-bridge

 

# 定义 volumes

volumes:

  mysql-data:

 

# 定义 networks

networks:

  my-bridge:

    driver: bridge

 

7.docker 学习笔记之入门,docker compose 简单配置

7.docker 学习笔记之入门,docker compose 简单配置

version: "3.6"
#设置网络环境
networks:
    #自定义网络
    nginx-network:
        ipam:
            driver: bridge
            config:
                - subnet: "172.16.238.0/24"
    #引用外部预先定义好的网段
    redis-network:
        external:
            name: redis-network
services:
    nginx:
        image: nginx
        container_name: nginx-compose
        environment:  #设置环境变量
            password: "123456"
        ports:
            - "8003:80"
        networks:
            redis-network:
                ipv4_address: 192.168.1.5
        volumes:
            - "/usr/docker/compose/nginx/conf:/conf"
        command: ["/usr/local/nginx/sbin/nginx","-c","/conf/nginx.conf","-g","daemon off;"]
        privileged: true  #特殊权限
        working_dir: /conf #工作目录
        stdin_open: true  #打开标准输入
        tty: true  #模拟伪终端
    nginx1:
        build:
            context: ./nginx
            dockerfile: Dockerfile
            args:
                buildno: 1
        container_name: nginx-compose2
        ports:
            - "8002:80"
        networks:
            redis-network:
                ipv4_address: 192.168.1.6
        volumes:
            - "/usr/docker/compose/nginx/conf:/conf"
        command: ["/usr/local/nginx/sbin/nginx","-c","/conf/nginx.conf","-g","daemon off;"]

docker-compose up -d #最简单的执行命令,如果没报错的话 docker images;docker ps -a 就会有对应的镜像和容器

docker-compose -p testname1 up -d #给上命名

docke/docker-composer未导入镜像前配置

docke/docker-composer未导入镜像前配置

  更新 apt 包索引与升级

sudo apt-get update
sudo apt-get upgrade

  安装 apt 依赖包,用于通过HTTPS来获取仓库:

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

 添加 Docker 的官方 GPG 密钥:

curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥。

sudo apt-key fingerprint 0EBFCD88
   
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unkNown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

  设置稳定版仓库

sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
  $(lsb_release -cs) \
  stable"

  要安装特定版本的 Docker Engine-Community,请在仓库中列出可用版本,然后选择一种安装。列出您的仓库中可用的版本:

apt-cache madison docker-ce

  docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu  xenial/stable amd64 Packages
  docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu  xenial/stable amd64 Packages
  docker-ce | 18.06.1~ce~3-0~ubuntu       | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu  xenial/stable amd64 Packages
  docker-ce | 18.06.0~ce~3-0~ubuntu       | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu  xenial/stable amd64 Packages
  ...

  使用第二列中的版本字符串安装特定版本,例如 5:18.09.1~3-0~ubuntu-xenial

sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

  简易直接安装

sudo apt-get install docker-ce

  测试 Docker 是否安装成功

sudo docker run hello-world

  使用 Shell 脚本进行安装

Docker 在 get.docker.com 和 test.docker.com 上提供了方便脚本,用于将快速安装 Docker Engine-Community 的边缘版本和测试版本。脚本的源代码在 docker-install 仓库中。 不建议在生产环境中使用这些脚本,在使用它们之前,您应该了解潜在的风险:

  • 脚本需要运行 root 或具有 sudo 特权。因此,在运行脚本之前,应仔细检查和审核脚本。

  • 这些脚本尝试检测 Linux 发行版和版本,并为您配置软件包管理系统。此外,脚本不允许您自定义任何安装参数。从 Docker 的角度或您自己组织的准则和标准的角度来看,这可能导致不支持的配置。

  • 这些脚本将安装软件包管理器的所有依赖项和建议,而无需进行确认。这可能会安装大量软件包,具体取决于主机的当前配置。

  • 该脚本未提供用于指定要安装哪个版本的 Docker 的选项,而是安装了在 edge 通道中发布的最新版本。

  • 如果已使用其他机制将 Docker 安装在主机上,请不要使用便捷脚本。

本示例使用 get.docker.com 上的脚本在 Linux 上安装最新版本的Docker Engine-Community。要安装最新的测试版本,请改用 test.docker.com。在下面的每个命令,取代每次出现 get 用 test。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

  如果要使用 Docker 作为非 root 用户,则应考虑使用类似以下方式将用户添加到 docker 组

sudo usermod -aG docker your-user

  docker-compose的安装不推荐pip安装,无论如何都会失败,用以下官方提供的方法:

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

  docker pull镜像加速源配置,docker-compose和docker共用一个,下列命令行执行完后直接重启docker服务,如果docker镜像下载速度缓慢,则重新启动系统可解决这个问题

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fudfkcar.mirror.aliyuncs.com"]
}
EOF

  

 

Docker Compose 版本过高(Docker 版本不匹配),降低 docker-compose 版本

Docker Compose 版本过高(Docker 版本不匹配),降低 docker-compose 版本

通过 docker-compose 启动容器,报错:

ERROR: The Docker Engine version is less than the minimum required by Compose. Your current project requires a Docker Engine of version 1.10.0 or greater.

  

升级 Docker 过于麻烦,只能降 docker-compose 的版本。

先看一下我们已经安装的 Docker 版本:

[root@Redmine-186 docker-compose]# docker -v
Docker version 1.7.1, build 786b29d/1.7.1

  经查 Docker Compose Github Docs,发现 docker-compose 1.5.2 版本是兼容 Docker 1.7.1 的:Note that Compose 1.5.2 requires Docker 1.7.1 or later.

  好了,开始降级 docker-compose,先卸载:

# pip uninstall docker-compose

  

再安装指定版本:

# pip install docker-compose==1.5.2

  至此,docker-compose 降版本成功!

docker-compose.yml 版本问题

解决完 docker-compse 版本问题适配之后,对着已有的 docker-compose.yml 执行 “,会提示不能正常识别 docker-compose.yml 文件中的内容。究其原因,是因为我们的 docker-compose 1.5.2 只支持 V1 版本的 docker-compose.yml ,那么好,把现在 V2 版本的 docker-compose.yml 改成 V1 版本的格式。

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

先看文档:Compose file versions and upgrading。

V1 版本的 docker-compose.yml 文件格式主要区别就是: 
- 没有开头的 version 声明 
- 没有 services 声明 
- 不支持 depends_on 
- 不支持命名的 volumes, networks, build arguments 声明 
- 其他我没用到的所以没细究的区别

附录

  • How To Install Docker on CentOS 6
  • Docker and docker-compose in CentOS 6
  • 关于 pip 安装时提示 pkg_resources.DistributionNotFound 错误问题
  • CentOS 升级 Python2.7
  • ERROR: The Docker Engine version is less than the minimum required by Compose
  • Docker Compose Github Docs
  • Compose file versions and upgrading

我们今天的关于docker-compose 配置dockercompose配置文件详解的分享就到这里,谢谢您的阅读,如果想了解更多关于25.docker compose 简介 和 docker-compose.yml 参数介绍、7.docker 学习笔记之入门,docker compose 简单配置、docke/docker-composer未导入镜像前配置、Docker Compose 版本过高(Docker 版本不匹配),降低 docker-compose 版本的相关信息,可以在本站进行搜索。

本文标签: