docker 容器运行 golang程序_运行多容器的应用--使用docker-compose

wx57f63dceec388 · · 635 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

参考链接: Go-程序结构

使用docker-compose.yml来定义你的应用,并且使用up/down命令来运行,这样可以让你对多容器的应用进行编排。  Compose是一个定义和运行多容器应用的工具, 也就是容器编排工具。使用Compose时,你会使用到一个Compose配置文件去配置你的应用的各个服务。然后通过使用这个配置文件就可以一条命令启动所有的服务。

 和docker命令的类似之处

 Docker-compose命令大体上和docker命令类似,除了一些给多容器应用的使用的附加指令。尤其是下面这些命令,和docker命令很类似:

 docker-compose up / down

 docker-compose up 用于创建并运行容器. 在detached( -d )模式下, 启动容器之后Compose会退出, 但是容器还在后台运行。

 

  docker-compose up -d rabbit-mq

 

 docker-compose down 用于停止并移除容器,网络,镜像和卷。

 

  docker-compose down -v

 

 这个命令有一些有用的选项: 

 --rmi [type] 移除镜像。 type必须是以下其中一个:

   'all': 移除任何服务使用的所有的镜像。 'local': 只移除没有通过image设置自定义标签的镜像。-v, --volumes 移除在配置文件中通过volumes声明的命名卷和attach到这个容器的所有卷。--remove-orphans 移除没有在Composer中定义的容器(杀死孤儿)。

 创建一个Dockerfile

 就像运行一个docker需要镜像一样,创建镜像也需要一个dockerfile来确定怎样创建镜像和容器。一个Ruby on Rails应用使用的Dockerfile可能是这样:

 

  FROM ruby:2.3.3

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs 

RUN mkdir /myapp

WORKDIR /myapp 

COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock

RUN bundle install

COPY . /myapp

 

 docker-compose: getting started guide 有一步一步的指导教你创建dockerfile然后把dockerfile改写成docker-compose.yml。

 docker-compose.yml之旅: 结构和组成

 要定义你自己的多容器应用,你需要在你的应用的root文件夹使用docker-compose.yml。  compose-file的文档提供了详尽的解释和指导去生成这个文件。 下面是主要特性的快速上手指南:  文件的最开始引入版本: version: "3"  然后定义服务: services:  之后列出你想要创建的服务, 每一个容器都有对应的配置项。 

 image - 指定一个dockerhub上或者本地有的镜像 image: ruby:alpine - depends_on — 这个容器依赖的其他容器,启动父容器也会同时启动父容器依赖的容器。

 

  version: '3' 

services: 

  web: 

    build: . 

    depends_on:  

      - db  

      - redis   

    redis: 

      image: redis   

    db:     

      image: postgres

 

 environment — 增加环境变量.

 

  environment:   

  RACK_ENV: development   

  SHOW: 'true'   

  SESSION_SECRET: 

environment:   

  - RACK_ENV=development    

  - SHOW=true   

  - SESSION_SECRET

 

 volumes — 包含宿主机的路径或者命名卷。 你可以通过这样的格式替换容器的数据 <path to file>:<path to location in container> 并且可以把文件夹权限接在后面:ro (read only)

 

  version: "3.2" 

services:

   web: 

    image: nginx:alpine 

    volumes:       

      - type: volume         

        source: mydata         

        target: /data         

        volume:           

        nocopy: true       

      - type: bind         

        source: ./static         

        target: /opt/app/static

  db:     

    image: postgres:latest     

    volumes:       

      - "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock"       

      - "dbdata:/var/lib/postgresql/data"

 

 ports — 可以指定映射两个对应的端口(HOST:CONTAINER), 或者只指定容器的端口,系统会自动分配一个临时的外部端口。 

 

  ports:  

  - "3000"  

  - "3000-3005"  

  - "8000:8000"  

  - "9090-9091:8080-8081"  

  - "49100:22"  

  - "127.0.0.1:8001:8001"  

  - "127.0.0.1:5000-5010:5000-5010"  

  - "6060:6060/udp"

 

 Docker Compose 功能非常强大,还有更多用法需要学习,Docker文档有非常详尽的说明,本文只是略作抛砖引玉。

 原文链接: 

 https://medium.com/the-code-review/the-ups-and-downs-of-docker-compose-how-to-run-multi-container-applications-bf7a8e33017emedium.com



有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:wx57f63dceec388

查看原文:docker 容器运行 golang程序_运行多容器的应用--使用docker-compose

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

635 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传