`
llitllie
  • 浏览: 7628 次
文章分类
社区版块
存档分类
最新评论

使用Docker Compose管理Docker容器

阅读更多

上一篇创建了一个PHP的运行环境,现在需要一个MySQL服务,直接运行:

root@thinkpad:~# docker run --name rocket-mysql -v /home/rocketfish/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
 就自动下载并得到一个mysql版本为5.7的服务镜像。

这时候,要运行一个Web服务我们需要运行两次的docker run才可以,如果还有更多的Web容器或其他的服务容器呢?
Docker官方提倡一个容器仅提供一个服务,多个服务/容器可以使用docker-compose来管理。
docker-compose本身是一个Python写的工具,可以直接通过pip安装:

root@thinkpad:~# sudo pip install --upgrade pip

 如果你本地并没有Python环境,也可以采用docker-compose的docker镜像来运行:

root@thinkpad:/home/compose-web# curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose
root@thinkpad:/home/compose-web# docker-compose --version
#开始下载镜像,建议用第一种

 查看帮助

root@thinkpad:~# docker-compose -h
Define and run multi-container applications with Docker.
 
Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help
 
Options:
  -f, --file FILE             Specify an alternate compose file (default: docker-compose.yml)
  -p, --project-name NAME     Specify an alternate project name (default: directory name)
  --verbose                   Show more output
  -v, --version               Print version and exit
  -H, --host HOST             Daemon socket to connect to
 
  --tls                       Use TLS; implied by --tlsverify
  --tlscacert CA_PATH         Trust certs signed only by this CA
  --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
  --tlskey TLS_KEY_PATH       Path to TLS key file
  --tlsverify                 Use TLS and verify the remote
  --skip-hostname-check       Don't check the daemon's hostname against the name specified
                              in the client certificate (for example if your docker host
                              is an IP address)
 
Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pulls service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information
首先要创建docker-compose.yml,这是一个YAML格式的文档
mkdir docker
cd docker
mkdir web
mkdir db
vim docker-compose.yml

 内容如下:

version: '2'
services:
  db:
    image: mysql:5.7
    ports:
    - "3306:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: web
      MYSQL_USER: root
      MYSQL_PASSWORD: rootweb
    volumes:
    - ./db/data:/var/lib/mysql
  web:
    depends_on:
      - db
    image: nginx-php-fpm:phalcon
    ports:
    - "80:80"
    restart: always
    environment:
      WEB_DB_HOST: db:3306
      WEB_DB_PASSWORD: root
    volumes:
    - ./web/html:/var/www/html/
    links:
    - db
 这里的environment定义了环境变量,比如host的MAC,就可以在docker容器的系统变量里面得到,各个编程语言都有获取系统环境变量的方法。这些变量也可以组织起来放在文件里面加载进去,参考这里

这里的volumes定义了要映射进容器的文件或文件夹或者数据容器,可以参考这里。注意,多个容器共享同一个目录,会出现写冲突,比如MySQL,多个实例,数据目录需要分开。所以设计好你的程序,哪一部分是需要只读的(可以共享),哪一部分是需要写的;写的部分是否可以放到各自临时目录,或者其他公共服务里面。
运行并查看

root@thinkpad:/home/compose-web# docker-compose up -d
Creating network "composeweb_default" with the default driver
Creating composeweb_db_1
Creating composeweb_web_1
root@thinkpad:/home/compose-web# docker-compose ps
      Name                   Command             State              Ports            
------------------------------------------------------------------------------------
composeweb_db_1    docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp     
composeweb_web_1   /start.sh                     Up      443/tcp, 0.0.0.0:80->80/tcp
#也可以使用原来的命令
root@thinkpad:/home/compose-web# docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                         NAMES
efbdaf257748        nginx-php-fpm:phalcon   "/start.sh"              13 seconds ago      Up 11 seconds       0.0.0.0:80->80/tcp, 443/tcp   composeweb_web_1
a6935d20911e        mysql:5.7               "docker-entrypoint.sh"   14 seconds ago      Up 13 seconds       0.0.0.0:3306->3306/tcp        composeweb_db_1
 docker-compose up -d ,将会在后台启动并运行所有的容器。

docker-compose仅仅提供了对多个docker服务的管理,仍然可以在这些容器上运行原来的docker命令。检查下web容器的IP: 

root@thinkpad:/home/compose-web# docker inspect composeweb_web_1 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.18.0.3",
 然后访问:http://172.18.0.3/ 就可以看到web页面了。
如果想要停止服务,可以用docker-compose stop:
root@thinkpad:/home/compose-web# docker-compose stop db
Stopping composeweb_db_1 ... done
root@thinkpad:/home/compose-web# docker-compose stop web
Stopping composeweb_web_1 ... done
 再次启动,得到相同名称的服务:
root@thinkpad:/home/compose-web# docker-compose up -d
Starting composeweb_db_1
Starting composeweb_web_1
 各个容器的名称也可以在配置文件里面通过参数container_name来指定。

docker-compose的配置还有很多其他的参数,可以参考这里。比如刚才我们通过docker inspect来查找容器IP,也可以配置成静态IP:

version: '2'
 
services:
  app:
    image: nginx-php-fpm:phalcon
    networks:
      app_net:
        ipv4_address: 172.18.0.10
        ipv6_address: 2001:3984:3989::10
 
networks:
  app_net:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "true"
    ipam:
      driver: default
      config:
      - subnet: 172.18.0.0/24
        gateway: 172.18.0.1
      - subnet: 2001:3984:3989::/64
        gateway: 2001:3984:3989::1
 也可以自定义网络

刚才我们的配置文件里面直接指定了镜像,也可以指定Dockerfile镜像构建,假如Dockerfile在web目录下面:

build:
  context: ./web
 或者直接指明Dockerfile:
build:
  context: .
  dockerfile: Dockerfile-alternate
 实际上,docker-compose的配置已经覆盖了Dockerfile的配置项,也可以直接用于构建多个docker服务,比如指定运行的命令
command: [/bin/bash]

 这里的入口程序,如果不能持续运行的话,运行完成后,docker就会退出。所以如果你需要可以后台运行的docker容器,那么入口程序,就必须保持一个程序在前台运行,不退出,比如运行crontab的镜像,入口程序可以是:

cron && bash

 cron这个程序是在后台运行的,如果不配合前台程序bash,容器执行玩cron就会退出了。其他运行crontab的容器,大都是强制一个程序在前台不退出,比如这个

cron && tail -f /var/log/cron.log

 Docker compose还可以跟Docker Swarm结合。

参考链接:
Install Docker Compose
Quickstart: Docker Compose and WordPress
YAML 模板文件
Introduction to Docker Compose Tool for Multi-Container Applications
Dockerfile基本结构
How to Get Environment Variables Passed Through docker-compose to the Containers

 

博客原文:使用Docker Compose管理Docker容器

分享到:
评论

相关推荐

    Docker compose部署RocketMq

    Docker Compose是一种用于定义和运行多容器...使用Docker Compose部署RocketMQ为消息中间件的快速部署提供了一个方便的方法,它简化了容器化应用的配置和管理过程,使得开发和运维人员可以更加聚焦于业务逻辑的开发。

    Docker容器技术-Docker-compose使用案例.pptx

    在Docker容器技术中,Docker Compose是一个重要的工具,用于管理多个容器的应用。通过Docker Compose,开发者可以定义和运行多容器的Docker应用程序。其核心是`docker-compose.yml`文件,这是一个YAML格式的配置文件...

    Docker Compose部署Emqx集群

    启动后,可以使用Docker Compose的命令来管理集群,如启动、停止、重启等操作,也可以进入容器内部执行特定的管理任务。 维护和监控也是部署Emqx集群后需要关注的方面。Docker Compose提供了查看服务状态的命令,...

    Docker compose部署Emqx单机版

    例如,可以使用docker-compose ps命令来查看容器状态,使用docker-compose logs命令来查看容器日志,甚至可以进行一些基本的网络连接测试,确保EMQ X能够正确处理MQTT协议消息。 使用Docker Compose部署EMQ X单机版...

    docker-compose安装包

    Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若...

    docker&docker-compose 19.03.14二进制安装

    通过YAML文件(通常命名为`docker-compose.yml`)来配置服务、网络和卷,然后使用`docker-compose`命令来启动、停止和管理这些服务。这样可以简化多容器应用的部署和管理,尤其适用于微服务架构。 **Docker&Docker ...

    docker-compose离线安装包

    在Linux Ubuntu、银河麒麟、麒麟信安等操作系统上,可以使用Docker Compose来编排容器。 离线安装包的意思是用户无需联网,直接通过下载安装包来进行安装。对于需要在无网络环境下工作的用户而言,离线安装包是一个...

    使用Docker Compose管理Python应用的深入指南

    Docker是容器化技术的代表,而Docker Compose则是Docker的扩展工具,它允许用户通过YAML文件定义多容器Docker应用程序,然后使用一个命令来启动和停止所有服务。对于Python开发者来说,这意味着可以更容易地创建、...

    Docker Compose 深度解析:多容器应用管理之道

    本文将详细介绍如何使用 Docker Compose 来管理多容器应用。 Docker Compose 提供了一种简单而强大的方法来管理多容器 Docker 应用。通过本文的介绍,你应该对 Docker Compose 的使用有了深入的了解。掌握 Docker ...

    docker-compose-linux-x86-64-2.33.0.zip

    然而,对于大规模的生产环境,由于Docker Compose并不支持复杂的编排和大规模的容器管理,这时可能会考虑使用更高级的编排工具,比如Kubernetes。 随着容器技术的不断发展,Docker Compose也在不断地更新和改进。...

    docker-compose Linux安装包(压缩包中含V1.29.2和V2.2.2两个版本)

    一旦安装完成,你就可以在同一个Linux环境中使用Docker Compose来管理和运行你的多容器应用。记得Docker Compose需要Docker Engine的支持,确保你的系统已经安装了Docker,并且Docker服务正在运行。 总之,Docker ...

    Docker compose部署MariaDb

    使用Docker compose部署MariaDB的基本步骤如下: 1. 创建一个docker-compose.yml文件,并在文件中定义MariaDB服务。例如,配置文件可能包含如下内容: ```yaml version: '3.1' services: db: image: mariadb ...

    docker-compose-Darwin-x86_64.tgz

    总的来说,这个压缩包包含了一个完整的Docker Compose运行环境,用户可以通过解压并将其路径添加到PATH环境变量中,以便在命令行中使用Docker Compose进行多容器应用程序的管理。为了正确安装和使用,用户需要确保...

    docker-compose-V2.20.2.tar.gz

    总结来说,Docker Compose是Docker容器化应用的重要工具,它简化了多容器应用的部署和管理,是开发、测试和生产环境中不可或缺的一部分。"docker-compose-V2.20.2.tar.gz"离线安装包的提供,为不能在线安装或希望...

    docker-compose-linux-aarch64

    用户可以通过这个资源快速获取并安装Docker Compose,从而更高效地管理和部署多容器的Docker应用程序。在实际操作中,了解和掌握Docker Compose的使用方法,以及如何适配不同平台,对于提升开发和运维效率至关重要。

    docker-compose 容器部署 mqtt

    docker-compose 容器部署 mqtt 配置文件

    容器技术-dockerCompose安装.pptx

    例如,在开发一个 web 应用程序时,可以使用 DockerCompose 来定义容器之间的关系和依赖关系,从而实现了自动化的部署和管理。 DockerCompose 的优点包括: * 简化了容器化的应用程序的搭建和管理过程 * 提高了...

    使用docker Compose 服务编排管理容器

    Docker Compose 容器编排技术Compose 中有两个重要的概念: 服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 ...

    docker-compose_install.tar.gz

    通过 Docker Compose,开发者可以使用 YAML 文件(通常命名为 `docker-compose.yml`)来配置服务、网络和卷,然后通过 `docker-compose` 命令行工具一次性启动所有关联的服务。这大大简化了多容器应用的管理和部署...

    Docker-compose 教程全集 PDF 53页

    Docker Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器 (container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环 境变量文件等)组成一个工程...

Global site tag (gtag.js) - Google Analytics