建设银行网站的特点优势,做yield网站多少钱,wordpress 如何使用php版本号,买了个网站源码后要怎么用文章目录 Docker-compose概念Docker-compose部署YAML文件格式和编写注意事项注意数据结构对象映射序列属组布尔值序列的映射映射的映射JSON格式文本换行锚点和引用 Docker compose配置常用字段docker compose常用命令Docker Compose 文件结构docker compose部署apachedocker co… 文章目录 Docker-compose概念Docker-compose部署YAML文件格式和编写注意事项注意数据结构对象映射序列属组布尔值序列的映射映射的映射JSON格式文本换行锚点和引用 Docker compose配置常用字段docker compose常用命令Docker Compose 文件结构docker compose部署apachedocker compose 部署LNMP Docker-compose
概念 Docker-Compose项目是基于Python开发的Docker官方开源项目负责实现对Docker容器集群的快速编排。 Compose是单机编排容器集群或者是分布式服务容器的应用工具。通过Compose可以使用YAML文件来配置应用程序的服务。然后使用一个命令就可以从配置中创建并启动所有服务。 Docker-Compose是一个容器编排工具。 通过一个.yml或.yaml文件将所有的容器的部署方法、文件映射、容器端口映射等情况写在一个配置文件里执行docker-compose up命令就像执行脚本一样一个一个的安装并部署容器。 Docker compose 文件通常包含一个或多个服务每个服务都由一个或多个容器组成。服条定义了容器应该执行的任务以及容器之间的统赖关系。 Docker-Compose将所管理的容器分为三层分别是 工程project服务service以及容器container。 Docker-Compose运行目录下的所有文件docker-compose.ymlextends文件或环境变量文件等组成一个工程若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务每个服务中定义了容器运行的镜像、参数、依赖。 一个服务当中可包括多个容器实例Docker-Compose并没有解决负载均衡的问题因此需要借助其它工具实现服务发现及负载均衡比如 Consul。 Docker-compose总结 实现单机容器集群编排管理使用YAML模板文件定义多个应用容器的启动参数和依赖关系并使用Docker-compose来根据模板文件的配置来启动容器 三大概念包含关系 项目/工程 默认使用目录名做项目名支持 -p 或 --project-name 来指定项目名在项目的目录中会包含一个docker-compose.yml 模板文件此文件为项目的默认配置文件支持使用 -f 或 COMPOSE_FILE 来指定项目的配置模板文件在配置文件里面可以定义一个或多个服务每个服务可以包含容器的名称、镜像、端口映射、依赖关系、环境变量、挂载点等配置参数 服务容器
Docker-compose部署
##Docker Compose 是 Docker 的独立产品因此需要安装 Docker 之后在单独安装 Docker Compose##下载
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose##安装
chmod x /opt/docker-composemv /opt/docker-compose /usr/local/bin/docker-compose##查看版本
docker-compose --version
##能查看到则安装成功YAML文件格式和编写注意事项
注意
YAML 是一种标记语言它可以很直观的展示数据序列化格式可读性高。类似于 json 数据描述语言语法比 json 简单的很多。YAML 数据结构通过缩进来表示
连续的项目通过减号来表示
键值对用冒号分隔
数组用中括号 [] 括起来
hash 用花括号 {} 括起来。使用 YAML 时需要注意下面事项大小写敏感通过缩进表示层级关系不支持制表符 tab 键缩进只能使用空格缩进缩进的空格数目不重要只要相同层级左对齐通常开头缩进2个空格用 # 号注释符号字符后缩进1个空格如冒号 : 、逗号 , 、横杠 - 如果包含特殊字符用单引号()引起来会作为普通字符串处理
双引号(): 特殊字符作为本身想表示的意思数据结构
对象映射
对象映射: 键值对的字典
animal: dogs序列属组
序列属组 一组按次序排列的列表##竖列表
pets
- Cat
- Dog
- Pig##横列表
pets: [cat, dog, pig]布尔值
##布尔值debug: true
debug: false序列的映射
##序列的映射pets- Cat- Dog- Pig映射的映射
##映射的映射websetting:cpu: 2memory: 1024Mswap: 2048Mdisk: 60GJSON格式
##JSON格式{pets: [cat,dog,pig],websetting: {cpu: [2],memory: [1024M],disk: [60G]}
}文本换行
# 注意“|”与文本之间须另起一行
# 使用|标注的文本内容缩进表示的块可以保留块中已有的回车换行value: |helloworld!# 输出结果
# hello 换行 world# 注意“”与文本之间的空格
# 使用标注的文本内容缩进表示的块将块中回车替换为空格最终连接成一行value: hello
world!# 输出结果
# hello 空格 world锚点和引用
# 复制代码注意*引用部分不能追加内容
# 使用定义数据锚点即要复制的数据
# 使用*引用锚点数据即数据的复制目的地name: a yaml
book: *a
books:- java- *a- python# 输出结果
book yaml
books[java, yaml, python]Docker compose配置常用字段
字段描述build指定 Dockerfile 文件名要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定dockerfile构建镜像的目录下的文件context可以是 dockerfile 的路径或者是指向 git 仓库的 url 地址image指定镜像command执行命令覆盖容器启动后默认执行的命令container_name指定容器名称由于容器名称是唯一的如果指定自定义名称则无法scale指定容器数量deploy指定部署和运行服务相关配置只能在 Swarm 模式使用environment添加环境变量networks加入网络引用顶级networks下条目network_mode设置容器的网络模式如 hostbridge…ports暴露容器端口与 -p 相同但端口不能低于 60volumes挂载一个宿主机目录或命令卷到容器命名卷要在顶级 volumes 定义卷名称volumes_from从另一个服务或容器挂载卷可选参数 :ro 和 :rw仅版本 ‘2’ 支持hostname容器主机名sysctls在容器内设置内核参数links连接到另外一个容器- 服务名称[:服务别名]privileged用来给容器root权限注意是不安全的truerestart设置重启策略noalwaysno-failureunless-stopped no默认策略在容器退出时不重启容器。 on-failure在容器非正常退出时退出状态非0才会重启容器。 on-failure:3在容器非正常退出时重启容器最多重启3次。 always在容器退出时总是重启容器。 unless-stopped在容器退出时总是重启容器但是不考虑在Docker守护进程启动时就已经停止了的容器。depends_on在使用Compose时最大的好处就是少打启动命令但一般项目容器启动的顺序是有要求的如果直接从上到下启动容器可能会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题。php: depends_on: - apache - mysql
Dockercompose字段相对的docker run命令image镜像标签command启动命令container_name–nameenvironment–envnetworksnetwork_mode–networkports-pvolumes-vvolumes_from–volumes-fromhostname-hsysctls-sysctllinks–linkprivileged–privilegedrestart–restart
docker compose常用命令
字段描述build重新构建服务ps列出容器up创建和启动容器 -d 后台启动exec在容器里面执行命令scale指定一个服务容器启动数量top显示容器进程logs查看容器输出down删除容器、网络、数据卷和镜像stop/start/restart停止/启动/重启服务
Docker Compose 文件结构
/opt/compose_nginx/
├── docker-compose.yml #创建模板脚本
├── nginx
│?? ├── Dockerfile #创建容器脚本
│?? ├── nginx-1.12.0.tar.gz #复制源码包
│?? └── run.sh #启动服务脚本
└── wwwroot└── index.html #站点网页docker compose部署apache
mkdir -p /usr/local/compose/docker-compose-apachecd /usr/local/compose/docker-compose-apachevim docker-compose.ymlversion: 3services:apache:image: httpd:latestcontainer_name: httpd-gglports:- 1314:80volumes:- ./html:/usr/local/apache2/htdocsnetworks:lamp:ipv4_address: 172.20.0.10networks:lamp:driver: bridgeipam:config:- subnet: 172.20.0.0/16docker compose 部署LNMP
mkdir /usr/local/compose/docker-compose-lnmp/cd /usr/local/compose/docker-compose-lnmp/##在目录中准备 Dockerfile 创建LNMP的相关的文件vim docker-compose.ymlversion: 3services:nginx:build:context: ./nginxdockerfile: Dockerfilecontainer_name: nginxports:- 80:80volumes:- ./nginx/html:/usr/local/nginx/htmlnetworks:lnmp:ipv4_address: 172.18.0.10mysql:image: mysql:centos7container_name: mysqlports:- 3306:3306volumes:- db-data:/usr/local/mysqlnetworks:lnmp:ipv4_address: 172.18.0.20php:image: php:centos7container_name: phpports:- 9000:9000volumes:- db-data:/usr/local/mysql- ./nginx/html:/usr/local/nginx/htmlnetworks:lnmp:ipv4_address: 172.18.0.30depends_on:- nginx- mysqlnetworks:lnmp:driver: bridgeipam:config:- subnet: 172.18.0.0/16volumes:db-data:##运行docker-compose##在 docker-compose.yml 的文件的目录中运行docker-compose up -ddocker-compose ps##验证数据库是否连接成功vim /usr/local/compose/docker-compose-lnmp/nginx/html/index.php?php
$linkmysqli_connect(192.168.242.66,admin,admin123);
if($link) echo h1Success!!/h1;
else echo Fail!!;
?##进入到容器中docker exec -it mysql bash##修改mysql 的登录密码mysqladmin -u root -p password 123mysql -uroot -p123create database word;
#创建一个数据库grant all ON word.* to admin% identified by admin123;#把数据库里面所有表的权限授予给admin,并设置密码admin123flush privileges;
#刷新数据库