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
相关推荐
YC运维1 小时前
Dockerfile实战案例详解
运维·docker·容器
分布式存储与RustFS2 小时前
告别手动配置:用 Terraform 定义你的 RustFS 存储帝国
云原生·wpf·文件系统·terraform·对象存储·minio·rustfs
小灰灰的可爱无人可替代5 小时前
记录一次使用docker和docker-compose更新vue前端项目问题
nginx·docker·vue
悠闲蜗牛�6 小时前
人工智能时代下的全栈开发:整合AI、大数据与云原生的实践策略
大数据·人工智能·云原生
荣光波比11 小时前
K8S(一)—— 云原生与Kubernetes(K8S)从入门到实践:基础概念与操作全解析
云原生·容器·kubernetes
伞啊伞11 小时前
K8s概念基础(一)
云原生·容器·kubernetes
Light6011 小时前
领码方案|微服务与SOA的世纪对话(6):组织跃迁——智能架构下的团队与文化变革
微服务·云原生·ddd边界·组织双生体·pod协同·文化仪式·ai自演进
hello_25012 小时前
k8s基础监控promql
云原生·容器·kubernetes
小杨的全栈之路14 小时前
生产级实践:在 Docker 中安全导入自签名证书,保障 Spring Boot 应用通信安全
docker·https
静谧之心15 小时前
在 K8s 上可靠运行 PD 分离推理:RBG 的设计与实现
云原生·容器·golang·kubernetes·开源·pd分离