Dock Compose安装和编排容器
一个项目经常会引用到很多附加的服务,比如:一个网站需要mysql数据库存储数据、redis做数据缓存、nginx反向代理等等。如果每次部署的时候都要一个个在docker中重新安装一遍这些东西就太麻烦了。所以我们就需要一个工具负责实现对Docker容器集群的快速编排。
Docker Compose 是一个用来定义和运行复杂应用的Docker工具,负责实现对 Docker 容器集群的快速编排 。
Docker Compose 中的两个重要概念:
- 服务 (service):一个应用容器,实际上可以运行多个相同镜像的实例。
- 项目 (project):由一组关联的应用容器组成的一个完整业务单元。
一个项目可以由多个服务关联(容器)而成,并使用 docker-compose.yml 进行管理。
Docker Compose安装
//下载
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
//设置权限
sudo chmod +x /usr/local/bin/docker-compose
//查看版本
docker-compose --version
安装好之后我们就可以用 Docker Compose 进行容器编排
docker-compose.yml 配置文件
首先,我们创建一个docker-compose.yml
文件。
version: "3"
services:
webapp:
image_name: webapp
container_name: coreapp
build:
context: .
dockerfile: Dockerfile
ports:
- "8002:80"
depends_on:
- db
db:
image: mysql:5.7
container_name: mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: "yourmysqlpsw"
volumes:
- "./conf:/etc/mysql/conf.d"
- "./logs:/logs"
- "./data:/var/lib/mysql"
version的具体版本问题可以看官网文档。
看配置文件,我们可以知道这个项目一共包含了2个服务(webapp
和mysql
容器),分别是一个web网站和mysql数据库。web通过mysql容器对外暴露的数据库端口进行访问(也可以通过容器间的网络进行访问)。
webapp配置项
- image_name: 指定构建image的名称
- container_name: 指定创建容器的名称
- build: 基于指定路径的 Dockerfile 构建镜像
//直接通过build指定路径,默认配置文件为Dockerfile
build: .
//通过context指定路径,通过dockerfile指定配置文件
build:
context: .
dockerfile: Dockerfile
- ports: 端口映射指定服务器端口:容器内部端口
- depends_on: 容器启动或停止时按顺序进行,参数为 service 名称
db配置项
- restart: always 容器自动重启
- image: 基于指定镜像(官方的 mysql:5.7 image)创建容器,如果镜像不存在,Compose 会自动拉取镜像
- volumes: 指定创建容器时文件卷映射路径
- environment: 设置创建容器时的参数
将docker-compose.yml
文件放到之前的web项目目录下,在++当前目录++启动项目。
cd www //进入项目目录
docker-compose up -d // 后台运行容器
docker-compose ps // 查看运行中容器
docker-compose stop // 停止容器
这里可以看出设置depends_on在启动和关闭容器时的效果,
Docker Compose 常用命令
命令 | 说明 |
---|---|
docker-compose build | 构建项目中的镜像,--force-rm:删除构建过程中的临时容器;--no-cache:不使用缓存构建;--pull:获取最新版本的镜像 |
docker-compose up -d | 构建镜像、创建服务和启动项目,-d表示后台运行 |
docker-compose run ubuntu ls -d | 指定服务上运行一个命令,-d表示后台运行 |
docker-compose logs | 查看服务容器输出日志 |
docker-compose ps | 列出项目中所有的容器 |
docker-compose pause [service_name] | 暂停一个服务容器 |
docker-compose unpause [service_name] | 恢复已暂停的一个服务容器 |
docker-compose restart | 重启项目中的所有服务容器(也可以指定具体的服务) |
docker-compose stop | 停止运行项目中的所有服务容器(也可以指定具体的服务) |
docker-compose start | 启动已经停止项目中的所有服务容器(也可以指定具体的服务) |
docker-compose rm | 删除项目中的所有服务容器(也可以指定具体的服务),-f:强制删除(包含运行的) |
docker-compose kill | 强制停止项目中的所有服务容器(也可以指定具体的服务) |
目前web项目连接mysql是通过服务器端口进行访问的,其实还可以通过docker-compose.yml
指定容器间的网络模式,直接访问容器暴露的端口(使用expose只将端口暴露给连接的服务,而不暴露给主机)。当然相应的数据库连接语句也需要修改了。留个坑,下次再填吧~
参考资料:
- https://www.cnblogs.com/xishuai/p/docker-compose.html
- https://www.cnblogs.com/wutao666/p/11332186.html
- https://www.jianshu.com/p/658911a8cff3
原文地址:https://www.cnblogs.com/cplemom/p/13213558.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 纯CSS实现自定义单选框和复选框
- 基于Linux安装Mysql5.7
- 纯CSS实现iOS风格打开关闭选择框
- 算法基础:递归
- ELK日志收集原理+es集群+elk搭建+本地目录文件读取,搭建分布式日志收集系统
- 什么是JavaScript 的闭包???
- es集群+elk搭建+kafka搭建分布式日志收集系统
- 设计模式(2)[JS版]---JavaScript如何实现单例模式?
- 算法基础:分治
- 黑客帝国中代码雨如何实现?用 canvas 轻松实现代码雨炫酷效果!
- 设计模式(3)[JS版]-JavaScript中的构造函数模式是什么?
- 基于docker 安装elasticsearch + kibana + ik分词器(6.7.2版本)
- 算法基础:排序
- 算法基础:动态规划
- 什么是 “并查集” ?