Docker Compose简单概述
- 多容器的APP太繁琐:
要从Dockerfile build image或者Dockerhub 拉取image。
要创建多个container。
要管理这些container(启动停止删除)
- 通过之前说的使用
Dockerfile
模板文件,可以让用户很方便的定义一个单独的应用容器。在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
一、Docker Compose概念:
Compose
恰好满足了这样的需求。它允许用户通过一个单独的docker-compose.yml
模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)Docker Compose是一个命令行工具
这个工具可以通过一个yml文件定义多容器的docker应用
通过一条命令就可以根据yml文件的定义去创建或者管理这多个容器
- 启动
- 删除
- 停止等
二、docker-compose.yml文件:
-
三大概念:
-
1.Services:
-
一个Services代表一个container,这个container可以从dockerhub的Image来创建(也就是docker pull image),或者从本地的Dockerfile build出来的Image来创建。(也就是Dockerfile文件第一行[FROM xxx:xxx])
-
Service的启动类似docker run, 我们可以给其指定network(--network)和volume(-v),所以可以给service指定network和Volumed的引用。
-
举个列子:
services: db: # services的名字叫db image: postgres:9.4 # 这个image是从docker hub上面拉取下来的 volumes: # 映射了db-data 再本地 -"db-data:/var/lib/postgresql/data" networks: - back-tier
services: worker: # container 名字 build: ./worker # 这个image 是从本地build的 ./ 当前目录Dockerfile links: -db -redis network: -back-tier
-
-
2.Networks:
services: worker: build: ./worker links: -db -redis networks: -back-tier #相当于再networks: back-tier: driver:bridge 创建网络 # 命令相当于 docker network create -d bridege back-tier
-
3.Volumes:
services: db: image:postgres:9.4 volumes: -"db-data:/var/lib/postgresql/data" # 会在文件同级创建volumes: 名字db-data # 命令相当于:docker volume create db-data networks: - back-tier
-
-
看一下栗子:
version: '3' # 代表的是该docker-compose.yml 版本是3 # 第一部分 services: # 有俩个services :1.wordpress 跟mysql wordpress: image: wordpress # docjer pull wordpress 从docker hub 上面拉取下来的 ports: - 8080:80 # 端口的映射 把80端口映射到本地的8080 environment: # 相当于-e 的参数, 传递环境变量 WORDPRESS_DB_HOST: mysql WORDPRESS_DB_PASSWORD: root networks: # 指定该容器连接的网络是my-bridge - my-bridge mysql: image: mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: wordpress volumes: # 再下面的volumes 创建的 - mysql-data:/var/lib/mysql networks: - my-bridge # 第二部分 volumes: # 创建volumes 名字叫做mysql-data mysql-data: # 第三部分: networks: # 创建networks 名字是my-bridge my-bridge: driver: bridge
三、docker-compose的安装和基本使用:
-
1:安装Linux版本的docker-compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 将文件安装到了
/usr/local/bin/docker-compose
目录中
-
2:给docker-compose 执行权限:
chmod +rx /usr/local/bin/docker-compose
-
3:查看是否安装成功:
-
docker-compose --version
-
如果提示:
[root@localhost ~]# docker-compose --version [21308] Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/docker-compose.pkg # 报错信息
-
解决方法:
- 重新执行
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
这个命令就好,或者看chmod是否给它执行的权限。
- 重新执行
-
如果提示:
[root@localhost ~]# docker-compose --version docker-compose version 1.23.2, build 1110ad01 # 说明docker-compose 安装成功
-
四、docker-compose基本命令:
-
1:启动并且后台运行docker-compose:
docker-compose up -d
-
2:停止docker-compose:
docker-compose donw
-
3:查看docker-compose启动的容器:
docker-compose ps
-
4:水平扩展docker-compose容器:
docker-compose up --scale web=3 -d
- web=3:意思就是启动3个相同的容器(注意端口被占用的问题,如果被占用修改Dockerfile 跟docker-compose.yml 把指定端口删掉)
-
5.构建(重新构建)项目中的服务容器 :
-
docker-compose build
-
选项包括:
--force-rm
删除构建过程中的临时容器。--no-cache
构建镜像过程中不使用 cache(这将加长构建过程)。--pull
始终尝试通过 pull 来获取更新版本的镜像。
-