Docker-compose
1、概念
容器一键化部署的工具,针对dockerfile,可以按照定制化的模式一键部署dockerfile创建的容器
2、定制:yaml文件
bash
mv docker-compose-linux-x86_64 /usr/local/bin/docker-comprose
chmod 777 /usr/local/bin/docker-comprose
docker-comprose --version
# Docker Compose version v2.18.0
3、yaml文件
yaml是一种标记语言,直观的展示数据序列化的一种格式,可读性高
数据格式的结构是通过缩进行表示的
3.1 注意事项:
1.1 大小写敏感,严格区分
1.2 通过缩进表示层级关系
1.3 不能通tab缩进,只能用空格缩进
1.4 #可以表示注释
1.5 符号之后必须缩进一格
1.6 特殊字符必须要用单引号,字符串用双引号表示其本意。
4、yaml格式
数据结构
yaml
vim test.yml
name: "xiaodai"
age: 24
isStudet: 'true'/'false'
# 字符串、整数、布尔类型,也可以是小数点
列表结构
表示有序的元素的集合,使用-开头,缩进表示以下文本属于xy102
yaml
xy102:
- xiaodai
- xiaozhao
- xiaoqian
# 换行空两格
字典结构
Maps(映射),相当于字典或者对象,用键值对表示
yaml
man:
name: xiaodai
age: 24
# 可以表示多行文本块: |
shuoming: |
this is xy102
xiaodai is frist
ta 20 le
5、docker-comprose命令:
命令 | 作用 |
---|---|
ps | 基于docker-comprose拉取的镜像生成的容器 |
up | docker-comprose创建和启动容器 |
scale | 创建容器的数量 |
top | 显示容器的进程 |
logs | 看容器的输出日志 |
stop start restart | 停止、启动、重启 |
down | 删除容器、网络、数据卷、镜像 |
6、yaml部署nginx
yaml
vim docker-compose.yml
version: '3'
# 定义docker-comprose文件的版本,2.0之后都是3,顶格写就是全局使用
services:
# 定义镜像和容器的配置:dockerfile以及镜像
nginx:
container_name: web1
# 定义容器的名称是web1
hostname: nginx1
# 定义创建好之后,容器的主机名
build:
# 构建dockerfile
context: /opt/nginx
# 声明上下文,上文构建dockerfile,下文是context,告诉你dockerfile的路径
dockerfile: Dockerfile
ports:
# 声明宿主机和容器的端口映射
- 80:80
- 443:443
networks:
# 指定容器的ip地址
mynet:
ipv4_address: 172.18.0.10
volumes:
# 创建容器的挂载卷
- /opt/nhtml:/usr/local/nginx/html/
networks:
# 创建自定义网络
mynet:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
:wq!
bash
docker-compose -f docker-compose.yml up -d
# docker-compose 使用docker-compose 一键编排容器
# -f 使用模版文件,必须是.yml结尾
# up 启动
# -d 后台运行
yaml
vim docker-compose.yml
version: '3'
services:
nginx:
container_name: web2
hostname: nginx2
build:
context: /opt/nginx
dockerfile: Dockerfile
ports:
- 81:80
- 444:443
networks:
opt_mynet:
ipv4_address: 172.18.0.20
volumes:
- /opt/nhtml:/usr/local/nginx/html/
networks:
opt_mynet:
external: true
:wq!
7、yaml部署lnmp
yaml
vim docker-comprose.yml
version: '3'
services:
nginx:
hostname: nginx
container_name: nginx_server
build:
context: /opt/nginx
dockerfile: Dockerfile
ports:
- 80:80
- 443:443
networks:
lnmp:
ipv4_address: 172.111.0.10
volumes:
- /opt/nginx:/opt/docker-nginx
mysql:
hostname: mysql
container_name: mysql_server
build:
context: /opt/mysql
dockerfile: Dockerfile
ports:
- 3306:3306
networks:
lnmp:
ipv4_address: 172.111.0.20
privileged: true
volumes:
- /opt/mysql:/opt/docker-mysql
php:
hostname: php
container_name: php_server
build:
context: /opt/php
dockerfile: Dockerfile
ports:
- 9000:9000
networks:
lnmp:
ipv4_address: 172.111.0.30
volumes_from:
- "nginx"
- "mysql"
networks:
lnmp:
driver: bridge
ipam:
config:
- subnet: 172.111.0.0/24
:wq!
docker ps
docker exec -it php_server bash
cd /usr/local # 查看是否出现nginx和mysql
cd /nginx/html # 查看是否出现50x.html、index.html、wordpress
cd /usr/local/mysql # 查看是否出现mysql.sock
删除网络
docker network ls
docker network rm -f mynetwork
bash
docker-compose build --no-cache
#清理缓存,必须是docker-compose.yml