设为首页 收藏本站
查看: 1004|回复: 0

[经验分享] 容器编排 Docker Compose

[复制链接]

尚未签到

发表于 2018-5-27 12:16:43 | 显示全部楼层 |阅读模式
  在我们启动容器的时候经常要使用docker run 指定很多参数,当我们需要管理很多容器时,使用这样的方式会给我们的运维人员带来很大的负担,docker compose容器编排工具无疑是解决这个一问题的利器。
  Docker Compose是用来管理多容器应用的工具,我们可以使用compose file 文件来配置容器的应用和服务,编写好compose file 文件以后,我们只需要使用一条简单的命令就可以创建并启动我们需要的应用。
  使用compose一般有三个步骤:
1、编写Dockerfile,定义镜像的构建参数。
  2、编写docker-compose.yml文件,定义应用的挂载,环境变量,启动参数等。
  3、执行 docker-compose up 命令,自动执行构建镜像并启动容器和应用。
  

  安装Compose
  这里只介绍Linux环境下的安装。
  执行如下命令:
curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose  可以根据的自己的需求安装不同的版本,修改链接中的版本号即可。也可以直接去https://github.com/docker/compose/releases 上下载需要的版本。
  对文件添加执行权限:

chmod +x /usr/local/bin/docker-compose  安装完成后,执行compose命令验证是否安装成功:

# docker-compose --version
docker-compose version 1.14.0, build c7bdf9e  

  Compose file 常用语法介绍
  compose使用的是YAML格式的文件,我们可以使用它来定义服务、网络和卷。compose file的固定命名为 docker-compose.yml。
  这里只列出常用的信息,具体用法参考:https://docs.docker.com/compose/compose-file/
  

  build: 构建镜像,指定构建的路径,文件,源镜像等信息。
build:
  context: .             # 指定Dockerfile的构建路径,或者是一个url的git仓库地址
  dockerfile: Dockerfile-abcd  #可以指定Dockerfile的名称,如果不是默认名称时。
  args:    #添加构建参数,环境变量参数只能在构建过程中访问,使用时需要先在Dockerfile中定义。
    - buildno=1  #yaml语法,‘=’两边不能有空格
    - password=secret #也可以使用列表的方式  'password: secret'  command: 用于重新覆盖Dockerfile中的COMMAND命令。
command: COMMAND args  也可以使用列表的形式:
command: ["comand1", "command2"]  devices: 映射宿主机的设备到容器中。

devices:
  - "/dev/ttyUSB0:/dev/ttyUSB0"  depends_on: 执行此模块的行为时,所依赖的其他模块必须已经完成。
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres  dns: 指定dns.
dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9  env_file: 从文件中添加环境变量参数。如果您使用docker-compose -f FILE指定了一个Compose文件,则env_file中的路径与文件所在的目录相关。
env_file: .env
env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env  expose:暴露端口而不将它们发布到主机 - 它们只能被链接服务访问。 只能指定内部端口。
expose:
- "3000"
- "8000"  image: 指定要从中启动容器的镜像,可以是存储库/标签或部分映像ID,如果有指定build行为,会自动为新构建的镜像打上此标签和命名(默认的v1 版本中build和image关键字不能同时存在,需要指定v2 或v3版本)。
image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd  links: 链接到另一个服务中的容器。 请同时指定服务名称和链接别名(SERVICE:ALIAS),或仅指定服务名称。
  logging: 日志服务。支持三种日志驱动,json-file, syslog, none. 默认的为json-file.
logging:
  driver: syslog
  options:
    syslog-address: "tcp://192.168.0.42:123"services:
  some-service:
    image: some-service
    logging:
      driver: "json-file"
      options:
        max-size: "200k"    # 日志文件最大不超过200K
        max-file: "10"      # 日志文件最多不超过10个  network_mode: 指定网络模式。与使用docker 命令的-net参数一样。
network_mode: "bridge"
network_mode: "host"
network_mode: "none"  networks: 指定所要加入的网络。
IPV4_ADDRESS:指定加入这个网络的IP地址。
services:
  some-service:
    networks:
     - some-network
     - other-networkservices:
  app:
    image: busybox
    command: ifconfig
    networks:
      app_net:
        ipv4_address: 172.16.238.10
        ipv6_address: 2001:3984:3989::10
