Docker-Compose

作者: meieugene | 来源:发表于2018-04-08 22:12 被阅读6次

    Docker-Compose

    Docker Compose

    Docker Compose是一个用来定义和运行复杂应用的docker工具。

    可以通过使用Compose在一个文件中定义一个多容器应用,使用docker-compose up命令来启动应用。

    Compose的指令

    • build 构建或重建服务
    • help 帮助指令
    • kill 结束容器
    • logs 记录容器输出日志
    • port 打印容器绑定的端口
    • ps 列出容器列表
    • pull 从仓库拉取服务镜像
    • restart 重启
    • rm 删除已经停止的容器
    • run 运行容器
    • scale 设置服务的容器数目
    • stop 停止
    • start 开启
    • up 创建并启动容器

    以上都是compose的一些基础指令,但是Docker Compose最为重要的是docker-compose.yml配置的设置。

    docker-compose.yml配置文件

    一份标准的配置文件由version、services、networks三部分组成,其中最关键的是services和networks。

    以下介绍services的书写规则:

    一、image

    services:
      db:
        image: "mysql:5.7.15"   
    

    在services标签下的第二级标签db是用户给当前这个服务自定义的名字。

    image是指定服务的镜像名称或者镜像ID(如果镜像在本地不存在,就会到仓库中去pull)。

    二、build

    services除了可以基于指定的image,还可以基于一份Dockerfile,在docker-compose up启动的时候执行构建。

    services:
      nginx:
        build: /path/nginx
    

    build就是用来指定Dockerfile所在的文件路径,这里的路径可以是绝对路径亦可是相对路径。

    注:

    如果同时指定了image和build两个标签,那么Compose会在构建镜像时使用iamge的名称来命名。

    三、command

    使用command可以覆盖容器启动后默认执行的命令。

    如:

    command: bundle exec thin -p 3000
    # 或
    command: [bundle,exec,thin,-p,3000]
    

    四、container_name

    container_name: app #指定容器名称
    

    五、depends_on

    一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。

    为了避免这一情况,可使用depends_on。

    depends_on标签是用来规定容器启动的先后顺序。

    如:

    version: ’2‘
    services: 
        web:
          build: .
          depends_on:
            - db
            - redis
        redis:
          image: redis
        db:
          image: postgres
    

    以上配置中的depends_on规定的启动顺序为:db、redis、web。

    六、tmpfs

    挂载临时目录到容器内部,与run的参数效果一样。

    tmpfs: /run
    tmpfs:
      - /run
      - /tmp
    

    七、entrypoint

    与Dockerfile中的ENTRYPOINT一样,在容器启动时有效。

    entrypoint: /usr/sbin/nginx #启动时运行nginx
    

    八、expose

    与Dockerfile中的EXPOSE一样,用于暴露接口。

    expose: 
      - "3500"
      - "5000"
    

    九、links

    解决容器链接问题。

    links:
        - db
        - redis
    

    以上配置是指,当前服务将要链接数据库和redis方可正常运行。

    十、ports

    映射端口。

    ports:
     - "3000"
     - "8000:8000"
     - "49100:22"
     - "127.0.0.1:8001:8001"
    

    注:

    当使用HOST:CONTAINER格式来映射端口时,如果你使用的容器端口小于60你可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制。

    建议采用字符串格式。

    十一、volumes

    挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER] 这样的格式,或者使用 [HOST:CONTAINER:ro] 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统。

    volumes:
      # 指定一个文件目录,用来存放容器数据。
      # $PWD 表示当前路径
      - $PWD/data:/var/lib/mysql
    

    以上是个人感觉相对重要的标签,其它详解

    实例

    version: '2'
    
    # 指定网络模式
    networks:
      ghost:
    
    # 配置服务
    services:
      ghost-app:
        # 使用当前路径下ghost中的Dockerfile构建容器
        build: ghost
        networks:
          - ghost
        # 指定当前服务依赖服务
        depends_on:
          - db
        # 端口映射
        ports:
          - "2368:2368"
    
      nginx:
        build: nginx
        networks:
          - ghost
        depends_on:
          - ghost-app
        ports:
          - "80:80"
     
      db:
        image: "mysql:5.7.15"
        networks:
          - ghost
        # 配置环境变量
        environment:
          MYSQL_ROOT_PASSWORD: mysqlroot
          MYSQL_USER: ghost
          MYSQL_PASSWORD: ghost
        # 设置数据路径,容器销毁任然有效
        volumes:
          - $PWD/data:/var/lib/mysql
        ports:
          - "3306:3306"        
    

    相关文章

      网友评论

        本文标题:Docker-Compose

        本文链接:https://www.haomeiwen.com/subject/ykfvhftx.html