写在前面
本文主要介绍了Docker Compose核心原理,Docker Compose的编写以及常用指令,可以对docker compose有个整体的框架
Docker Compose介绍
Docker-Compose是Docker官方的开源项目,负责实现对Docker多容器编排管理系统。使用 Docker-compose,可以用一个 YAML 文件定义一组要启动的容器,以及容器运行时的属性。Docker-Compose的工程配置文件默认为docker-compose.yml,Docker Compose 的前身是 Fig,现阶段 Docker Compose 是 Docker 官方的单机多容器管理系统,它本质是一个Python 脚本,它通过解析用户编写的 yaml 文件,调用 Docker API 实现动态的创建和管理多个容器。
Docker Compose安装
- 使用 curl 命令(一种发送 http 请求的命令行工具)
$ sudo curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose- ( u n a m e − s ) − (uname -s)- (uname−s)−(uname -m)” -o /usr/local/bin/docker-compose
- 使用PIP安装
$ pip install -U docker-compose
Docker compose文件组成
类似于开发中前后端,docker-compose由如下几个部分组成
- services(服务层):定义容器该如何启动,用哪个镜像,容器启动的参数等,类似于docker run
- networks(网络层) : 定义网络的配置,类似于docker network create创建网络配置
- volumns(数据卷层):定义容器数据共享
其中services需要解决以下四类问题:
- 指定镜像(官方开源镜像,dockerfile定制镜像)
- 指定容器启动后的命令
- 配置容器名、配置环境变量、端口映射
- 定义多容器之间依赖关系、映射容器、先后启动顺序
Docker compose编写services常用指令
- image指令
image指令用于指定Dockerfile创建镜像的名称,也可以使用Docker Hub或其它镜像仓库中的镜像名称。示例:
services:
web:
image: nginx:latest
- build指令
build指令用于构建镜像,需要指定Dockerfile文件的位置,以及镜像名称和版本等信息。示例:
services:
web:
build:
context: .
dockerfile: Dockerfile
image: mynginx:latest
- container_name指令
container_name指令用于指定容器的名称,不设置默认为服务名称。示例:
services:
web:
image: nginx:latest
container_name: mynginx
- depends_on指令
depends_on指令用于设置服务之间的依赖关系,即该服务需要在其所依赖的服务启动之后才能启动。示例:
services:
db:
image: mysql:latest
web:
image: nginx:latest
depends_on:
- db
- links指令
links指令用于设置容器之间的连接关系,即从一个容器中访问另一个容器。示例:
services:
db:
image: mysql:latest
web:
image: nginx:latest
links:
- db:mysql
- ports指令
ports指令用于将容器内的端口映射到宿主机的端口,以实现对外服务的访问。示例:
services:
web:
image: nginx:latest
ports:
- 8080:80
- volumes指令
volumes指令用于将容器内的目录或文件映射到宿主机的目录或文件,以实现数据的持久化。示例:
services:
db:
image: mysql:latest
volumes:
- ./data:/var/lib/mysql
Docker Compose操作命令
- docker-compose up 前台的形式启动服务
- docker-compose -f docker-compose.yml up –d 后台的形式启动服务
- docker-compose ps 查看当前docker-compose启动的实例
- docker-compose start 启动所有服务
- docker-compose start [SERVICE…] 可以单独启动某个服务,比如:docker-compose start nginx
- docker-compose stop [options] [SERVICE…] 可以单独关闭某个服务,比如:docker-compose stop nginx
- docker-compose logs 查看日志 如单独查看某个日志: docker-compose logs nginx
Docker compose搭建日志系统
- 安装Docker Compose,使用下面的命令行直接安装。实际上该命令的作用就是下载docker compose二进制文件,并将二进制文件存储到/usr/local/bin目录,并重命名为docker-compose。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 书写一个docker compose配置文件docker-compose.yml。
#指定 docker-compose.yml 文件的版本
version: '3.3'
# 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
# 定义容器重启策略
restart: always
# 设置环境变量, environment 的值可以覆盖 env_file 的值
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
#docker-compose up 以依赖顺序启动服务,先启动db
depends_on:
- db
image: wordpress:latest
# 建立宿主机和容器之间的端口映射关系,容器的 80 端口和宿主机的 8000 端口建立映射关系
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
# 定义容器和宿主机的卷映射关系, 其和 networks 一样可以位于 services 键的二级key和 compose 顶级key, 如果需要跨服务间使用则在顶级key定义, 在 services 中引用
volumes:
db_data: {}
- 在docker-compose.yml的同一个目录下执行命令/usr/local/bin/docker-compose up -d 完成服务启动。就是这么简单我已经安装完成了,访问http://<linux宿主机服务器>:8000你会看到下图,按照图形提示一步一步的设置你的博客就可以了。