第五课:单机编排利器:Docker Compose
1.Compose是什么
Compose是用于定义和运行多容器的工具。通过Compose可以使用YAML文件来配置容器。然后,使用一个命令就可以从配置中创建并启动所有服务。
官方文档:https://docs.docker.com/compose/
使用Compose大致分三步:
定义Dockfile,以便可以在任意环境运行。
定义应用程序启动配置文件docker-compose.yaml。
docker-compose启动并管理整个应用程序生命周期。
2.linux安装compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
3.compose编排常用字段说明
官方文档:https://docs.docker.com/compose/compose-file/
字段 | 描述 | 示例 |
---|---|---|
bulid dockerfile context |
构建选项 制定Dockfile文件名 构建镜像上下文路径 |
build: context:./dir dockerfile:Dockerfile-alternate |
image | 指定镜像 | image:webapp:tag |
command | 容器中执行命令,覆盖默认命令 | command:bundle exec thin -p 3000 command:["bundle","exec","thin","-p","3000"] |
environment | 添加环境变量 | environment: - RACK_ENV=development - SHOW=true |
networks | 加入网络,引用顶级networks下条目 | networks: - new |
ports | 暴露端口,与-p相同,但端口不能低于60 | ports: - "80:80" - "8080:8080/udp" |
extra_hosts | 添加主机名映射,与--add-host相同 | extra_hosts: - "somehost:192.168.100.100" - "otherhost:192.168.1.1" |
volumes | 挂载宿主机路径或数据卷,如果是命名卷在顶级volumes定义卷名称 | volumes: - /opt/data:/var/lib/mysql - datavolumes:/var/lib/mysql |
restart | 重启策略,默认no,always|no-failure|unless-stopped | restart:always |
hostname | 容器主机名 | hostname:FOO |
4. compose常用选项与命令
常用选项
-f,--file 指定yaml文件,默认docker-compose.yml
-p,--project-name 指定项目名称,默认是当前目录
命令 | 描述 |
---|---|
build | 重新构建服务 |
ps | 列出容器 |
up | 创建和启动容器 |
exec | 在容器内执行命令 |
scale | 指定一个服务容器启动数量 |
down | 删除容器,网络,数据卷和镜像 |
stop/start/restart | 停止/启动/重启服务 |
5. docker-compse.yml示例
version: "3"
service:
nginx:
hostname: nginx
bulid:
context: ./nginx
dockerfile: Dockerfile
ports:
- 80:80
networks:
- lnmp
volumes:
- ./nginx/php.conf:/usr/local/nginx/conf/vhost/php.conf
- ./wwwroot:/usr/local/nginx/html
php:
hostname: php
build:
context: ./php
dockerfile: Dockerfile
networks:
- lnmp
volumes:
- ./wwwroot:/usr/local/nginx/html
mysql:
hostname: mysql
image: mysql:5.7
ports:
- 3006:3006
networks:
- lnmp
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/data:/var/lib/mysql
command: --character-set-server=utf8
enviroment:
MYSQL_ROOT_PASSWORK: 123456
MYSQL_DATABASE: test
MYSQL_USER: user
MYSQL_PASSWORD: user123456
networks:
lnmp: {}
```