Docker——Compose容器编排

文章目录

    • 一、Docker网络通信
      • 端口映射
      • 容器互联
    • 二、Docker Compose容器编排
      • 为什么使用Compose?
      • 1、Compose环境安装
      • 2、Compose文件结构
      • 3、Compose配置yml常用字段
      • 4、Docker Compose常用操作命令
      • 5、Compose命令说明
      • 6、实例:Compose创建Nginx环境
        • 1)环境部署所有主机安装docker环境
        • 2)下载compose
        • 3)使用compose编排镜像
        • 4)访问验证

一、Docker网络通信

Docker单机网络拓扑图:
Docker——Compose容器编排_第1张图片

网络通讯单机部署:docker0为容器网桥网桥,也是一个网络的容器,提供网络接口(veth1、veth3),并且与容器自身接口(veth0、veth2)进行互联。对外会有一个物理端口

端口映射

  • 端口映射机制将容器内的服务提供给外部网络访问

  • 可随机或指定映射端口范围

docker run -d -P httpd:centos
docker run -d -p 12345:80 httpd:centos

容器互联

  • 在源容器和接受容器间建立一条网络通信隧道
  • 使用docker run命令–link选项实现容器间互联通信
docker run -d -P --name web1 httpd:centos
docker run -d -P --name web2 --link web1:web1 httpd:centos
docker exec -it web2 /bin/bash
ping web1

二、Docker Compose容器编排

之前使用Docker,是先定义Dockerfile文件,然后使用docker build、docker run等命令操作容器。

但通常来说,一个应用系统不仅仅只包含一个服务,每个服务一般也有多个容器实例。这种情况下如果每个容器都要手动启停,那么效率之低、维护量之大可想而知。

Docker Compose是Docker官方编排(Orchestration)项目之一,负责快速的部署分布式应用。

使用Docker Compose可以轻松、高效的管理容器,它是一个用户定义和运行多个容器的Docker应用程序。在Docker Compose中你可以使用YAML文件来配置你的应用服务,然后只需要一个简单的命令,就可以创建并启动你配置的所有服务

  • Docker Compose的前身是Fig,它是一个定义及运行多个Docker容器的工具

  • 使用Docker Compose不在需要使用shell脚本来启动容器

  • Docker Compose非常适合组合使用多个容器进行开发的场景

为什么使用Compose?

  • ① 容器的建立和运行,自动化完成

  • ② 可以对多个容器进行操作

1、Compose环境安装

[root@localhost ~]# curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@localhost ~]# chmod +x /usr/local/bin/docker-compose
[root@localhost ~]#docker-compose -v

2、Compose文件结构

参考文档:https://baike.baidu.com/item/YAML/1067697?fr=aladdin

样例:vim docker-compose.yml

YAML是一种标记语言很直观的数据序列化格式

文件格式及编写注意事项:

① 不支持制表符tab键缩进,需要使用空格缩进

② 通常开通缩进2个空格

③ 字符后缩进一个空格(如冒号“:”、逗号“,”、横杆“ - ”后面都需要带空格)

④ 用#号注释

⑤ 如果包含特殊字符用单引号引进来

⑥ 布尔值(true/false)必须用引号括起来

3、Compose配置yml常用字段

字段 描述
build dockerfile context 指定Dockerfile文件名构建镜像上下文路径
image 指定镜像
command 执行命令,覆盖默认命令
container name 指定容器名称,由于容器名称是唯一的, 如果指定自定义名称,则无法scale
deploy 指定部署和运行服务相关配置,只能在Swarm模式使用
environment 添加环境变量
networks 加入网络
ports 暴露容器端口,与-p相同,但端口不能低于60
volumes 挂载宿主机路径或命令卷
restart 重启策略,默认no,always, no-failure,unless-stoped
hostname 容器主机名

4、Docker Compose常用操作命令

字段 描述
build 重新构建服务
ps 列出容器
up 创建和启动容器
exec 在容器里面执行命令
scale 指定一个服务容器启动数量
top 显示容器进程
logs 查看容器输出
down 删除容器、网络、数据卷和镜像
stop/start/restart 停止/启动/重启服务

