docker compose

  学习目标: 了解任务编排的定义和作用 应用 Docker compose基本操作 应用 Docker Compose生产实践  

简介

这一节,我们从任务编排、Docker compose简介、Docker & Docker compose这三个方面来学习。   任务编排介绍 场景: 我们在工作中为了完成业务目标,首先把业务拆分成多个子任务,然后对这些子任务进行顺序组合,当子任务按照方案执行完毕后,就完成了业务目标。 任务编排,就是对多个子任务执行顺序进行确定的过程。   常见的任务编排工具: 单机版:docker compose 集群版: Docker swarm         Docker Mesos                Apache kubernetes        Google   Docker compose是一种docker容器的任务编排工具 官方地址:https://docs.docker.com/compose/   docker compose简介 docker compose 本质:docker 工具 对象:应用服务 配置:YAML 格式配置文件 命令:简单 执行:定义和运行容器   docker compose的配置文件 docker-compose.yml       只能是这个名称 文件后缀是yml 文件内容遵循 ymal格式  

快速入门

这一节,我们从部署、配置文件、效果查看这三个方面来学习。   docker compose 部署 安装依赖工具 apt-get install python-pip -y 安装编排工具 pip install docker-compose 查看编排工具版本 docker-compose version 查看命令帮助 docker-compose --help compose简单配置文件 docker-compose.yml 文件内容 version: '2' services:   web1:     image: nginx     ports:       - "9999:80"     container_name: nginx-web1     web2:     image: nginx     ports:       - "8888:80"     container_name: nginx-web2 运行一个容器 后台启动: docker-compose up -d 注意: 如果不加-d,那么界面就会卡在前台 查看运行效果 docker-compose ps  

命令详解

这一节,我们从服务操作命令、服务信息命令、相关命令这三个方面来学习。   注意: 所有命令尽量都在docker compose项目目录下面进行操作 项目目录:docker-compose.yml所在目录   服务启动、关闭、查看 后台启动: docker-compose up -d 删除服务 docker-compose down 查看正在运行的服务 docker-compose ps   服务创建、开启、关闭、删除 创建一个服务 docker-compose create 注意: create 默认不会创建网络配置,所以,我们一般不会在第一次创建服务时候使用,一般结合rm场景来使用。   启动一个服务 docker-compose start <服务名> 注意: 如果后面不加服务名,会停止所有的服务 停止一个服务 docker-compose stop <服务名> 注意: 如果后面不加服务名,会停止所有的服务 删除服务 docker-compose rm  <服务名> 注意: 这个docker-compose rm不会删除应用的网络和数据卷。 其他信息查看 查看运行的服务 docker-compose ps 查看服务运行的日志 docker-compose logs -f 注意: 加上-f 选项,可以持续跟踪服务产生的日志 查看服务依赖的镜像 docke-compose  images 进入服务容器 docker-compose exec <服务名> <执行命令> 查看服务网络 docker network ls   其他命令 项目相关   build              Build or rebuild services 根据提供的dockerfile,自动构建镜像,类似于docker build -t ...   create             Create services   pause              Pause services   unpause            Unpause services   restart            Restart services   start              Start services   stop               Stop services  注意: 如果后面不加服务名,会停止所有的服务   服务相关   up                 Create and start containers   down               Stop and remove containers, networks, images, and  volumes   ps                 List containers   rm                 Remove stopped containers   events             Receive real time events from containers   kill               Kill containers   logs               View output from containers   scale              Set number of containers for a service   其他命令   config             Validate and view the Compose file   help               Get help on a command   images             List images   run                Run a one-off command   top                Display the running processes   version            Show the Docker-Compose version information   bundle             Generate a Docker bundle from the Compose file   port               Print the public port for a port binding      

文件详解

这一节,我们从YAML介绍、属性详解这两个方面来学习。   官方参考资料: https://docs.docker.com/compose/overview/   文件命名: compose的配置文件后缀是 .yml   compose文件样例: version: '2'                        # compose 版本号 services:                           # 服务标识符   web1:                             # 子服务命名     image: nginx                     # 服务依赖镜像属性     ports:                           # 服务端口属性       - "9999:80"                    # 宿主机端口:容器端口     container_name: nginx-web1       # 容器命名 格式详解: compose版本号、服务标识符必须顶格写 属性名和属性值使用': '(冒号+空格) 隔开 层级使用'  '(两个空格)表示,而且是一个叠加的关系 服务属性列表使用'  - '(空格空格-空格)来表示   compose属性详解 镜像: 格式: image: 镜像名称:版本号 举例: image: nginx:latest   容器命名: 格式: container_name: 自定义容器命名      举例: container_name: nginx-web1   数据卷: 格式: volumes:              - 宿主机文件:容器文件 举例: volumes:             - ./linshi.conf:/nihao/haha.sh 注意:后面的位置必须有文件名称,不然的话会失败 端口: 格式: ports:        - "宿主机端口:容器端口" expose:        - "容器暴露端口" 举例: ports:        - "9999:80"   镜像构建: 格式: build: Dockerfile的路径 举例:      build: .      build: ./dockerfile_dir/      build: /root/dockerfile_dir/   服务依赖: 格式: depends_on:          - 本任务依赖哪个服务 举例: depends_on:         - web1  

