Docker Compose

单个主机中多个容器的编排,通过一个单独的docker-compose.yml模版文件(YAML格式)来定义一组相关联的应用容器。

Compose中有两个重要的个概念:

  • 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目(project):由一组关联的应用容器组成的一个完整业务单元,在 dockercompose.yml 文件中定义。

Compose 项目由 Python 编写,实现上调用了Docker服务提供的API来对容器进行管理。

Compose下载安装

  • 从 官方GitHub Release处直接下载编译好的二进制文件
bash 复制代码
$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose
  • 使用pip安装,如果是x86_64架构linux建议使用下载二进制的方式,如果是ARM架构的系统使用pip安装
bash 复制代码
$ sudo pip install -U docker-compose
  • bash 补全命令
bash 复制代码
$ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
  • 卸载

如果是二进制包方式安装的,直接删除二进制文件即可,卸载命令:sudo rm /usr/local/bin/docker-compose

如果是通过匹配安装的,卸载命令:sudo pip uninstall docker-compos

使用实例

功能说明

启动一个书籍管理系统的web服务,可进行数据信息的增加和删除,二进制文件为bookmanger。数据存在mysql中。

在容器中部署,启动两个容器,一个运行bookmanger后端程序,一个容器运行mysql数据库。

部署流程

  • 下载ubuntu和mysql镜像
  • go代码编译:golang镜像最新的版本是1.7,所以不能使用镜像编译,直接在本地编译。
  • ubuntu镜像制作:Dockerfile内容如下:
bash 复制代码
FROM ubuntu
WORKDIR /
COPY bookmanger /bin/
COPY view /view
CMD ["bookmanger"]

手动部署

mysql容器手动部署,设置root密码为password,创建名为sql_test的数据库,创建一个名为myuser的用户,并设置用户密码为userpassword。

bash 复制代码
docker run -d -p 3306 --name db -v ./db/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=sql_test  \
    -e MYSQL_USER=myuser -e MYSQL_PASSWORD=userpassword mysql

docker exec -it db mysql -uroot -p

bms容器手动部署

bash 复制代码
docker run --name bms -d -p 8999:8999 -ip 172.17.0.2 -it ubuntu:bms

使用compose部署

docker-compose.yml文件如下:

bash 复制代码
version: "3"
services:
  db:
     image: mysql
     ports:
       - "3306:3306"
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: password
       MYSQL_DATABASE: sql_test
       MYSQL_USER: myuser
       MYSQL_PASSWORD: userpassword
     volumes:
       - ./db/data:/var/lib/mysql

  bms:
     build: bookmanger/
     command: bookmanger
     ports:
       - "8999:8999"
     depends_on:
       - db
     restart: always
     links:
       - db
       - db:database

compose目录结构

bash 复制代码
composebms/
├── bookmanger
│   ├── bookmanger
│   ├── Dockerfile
│   └── view
│       ├── list.html
│       └── new.html
├── db
│   ├── data
│   │   └── sql_test
│   │       └── book.ibd
│   └──  tables.sql
└── docker-compose.yml
相关推荐
眷蓝天2 小时前
Docker 镜像瘦身:从 GB 到 MB 的优化实践
运维·docker·容器
一叶飘零_sweeeet4 小时前
Docker Compose实战指南
运维·docker·容器
亚空间仓鼠4 小时前
Docker 容器技术入门与实践 (六):Docker镜像瘦身
docker·容器·eureka
SPC的存折5 小时前
10、Docker容器故障排查
linux·运维·数据库·docker·容器
乌托邦的逃亡者7 小时前
Dockerfile的配置和使用
linux·运维·docker·容器
七七powerful7 小时前
loki监控docker容器&系统&nginx日志的告警规则
nginx·docker·容器
雨奔8 小时前
TSF 微服务熔断实战:从原理到落地,杜绝级联故障
微服务·云原生·架构
cyber_两只龙宝9 小时前
【Oracle】Oracle之SQL的转换函数和条件表达式
linux·运维·数据库·sql·云原生·oracle
SPC的存折9 小时前
8、Docker镜像瘦身
运维·docker·容器
cyber_两只龙宝10 小时前
【Oracle】Oracle之SQL的聚合函数和分组
linux·运维·数据库·sql·云原生·oracle