目录
一、YAML 文件格式及编写注意事项(重要)
1、yaml文件使用时注意事项:
2、yaml文件的基本数据结构:
2.1、声明变量(标量。是单个的不可再分的值,类型:字符串,整数,布尔类型)
2.2、list(列表):表示有序的元素集合
2.3、键值对映射:
2.4、注释:
2.5、引用:
2.6、字符串引号:
二、docker-compose
1、概述
2、docker-compose的常用命令:
3、docker-compose的三大概念
三、部署docker-compose
1、docker-compose安装:
2、创建工作目录,编写相关Dockerfile文件
3、编写配置文件docker-compose.yml
4、根据配置文件创建和启动容器
5、登录容器,进行相关操作
四、访问宿主机IP,安装Wordpress
一、YAML 文件格式及编写注意事项(重要)
yaml文件:是一种标记语言,以竖列的形式展示序列化的数据格式,可读性高
类似于json格式。语法比json简单
yaml通过缩进来表示数据结构,连续的项目用-减号来表示
1、yaml文件使用时注意事项:
- 大小写敏感
- 通过缩进表示层级关系
- 只能用空格缩进,不能用tab键
- 可以使用#号键注释
- 符号字符后面都有一个空格 test: 2
- 单引号引起来的字符,会被当做普通字符串处理。"#$*",若双引号引来的特殊字符表示本意
2、yaml文件的基本数据结构:
2.1、声明变量(标量。是单个的不可再分的值,类型:字符串,整数,布尔类型)
name: test
age: 20
tall: yes
handsan: yes
wan: no
2.2、list(列表):表示有序的元素集合
class:
- test
- test1
- test2
2.3、键值对映射:
student:
name: test
age: 20
student1:
name: test1
age: 18
2.4、注释:
#test
2.5、引用:
student: &id1
name: test
age: 20
student1: *id1
#用&来定义锚点,用*来进行引用
2.6、字符串引号:
name: 'test'
name: "test"
name: '$' 表示字符串
name: "$" 表示$这个字符
二、docker-compose
1、概述
docker-compose:单机容器编排
Dockerfile:先配置好文件,然后build,镜像——>容器。
docker-compose:即可基于Dockerfile,也可以基于镜像,可以一键式拉起镜像和容器
docker-compose是基于python开发的,能运行docker的平台,都能用docker-compose编排管理容器。
本质就是在yaml格式的docker-compose配置模板文件里定义多个容器的启动参数和依赖关系,并使用docker-compose根据这个模板文件的配置启动和管理容器集群。
docker-compose核心就是yml文件,可以定义容器的一切。通过yml配置,直接运行容器
docker:主要服务于单节点。docker没有统一对外提供服务的端口和配置。docker一般都是内部访问。无需使用https。如果要对外以集群和分布式的方式提供统一访问的端口,K8S+ingress
2、docker-compose的常用命令:
必须有docker-compose.yml文件
build:构建服务
ps:列出由docker-compose编排出来的容器
up:创建和启动容器
top:显示容器的进程
logs:查看容器的输出日志
down:删除容器,网络,数据卷
exec:在容器中执行命令
stop/start/restart:停止/启动/重启
scale:指定容器服务启动的数量(副本)。
3、docker-compose的三大概念
项目project -> 包含一个或多个服务service -> 包含一个或多个容器的镜像、映射端口、环境变量等启动参数
1)默认使用项目的目录名做project项目名,支持使用 -p 或 --project-name 来指定项目名;
2)在项目目录里要包含一个 docker-compose 配置模板文件,默认为 docker-compose.yml,支持使用 -f 或 --file 来指定项目的配置模板文件;
3)在配置模板文件里要包含一个或者多个服务,每个服务包含启动容器的名称、镜像、映射端口、环境变量、挂载点、网络模式、依赖关系等容器启动的配置参数。
4、docker-compose.yml文件格式:
version: '3'
#指定docker-compose的文件版本,解析代码的版本,声明解释器
services:
#定义需要运行的服务,声明服务,可以有多个services
nginx:
container_name: web1
#指定创建容器的名字
hostname: nginx
#指定容器的主机名
build:
#指定构建nginx的容器的上下文,以及dockerfile
context: /opt/nginx
#指定Dockerfile的位置,如果用镜像换成image:
dockerfile: Dockerfile
ports:
- 1213:80
#直接指定宿主机和容器的端口映射关系
networks:
#声明给容器指定的IP地址
mynet:
#自定义网络
ipv4_address: 172.18.0.10
指定ip地址
volumes:
- /opt/www:/usr/local/src/nginx-1.22.0/html
networks:
#创建自定义网桥接口配置,#写在服务配置,赋予容器ip地址,写在定格,大的模块,创建网段!
mynet:
driver: bridge
#声明网段类型
ipam:
#声明网段,IP地址的管理和配置
config:
- subnet: 172.18.0.0/16
#子网配置,指定IP地址的范围
三、部署docker-compose
1、docker-compose安装:
2、创建工作目录,编写相关Dockerfile文件
提前将目录和文件准备好,详情可参考昨天的dockerfile部署lnmp
https://blog.csdn.net/koeda1/article/details/134954286?spm=1001.2014.3001.5502
3、编写配置文件docker-compose.yml
编写配置文件docker-compose.yml
使用现有的镜像创建容器(本地/仓库) images: name:tag
或者现场构建,基于Dockerfile
version: '3'
services:
nginx:
hostname: nginx
build:
context: /opt/lnmp/nginx
dockerfile: Dockerfile
ports:
- 1314:80
container_name: nginx_server
networks:
lnmp:
ipv4_address: 172.111.0.10
volumes:
- "nginx-data:/usr/local/nginx/html"
mysql:
hostname: mysql
build:
context: /opt/lnmp/mysql
dockerfile: Dockerfile
ports:
- 3306:3306
container_name: mysql_server
networks:
lnmp:
ipv4_address: 172.111.0.20
privileged: true
#虽然我们登录容器,显示的是root用户,但是是伪root,一旦privileged是true,容器内的root和宿主机的root才拥有一样的权限,再生产中能不给就不给
volumes:
- "mysql-data:/usr/local/mysql/"
php:
hostname: php
build:
context: /opt/lnmp/php/
dockerfile: Dockerfile
ports:
- 9000:9000
container_name: php_server
networks:
lnmp:
ipv4_address: 172.111.0.30
volumes:
- "nginx-data:/usr/local/nginx/html"
- "mysql-data:/usr/local/mysql"
networks:
lnmp:
driver: bridge
ipam:
config:
- subnet: 172.111.0.0/16
volumes:
nginx-data:
mysql-data:
4、根据配置文件创建和启动容器
docker-compose -f docker-compose.yml up -d
docker-compose:命令的开头,使用docker-compose进行容器编排
-f:使用特定的compose模版文件,一般都用docker-compose.yml
-p:project-name:指定项目名称,如果不加,会使用目录名称,可以不加
-d:后台运行
5、登录容器,进行相关操作
登录到Mysql容器给权限
create database wordpress;
grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'%' identified by '123456';
flush privileges;
进入php容器,看挂载目录有没有挂载上: