Docker服务编排(Docker Compose)
-  微服务应用一般包含若干个微服务每个微服务一般会部署多个实例,如果每个微服务需要手动启停 
-  维护工作量大 
-  从Dockerfile build image 或者去dockerhub拉去image 
-  创建多个容器 
-  管理容器 
  
Docker Compose
一个编排多容器分布式部署工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动,停止,使用步骤:
-  Dockerfile定义运行镜像 
-  docker-compose.yml定义组成应用各服务 
-  运行docker-compose up 启动 
Docker Compose安装使用
安装
[root@server-a ~]# curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
设置文件可执行权限  
 chmod +x /usr/local/bin/docker-compose  
docker-compose -version
docker-compose version 1.22.0, build f46880fe
卸载
# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
编排nginx+springboot项目
springboot项目创建
- 首先创建一个springboot项目,使用IDEA的spring Initializr创建,创建一个Controller
@RestController
public class Controller {
    @RequestMapping("/hello")
    public String hello(){
        return "HELLO DOCKER";
    }
}
-  启动项目,页面访问  
-  maven将项目打成jar包 
-  将jar包传入你选择的目录中去 
[root@server-a ~]# mkdir docker-files
[root@server-a ~]# cd  docker-files
[root@server-a docker-files]# ls
[root@server-a docker-files]# ll
总用量 17152
-rw-r--r--. 1 root root 17561003 5月   8 04:04 app-0.0.1-SNAPSHOT.jar
-  定义父镜像 FROM java 
-  定义作者信息 MAINTAINER 
-  将jar包添加到容器 ADD 
-  定义容器启动时命令 CMD [root@server-a docker-files]# vim app-dockerfile [root@server-a docker-files]# cat app-dockerfile FROM java:8 MAINTAINER rkun18 ADD app-0.0.1-SNAPSHOT.jar app.jar CMD java -jar app.jar
docker build -f ./app-dockerfile -t app .
- 查看刚创建app镜像
```bash
     [root@server-a docker-files]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
app          latest    3d2ef669ba18   About a minute ago   661MB
nginx        latest    605c77e624dd   16 months ago        141MB
tomcat       latest    fb5657adc892   16 months ago        680MB
centos       7         eeb6ee3f44bd   19 months ago        204MB
java         latest    d23bdf5b1b1b   6 years ago          643MB
-  使用镜像创建容器并启动,(注意这里如果容器创建了没启动可能是java版本过低,不适配) 错误发生,查看容器日志 docker logs <container_name_or_id>
[root@server-a docker-files]# docker run -id -p 9000:8080 --name=c1 app
e7dd2eb736a00a1797e8c494748dbbb9bb68523b5599ba86cea9877c91f479c8
[root@server-a docker-files]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS                                       NAMES
e7dd2eb736a0   app       "/bin/sh -c 'java -j…"   6 seconds ago   Up 5 seconds   0.0.0.0:9000->8080/tcp, :::9000->8080/tcp   c1
- 测试访问宿主机ip:9000/hello

开始部署
- 创建docker-compose目录
 [root@server-a ~]# mkdir ~/docker-compose
[root@server-a ~]# cd  ~/docker-compose
- 编写 docker-compose.yml 文件
version: '3'
services:
  nginx:
   image: nginx
   ports:
    - 80:80
   links:
    - app
   volumes:
    - ./nginx/conf.d:/etc/nginx/conf.d    #宿主机目录:容器目录
  app:
    image: app
    expose:
      - "8080"
- 创建宿主机挂载目录,写入配置信息
[root@server-a docker-compose]# mkdir -p ./nginx/conf.d
[root@server-a docker-compose]# cd ./nginx/conf.d
[root@server-a conf.d]# vim usr.conf
[root@server-a conf.d]# cat usr.conf
server {
    listen 80;
    access_log off;
    location / {
        proxy_pass http://app:8080
- 切换目录,启动容器
[root@server-a ~]# cd docker-compose/
[root@server-a docker-compose]# docker-compose up
启动效果

- 访问宿主机80端口,查看效果
  
成功访问



















