资讯专栏INFORMATION COLUMN

[afterCode] docker 速成班 6: docker-compose

Integ / 527人阅读

摘要:通过的我们可以将多个有机的组合起来构建出自己需要的服务但是这里有几个小问题就是不利于分享步骤麻烦需要自己创建指定使用那如何解决上面的两个问题呢第节例子中的服务可以通过创建一个这样的文件来解决通过下面的命令就能将所有需要的启动起来

通过docker 的 network我们可以将多个 container 有机的组合起来构建出自己需要的服务. 但是这里有几个小问题就是

不利于分享.

步骤麻烦.(需要自己创建 network;指定container 使用 network;... )

那如何解决上面的两个问题呢?

docker-compose.yml

第5节例子中的服务可以通过创建一个这样的docker-compose.yml文件来解决.

version: "3"
services:
  nginx:
    image: nginx
    ports:
      - 8080:8080
    volumes:
      - ./conf.d:/etc/nginx/conf.d
    depends_on:
      - nodeapp
  nodeapp:
    build: "./"
    container_name: hello
    environment:
      - NODE_ENV=production

通过下面的命令就能将所有需要的 container 启动起来.

docker-compose up

docker-compose.yml 文件可以理解为为了让项目工作起来组织 docker container 的 yaml 格式的配置文件. 一个 docker-compose.yml 文件就一个项目. 配置文件里面可以定义 services, volumesnetworks 三个主要部分. 我个人的喜好是直接使用映射的方式来配置 container 的持久化的磁盘空间,所以比较少的用
volumes 部分;而一个 docker-compose.yml 启动起来之后,docker 会为这个项目创建一个默认的 networks, 默认情况下这些容器都是连接在这个 network 中. 而且还支持用 container_name 的 dns 解析; 所以最重要的还是 services 的定义, 而 services 的定义就是根据项目需要列举的 container 的定义.

对于 container 的定义大致有两类, 直接可以使用的 docker hub 上 image 的. 如这个例子中的 nginx 容器;简单的通过 image 字段就能指定需要的 image; 再通过 ports,volumes, environment 字段来指定 container 的端口映射,磁盘映射和环境变量配置等等. 能通过 docker run 选项做到的事情 docker-compose.yml 中都能做到. 特别提一点的就是在磁盘映射的时候, 宿主机的路径可以是用相对与docker-compose.yml的相对路径. 例子中 nginx 的定义下面的命令行一样的意义; 其中这个 project_defaultdocker-compose.yml 启动时创建的默认 network.

$docker run --network project_default  
            -v $PWD/conf.d:/etc/nginx/conf.d -p 8080:8080 nginx

第二种定义的方式就基于 Dockerfile. 那容器是如何工作的就完全有 Dockerfile 来决定了. build字段是用来指定 Dockerfile所在的路径. 例子中定义的 nodeapp 服务, 还是用了 environment 来指定程序运行的环境变量;用 container_name 指定了容器的名字, 如果不做指定的话, container 的名字使用 项目名_服务名 的格式来命名. 而且我们在 nginx 服务反向代理的时候需要用 container 的名字来访问 node 中的 web 服务, 所以这里就定义了container 的名字.

通过 Dockerfiledocker-compose.yml 就能非常的方便的分享你项目运行和开发环境的配置了.

希望大家喜欢.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27079.html

相关文章

  • [afterCode] docker 成班 7: 实战 构建基于graphtie/grafana监

    摘要:由于公司没有运维又需要监控服务器的一些数据信息想尽快的启动一个数值监控系统技术评估了下打算的方式来建设是一个时间数列数据库并且自带一些简单图形展示功能虽然展示方面不是很完美但是在收集时间数据上非常的方便和简单根据官网的例子只需要一个连接就能 由于公司没有运维, 又需要监控服务器的一些数据信息, 想尽快的启动一个数值监控系统. 技术评估了下打算 graphite + grafana 的...

    jhhfft 评论0 收藏0
  • [afterCode] docker 成班 1: image

    摘要:在程序员英语娱乐主题节目的直播中介绍了下在网站学习的视频由于时间仓促只学习了一部分最近因为的公司的原因也没有时间继续搞直播所以想写一篇分享下自己的的学习经验想学习简短有效的风格所以就将文章题目定为速成班准备本地已经安装好了现在各个操作系统上 在程序员英语娱乐主题节目http://www.douyu.com/aftercode的直播中介绍了下在 egghead 网站学习 docker 的...

    waltr 评论0 收藏0
  • [afterCode] docker 成班 番外篇: 随机容器名

    摘要:上一篇提到使用启动一个容器如果没有使用来指定容器名字的话会自动按照形容词名人名的形式生成一个那这些名人是谁呢源代码说明一切自用一些著名的科学家和黑客名字来命名容器如果有你认为有还没有在这些列表中的话给项目提交哈哈想给牛逼项目提交吗又多 上一篇 blog 提到使用 docker 启动一个容器如果没有使用--name来指定容器名字的话,docker 会自动按照 形容词_名人名的形式生成一个...

    gxyz 评论0 收藏0
  • [afterCode] docker 成班 3: 使用 container 中的功能

    摘要:通过将执行起来了不是为了看看容器的状态而是想使用中的功能介绍两种方式来使用容器中的功能通过端口访问中的服务通过端口的方式来使用提供的服务是最简单的了只要通过或者选项来向宿主机暴露服务端口就可以了比如我们可以这样在后台启动一个服务并将中 通过docker 将 container 执行起来了,不是为了看看容器的状态,而是想使用 container 中的功能.介绍两种方式来使用容器中的功能....

    Rainie 评论0 收藏0
  • [afterCode] docker 成班 2: container

    摘要:本来想在一篇里面就写完所有的内容的但是考虑考虑到文章太长会和风格相背离所以就按连载的形式来容器是物质基础有了这个才能让能运行起来运行起来的称之为容器它使用中的一等公民直接启动使用启动一个容器如果你没有下载过的话会自动下载一个的指定方法和删除 本来想在一篇 blog 里面就写完所有的内容的,但是考虑考虑到文章太长会和 egghead 风格相背离,所以就按连载的形式来. 容器 contai...

    stormjun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<