赞
踩
使用场景:用来单机上编排容器(定义如何运行多个容器,使容器能互通)
docker compose是通过一个.yml/.yaml配置文件完成
docker compose将所管理的容器分为三层:
一个project包含多个service,一个service包含多个container
工程/project 相当于一个目录,这个目录下有唯一的docker-compose.yml、extends文件和变量文件
注意:如果没有指定project name就把目录名字作为project name
服务/service 定义容器运行所需要的镜像、各种参数、依赖关系
容器/container 数据运行的地方,最终运行的就是容器
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有三个 #可以随意伸缩,添加就等于大数值,减少就小数值
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。