5、Compose命令说明

基本的使用格式

docker-compose [options] [COMMAND] [ARGS…]

docker-compose选项

  • –verbose:输出更多调试信息
  • –version:打印版本并退出
  • -f,–file FILE :使用特定的compose模板文件,默认为docker-compose.yml
  • -p,–project-name NAME : 指定项目名称,默认使用目录名称

6、实例:Compose创建Nginx环境

1)环境部署所有主机安装docker环境

详见:Docker——简单部署及基础操作

[root@localhost ~]# yum install -y docker-ce

2)下载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

这里我们先前已经下载好了,直接上传即可
在这里插入图片描述

#添加执行权限

[root@localhost ~]# chmod 755 docker-compose

#复制到/usr/local/bin目录便于系统识别

[root@localhost ~]# cp -p docker-compose /usr/local/bin

#现在就可以使用docker-compose 了
在这里插入图片描述

3)使用compose编排镜像

① 创建编排nginx目录

[root@localhost ~]# mkdir compose_nginx
[root@localhost ~]# cd compose_nginx/

②创建nginx目录

[root@localhost compose_nginx]# mkdir nginx

#上传nginx包至nginx目录中

#编写run.sh启动脚本

[root@localhost nginx]# vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

#编写Dockerfile文件

[root@localhost nginx]# vim Dockerfile
FROM centos:7
MAINTAINER my_nginx
#安装语言、环境依赖包
RUN yum install -y gcc gcc-c++ pcre* zlib-devel make cmake
#创建程序用户
RUN useradd -M -s /sbin/nologin nginx
#下载nginx软件包
ADD nginx-1.12.0.tar.gz /usr/local/src
#指定工作目录
WORKDIR /usr/local/src
WORKDIR nginx-1.12.0
#编译安装
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/nginx:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
#添加宿主机中的run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

Docker——Compose容器编排_第2张图片

#tree查看文件结构

[root@localhost compose_nginx]# tree ./
./
└── nginx
    ├── Dockerfile
    ├── nginx-1.12.0.tar.gz
    └── run.sh

1 directory, 3 files

Docker——Compose容器编排_第3张图片

③ 创建ngixn首页

#创建目录,用于数据卷挂载

[root@localhost compose_nginx]# mkdir wwwroot

#编写首页内容,内容自拟

[root@localhost compose_nginx]# cd wwwroot/
[root@localhost wwwroot]# vim index.html

#目前为止文件结构

[root@localhost compose_nginx]# tree ./
./
├── nginx
│   ├── Dockerfile
│   ├── nginx-1.12.0.tar.gz
│   └── run.sh
└── wwwroot
    └── index.html

2 directories, 4 files

Docker——Compose容器编排_第4张图片

④ 创建yml文件

[root@localhost compose_nginx]# vim docker-compose.yml
version: '3'	#版本号
services:		#指定服务
  nginx:		#指定为nginx服务
    hostname: nginx		#主机名称nginx
    build:		#构建
      context: ./nginx	#在当前目录下的nginx目录
      dockerfile: Dockerfile	#使用里面的Dockerfile文件
    ports:		#提供端口
      - 1216:80
      - 1217:443
    networks:	#指定网络
      - my		#自定义命名空间
    volumes:	#指定卷
      - ./wwwroot:/usr/local/nginx/html	#当前目录下的wwwroot目录挂载到/usr/local/nginx/html
networks:		#全局的网络命名空间
  my:

#目前为止文件结构

[root@localhost compose_nginx]# tree ./
./
├── docker-compose.yml
├── nginx
│   ├── Dockerfile
│   ├── nginx-1.12.0.tar.gz
│   └── run.sh
└── wwwroot
    └── index.html

2 directories, 5 files

Docker——Compose容器编排_第5张图片

⑤ 指定构建

#开始自动的构建编排

[root@localhost compose_nginx]# docker-compose -f docker-compose.yml up -d

#构建成功,查看结果
Docker——Compose容器编排_第6张图片

4)访问验证

Docker——Compose容器编排_第7张图片

你可能感兴趣的:(Docker,docker,Compose)