networks:
  app_net:
    driver: bridge
    enable_ipv6: true
    ipam:
      driver: default
      config:
      -
        subnet: 172.16.238.0/24
      -
        subnet: 2001:3984:3989::/64  ports: 对外开放的端口。
  短语法模式:

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"  长语法模式(版本v3.2):
  target:容器内部端口
  published:对外暴露的端口
  protocol:协议类型
  mode:  host 用于在每个节点上发布主机端口的主机,或将要进行负载均衡的群模式端口的入口。
ports:
  - target: 80
    published: 8080
    protocol: tcp
    mode: hostvlumes: 挂载宿主机目录,或命名卷。
短语法:
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长语法(v3.2):

volumes:
  - type: volume
    source: mydata
    target: /data
    volume:
      nocopy: true
  - type: bind
    source: ./static
    target: /opt/app/staticrestart: 定义自启动。
restart: "no"
restart: always
restart: on-failure
restart: unless-stoppeddomainname, hostname, ipc, mac_address, privileged, read_only, shm_size, stdin_open, tty, user, working_dir指定属性。 与使用docker run 指定参数功能一样。
user: postgresql
working_dir: /code
domainname: foo.com
hostname: foo
ipc: host
mac_address: 02:42:ac:11:65:43
privileged: true
read_only: true
shm_size: 64M
stdin_open: true
tty: true  

  使用compose制作nginx-web容器
  这里用一个简单的示例说明docker-compose file的用法。
  安装好docker以及docker-compose,从官方下载centos镜像:
docker pull centos  1、选择一个构建目录,创建Dockerfile:
mkdir web
cd web
mkdir log       # 用于挂载容器的日志目录
vim Dockerfile  Dockerfile 内容:
FROM centos
MAINTAINER trying tryingstuff@163.com
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install nginx -y
RUN sed -i 'N;6adaemon off;' /etc/nginx/nginx.conf
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx"]  修改默认的nginx.conf配置为daemon off,具体的原因可参考之前的Docker 构建镜像
  添加index.html文件:
echo "this is Compose test!" > index.html  2、创建docker-compose.yml
vim docker-compose.ymlversion: '2'
services:
  web-nginx:
    build: .
    image: trying/nginx-com:v1
    ports:
     - "80:80"
    volumes:
     - ./log:/var/log/nginx
    container_name: web-compose
    command: ["nginx"]  文件说明:
  a. 指定compose版本为v2,建议使用v2 或v3版本,如果不指定,默认会使用v1版本,语法会不兼容。
  b. web-nginx定义了服务的名称,如果没有后面image参数指定,镜像名称会默认以 当前路径_服务名 命名如(web_web-nginx)。
  c. build: . 表示构建路径为当前路径。
  d. image 指定了构建之后的镜像名称,如果没有build行为,则表示当前镜像库中已有的镜像。
  e. ports 表示映射端口 宿主机端口:容器端口
  f. volumes表示容器挂载的宿主机目录。
  
3、在当前目录运行docker-compose命令, 如果不使用-d 选项,compose运行之后会一直驻留在前台,终止compose后容器也会停止。

docker-compose up -d  4、构建完成后,查看镜像:

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
trying/nginx-com    v1                  ec2f0106598a        21 minutes ago      401 MB
centos              latest              36540f359ca3        13 days ago         193 MB  
查看容器:
# docker ps
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                NAMES
eac73ff1bbef        trying/nginx-com:v1   "nginx"             22 minutes ago      Up 22 minutes       0.0.0.0:80->80/tcp   web-compose  查看服务状态(另一台主机上使用curl):
# curl 192.168.60.18
this is Compose test!  查看宿主机日志:
# cat log/access.log
192.168.60.19 - - [19/Jul/2017:05:16:38 +0000] "GET / HTTP/1.1" 200 29 "-" "curl/7.29.0" "-"  Dockerfile和docer compose支持的参数远不止这些,这里只是介绍了常用的很小一部分,更多具体的内容可以参考刚放文档。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481774-1-1.html 上篇帖子: docker配置overlay存储 下篇帖子: data
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表