赞
踩
Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。它是一个定义和运行多容器的docker应用工具。使用compose,你能通过YMAL文件配置你自己的服务,然后通过一个命令,你能使用配置文件创建和运行所有的服务。
Compose是一个定位“定义和运行多个Docker容器应用的工具”,其前身是Fig,目前使用的Compose仍然兼容Fig格式的模板文件。
Compose的代码主要使用Python编写,其开源地址为:https://github.com/docker/compose。
注意:Fig时代支持的配置文件名为fig.yml以及fig.yaml;为了兼容遗留的Fig化配置,目前Compose支持的配置文件类型非常丰富,主要有以下几种:fig.yaml、docker-compose.yml、docker-compose.yaml以及用户指定的配置文件路径。(可通过环境变量COMPOSE_FILE或-f参数自定义配置文件)
以上可以理解为:
服务(service)就是在它下面可以定义应用需要的一些服务,代表配置文件中的每一项服务。每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等,即以容器为粒度,用户需要Compose所完成的任务。
项目(project)代表用户需要完成的一个项目,即是Compose的一个配置文件可以解析为一个项目,即Compose通过分析指定配置文件,得出配置文件所需完成的所有容器管理与部署操作。
Compose的默认管理对象时项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
docker 和操作系统无关的一个沙箱容器,宿主机安装的什么操作系统和其本身无关,在它基础上可以制作各种系统类型的基础服务
Dockerfile 是把我们手工安装docer镜像的过程变成一个配置文件的方式运行,这样每次不用一步步手敲命令去安装了,而只是需要一个配置文件运行既可生成一个镜像
docker-compos 提供了服务和项目的概念,这样一个服务可以配置多个项目,这个服务是多个项目的集合体,启动和关闭都相对一个一个项目的启动要方便很多
假如你不用 docker ,搭建 wordpress 怎么弄?
简而言之, Dockerfile 记录单个镜像的构建过程, docker-compse.yml 记录一个项目(project, 一般是多个镜像)的构建过程。
你说有些教程用了 dockerfile+docker-compose, 是因为 docker-compose.yml 本身没有镜像构建的信息,
如果镜像是从 docker registry 拉取下来的,那么 Dockerfile 就不需要;
如果镜像是需要 build 的,那就需要提供 Dockerfile.
Compose安装
Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker,对于Mac OS和Windows的安装比较容易,可以参考Install Docker for Mac和Install Docker for Windows,对于Linux的安装可以参考Ubuntu下docker安装及简单应用。
Linux平台的安装
这里是使用了官方编译好的二进制包,地址:https://github.com/docker/compose/releases。把这些二进制文件下载后直接放到执行路径下面,并添加权限即可。
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
然后我们执行docker-compose -version可以查看到具体的信息
如果是二进制包方式安装的,删除二进制文件即可:
sudo rm /usr/local/bin/docker-compose
模板文件是使用Compose的核心,涉及的指令关键字也比较多,大部分指令与docker run相关参数的含义都是类似的。
默认的模板文件迷城为docker-compose.yml,格式为YAML格式。
比如一个Compose模板文件:
version: "2"
services:
web:
images: nginx
ports:
- "80:80"
volumes:
- "/data"
#volumes:
#networks:
Docker Compose的模板文件主要分为3个区域,为:
services
服务,在它下面可以定义应用需要的一些服务,每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等。
volumes
数据卷,在它下面可以定义的数据卷(名字等等),然后挂载到不同的服务下去使用。
networks
应用的网络,在它下面可以定义应用的名字、使用的网络类型等等。
注意:每个服务都必须通过image指令指定镜像或build指令(需要Dockerfile)等来自动构建生成镜像。如果使用build指令,在Dockefile中设置的选项(例如:CMD、EXPOSE、VOLUME、ENV等)将会自动被获取,无需在docker-compose.yml中再次设置。
常用字段在上述的yml文件格式中有过一些解释,下面是详细解释
基本的命令格式:docker-compose [选项] [命令] [参数]
docker-compose选项
–verbose:输出更多调试信息
–version:打印版本并退出
-f、–file FILE:使用特定的compose末班文件,默认为docker-compose.yml
-p、–project-name NAME:指定项目名称,默认使用目录名称
YAML是一种标记语言很直观的数据序列化格式,非常适合用来表达或者编辑数据结构、各种配置文件、文件大纲等,例如:许多电子邮件标题格式和YAML非常接近
文件格式以及编写注意事项
1、不支持制表符tab键缩进,需要使用空格缩进,使用缩进表示层级关系
2、通常开头缩进2个空格,缩进的空格数不重要,只要相同层级的元素左对齐即可
3、字符后缩进一个空格,如冒号、逗号、横杆
4、用#号注释
5、如果包含特殊字符用单引号引起来
6、布尔值必须用引号括起来
'//Docker都是已经部署好了的,这里不再赘述'
[root@docker ~]# curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose '//在Linux上我们可以从GitHub上下载它的二进制包来使用,此命令是下载Docker Compose的当前稳定版本'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 638 100 638 0 0 149 0 0:00:04 0:00:04 --:--:-- 149
100 10.3M 100 10.3M 0 0 18758 0 0:09:39 0:09:39 --:--:-- 17256
[root@docker ~]# chmod +x /usr/local/bin/docker-compose
[root@docker ~]# docker-compose -v '//查看版本'
docker-compose version 1.21.1, build 5a3f1a3
[root@docker ~]# mkdir -p /compose_nginx/nginx '//创建目录' [root@docker ~]# cd /compose_nginx/nginx [root@docker nginx]# rz -E '//上传nginx源码包' rz waiting to receive. [root@docker nginx]# ls nginx-1.12.2.tar.gz [root@docker nginx]# vim Dockerfile FROM centos:7 MAINTAINER build image nginx <tang> RUN yum -y update RUN yum -y install gcc gcc-c++ pcre* make cmake zlib-devel openssh* net-tools lsof telnet passwd vim ADD nginx-1.12.2.tar.gz /usr/local/src RUN useradd -M -s /sbin/nologin nginx WORKDIR /usr/local/src/nginx-1.12.2 RUN (./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module) RUN make && make install ENV PATH /usr/local/nginx/sbin/:$PATH #RUN ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ EXPOSE 80 EXPOSE 443 RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf '//指关闭守护进程启动' CMD ["nginx"]
[root@docker nginx]# cd .. [root@docker compose_nginx]# vim docker-compose.yml version: '3' services: nginx: hostname: nginx build: context: ./nginx dockerfile: Dockerfile ports: - 1216:80 - 1217:443 networks: - cluster networks: cluster: [root@docker compose_nginx]# tree ./ ./ ├── docker-compose.yml └── nginx ├── Dockerfile └── nginx-1.12.2.tar.gz
[root@docker compose_nginx]# docker-compose -f docker-compose.yml up -d '//指定ocker-compose.yml文件来启动' [root@docker compose_nginx]# docker-compose ps '//compose编排工具成功创建容器' Name Command State Ports ------------------------------------------------------------------------------------- compose_nginx_nginx_1 nginx Up 0.0.0.0:1217->443/tcp, 0.0.0.0:1216->80/tcp [root@docker compose_nginx]# docker ps -a '//容器创建成功' CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5ecd884db086 compose_nginx_nginx "nginx" 34 seconds ago Up 33 seconds 0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp compose_nginx_nginx_1 [root@docker compose_nginx]# docker images '//镜像创建成功' REPOSITORY TAG IMAGE ID CREATED SIZE compose_nginx_nginx latest fd1cfaa3fa13 38 seconds ago 726MB [root@docker compose_nginx]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:68:b8:a6 brd ff:ff:ff:ff:ff:ff inet 192.168.233.133/24 brd 192.168.233.255 scope global noprefixroute ens33 '//此虚拟机IP地址为192.168.233.133,稍后用此地址测试nginx服务' valid_lft forever preferred_lft forever inet6 fe80::35a9:b12:5e2b:c44d/64 scope link noprefixroute valid_lft forever preferred_lft forever
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。