django项目实践

这一节,我们从项目分析、方案实施这两个方面来学习。   项目分析 docker compose 需求: 自动部署一个集群,使用nginx代理两个go项目   流程分析: 1、django项目部署 2、nginx代理部署 3、docker 环境 4、docker compose任务编排   技术点分析: 1、django项目部署 django项目基础环境 django项目配置 2、nginx代理部署 nginx的配置文件 3、docker 环境 docker基础镜像 django镜像 nginx镜像 4、docker compose任务编排 4个任务:1个镜像构建任务、2个django任务、1个nginx任务 任务依赖:django镜像依赖于基础镜像完毕   实施方案: 1、基础环境 1.1 compose基础目录 1.2 环境依赖文件: views.py、views1.py、views2.py、nginx-django.conf 1.3 dockerfile文件 django项目环境的Dockerfile文件 2、任务编排文件 2.1 nginx任务 基于nginx镜像,增加一个nginx的代理配置即可 2.2 django基础镜像任务 基于ubuntu-ssh镜像,构建django基础环境镜像,参考3.2.4内容 该任务依赖于 2.1 nginx任务 2.3 django项目任务 基于django基础镜像,增加测试文件即可 该任务依赖于2.2 django基础镜像任务 3、测试 3.1 集群测试     方案实施 1、基础环境 1.1 compose基础目录 创建compose基础目录 mkdir /docker/compose/ cd /docker/compose/ 1.2 环境依赖文件: nginx配置文件 nginx专用目录 mkdir nginx cd nginx nginx负载均衡配置nginx-django.conf upstream django {   server 192.168.8.14:10086;   server 192.168.8.14:10087; }      server {   listen       80;   server_name  _;   location / {     proxy_pass   http://django;     index  index.html index.htm;   }     } django基础镜像依赖文件 django基础镜像目录: mkdir django-base cd django-base Dockerfile文件 参考3.2.4   django任务依赖文件: django1/views.py配置文件 from django.shortcuts import render from django.http import HttpResponse   # Create your views here.   def hello(resquest):    return HttpResponse("itcast V1.1") django2/views.py配置文件 from django.shortcuts import render from django.http import HttpResponse   # Create your views here.   def hello(resquest):    return HttpResponse("itcast V1.2") 1.3 dockerfile文件 django项目环境的Dockerfile文件 参考3.2.4 最终目录结构 :~# tree /docker/compose/ /docker/compose/ ├── django1 │   └── views.py ├── django2 │   └── views.py ├── django-base │   ├── Django-2.1.2.tar.gz │   ├── Dockerfile │   └── views.py ├── docker-compose.yml └── nginx     └── nginx-django.conf   4 directories, 7 files 2、任务编排文件 docker-compose.yml文件内容 version: '2' services:   web:     image: nginx     ports:       - "9999:80"     volumes:       - ./nginx/nginx-django.conf:/etc/nginx/conf.d/default.conf     container_name: nginx-web     django-base:     build: ./django-base/     image: ubuntu-django:v0.1     django-web1:     image: ubuntu-django:v0.1     volumes:       - ./django1/views.py:/data/server/itcast/test1/views.py     ports:       - "10086:8000"     container_name: django-web1     depends_on:       - django-base     django-web2:     image: ubuntu-django:v0.1     volumes:       - ./django2/views.py:/data/server/itcast/test1/views.py     ports:       - "10087:8000"     container_name: django-web2     depends_on:       - django-base   构建镜像 docker-compose build 启动任务 docker-compose up -d 查看效果 docker-compose ps 浏览器访问 192.168.8.14:9999  

案例升级

刚才的实践中,我们会发现如果使用端口映射的方法,会造成我们我们后端的服务可以直接被访问,这样的效果不安全,那么我们接下来升级一下案例,达到只能通过nginx访问后端的服务。   环境还原 清除刚才的容器环境 docker-compose down 配置文件修改 修改nginx配置文件 # cat nginx/nginx-django.conf upstream django {   server django-web1:8000;   server django-web2:8000; } ... 注意: server后面跟的是 go的任务名和容器暴露端口号   修改docker-compose.yml文件 # cat docker-compose.yml version: '2' services:   web:     image: nginx     restart: always   ...   django-web1:     image: ubuntu-django:v0.1     expose:       - "8000"     ...     django-web2:     image: ubuntu-django:v0.1     expose:       - "8000"     ... 注意: 将原来的ports更换成了expose nginx必须增加 restart 属性,防止地址变动,导致nginx-web退出   效果查看 启动docker compose docker-compose up -d 服务检查 docker-compose ps 浏览器检查 192.168.8.14:9999                  
上一篇:c#表达式扩展与或非 通过表达式获取字段属性名称


下一篇:AD域PowerShell常用命令——Get-ADuser