Docker-Compose安装

使用场景:用来单机上编排容器(定义如何运行多个容器,使容器能互通)

docker compose是通过一个.yml/.yaml配置文件完成
docker compose将所管理的容器分为三层:
一个project包含多个service,一个service包含多个container
   工程/project  相当于一个目录,这个目录下有唯一的docker-compose.yml、extends文件和变量文件
         注意:如果没有指定project name就把目录名字作为project name
       服务/service  定义容器运行所需要的镜像、各种参数、依赖关系
            容器/container  数据运行的地方,最终运行的就是容器

在线安装Docker Compose

Docker-compose官网:https://docs.docker.com/compose
安装compose安装详情

curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose    
chmod +x /usr/local/bin/docker-compose
docker-compose version   # 查看版本信息

docker-compose 可以部署多个容器但是并没有解决负载均衡问题,如果需要必须借助服务发现或者第三方工具完成

简单小测试

mkdir test   # 创建工程目录
cd test/
test]# vim docker-compose.yml # 编写工程
nginx:                                   # service name
   container_name: nginx50               
   image: nginx:latest                    # 所用镜像
   ports:                                 # 端口映射
      - "8080:80"
   volumes:                               # 文件映射[本机:容器]
      - /www/wwwroot/8080:/usr/share/nginx/html
   hostname: nginx.test.com               # 主机名
   
ngin-php:
   container_name: nginx51
   image: nginx:latest
   ports:
      - "8081:80"
   volumes:
      - /www/wwwroot/8081:/usr/share/nginx/html
   hostname: nginx-php.test.com
test]# mkdir /www/wwwroot/{8080,8081} -p
test]# echo "My name is web8080" > /www/wwwroot/8080/index.html
test]# echo "My name is web8081" > /www/wwwroot/8081/index.html
test]# docker-compose up -d   # 运行工程 [-d表示后台]
Creating nginx50 ... done
Creating nginx51 ... done    # 表示成功
test]# docker-compose ps      # 查看结果
test]# curl 192.168.10.203:8080    # 验证
My name is web8080
test]# curl 192.168.10.203:8081
My name is web8081

基础命令:只限于在对应工程目录下 [单独操作 + ServiceName]

docker-compose stop            停止运行的容器
docker-compose start           启动已存在的容器
docker-compose kill            强制停止启动的容器
docker-compose rm              删除(只能删除停止的容器)
docker-compose pull            下载镜像(当前工程所需的)
docker-compose down -v         停止并移除整个project的所有service
docker-compose [un]pause       [恢复]暂停服务
docker-compose build           构建/重新构建所有镜像
docker-compose config          验证并查看compose配置文件
docker-compose create          创建容器,但不运行,不建议使用
docker-compose exec            服务中的某个容器执行一条命令
docker-compose port            显示某个容器的端口映射
##例:docker-compose port --protocol=tcp nginx 80
docker-compose -f /root/test/docker-compose.yml up -d      # 若不在工程所在目录 需要 -f 指定运行工程的目录
docker-compose run 容器名/Id /bin/sh    #可以临时运行

编写一个比较完整的.yml文件

test]# vim docker-compose.yml
version: '3'      # 指定运行的版本,即写法格式
services:         # 多个容器集合
  db:                    # service块
     image: mysql:5.7     # 指定服务使用的镜像
     volumes:             # 文件映射
        - db_data:/var/lib/mysql     # 宿主机路径:容器路径
     restart: always       # 重启策略 docker每次启动时会重启该服务
     environment:          # 定义环境变量,可以用数组或字典
        MYSQL_ROOT_PASSWORD: wordpress    # root密码
        MYSQL_DATABASE: wordpress         # 数据库名
        MYSQL_USER: yzq                   # 普通用户名
        MYSQL_PASSWORD: 123.com           # 密码

#
  wordpress:
     depends_on:          # 规定service加载顺序,在谁的基础上
        - db
     image: wordpress:latest
     links:               # 将指定容器连接到当前链接
        - db
     volumes:
        - wp_site:/var/www/html
     ports:               # 端口映射 "宿主机:容器暴露"
        - "80:80"
        - "443:443"
     restart: always
     environment:
        WORDPRESS_DB_HOST: db:3306
        WORDPRESS_DB_USER: yzq
        WORDPRESS_DB_PASSWORD: 123.com
#
volumes:
  db_data:
  wp_site:
test]# docker-compose up -d

编写一个网络方面即web集群

test]# vim docker-compose.yml
version: '2'
services:
   web1:
      image: nginx:latest
      ports:
        - "8081:80"
      container_name: "web1"
      networks:
        - dev
   web2:
      image: nginx:latest 
      ports:
        - "8082:80"
      container_name: "web2"
      networks:
        - dev
        - pro
   web3:
      image: nginx:latest
      ports:
        - "8083:80"
      container_name: "web3"
      networks:
        - pro:

networks:     # 定义上边使用的内容
   dev:
      driver: bridge
   pro:
      driver: bridge
test]# docker-compose up -d
test]# docker run -it --rm --network container:web2 busybox /bin/sh    # 桥接busybox,就可以使用相应命令,然后查看ip r

通过Dockerfile制作镜像并创建工程

test]# mkdir dockerfile
test]# cd dockerfile/
dockerfile]# mkdir htdocs
dockerfile]# echo "hahahaha" > htdocs/index.html
dockerfile]# vim Dockerfile
 FROM httpd:latest
 ADD htdocs /usr/local/apache2/htdocs
 VOLUME /usr/local/apache2/htdocs
dockerfile]# cd ..
test]# vim docker-compose.yml 
version: '2'
services:
   web:
     build: ./dockerfile
     ports:
       - "6061:80"
     container_name: "web"
     networks:
       - my_net

networks:
  my_net:
     driver: bridge
     ipam:            #自定义网段
        config:
          - subnet: 172.60.0.0/16
            gateway: 172.60.0.1
test]# docker-compose up --build -d  # 运行的容器是基于构建的镜像[test_web]
test]# curl 192.168.10.203:6061
  hahahaha
# 目录结构
test]# tree
.
├── docker-compose.yml
└── dockerfile
    ├── Dockerfile
    └── htdocs
        └── index.html

Docker compose编写的版本之分:
区分version1和version2 用软件版本区分:compose1.6.0+ and Docker Engine 1.10.0
- version1 即将被取消
- version2 支持更多的指令
- version3 向下兼容,并且版本更高25

容器的收缩

test]# vim docker-compose.yml 
# 不能有name,然后端口随机映射;防止冲突
version: '3'
services:
   web1:
     build: ./dockerfile
     ports:
       - "80"
     networks:
       - my_net

networks:
  my_net:
     driver: bridge
test]# docker-compose up -d --scale web1=3 --no-recreate    # 重新构建并运行 让web1有三个
#可以随意伸缩,添加就等于大数值,减少就小数值
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值