上期我们讲了在Docker 容器化部署实践--入门讲了Docker作为云计算的优点以及它的安装常见命令。今天给大家介绍一个简单的编排工具docker compose。
在讲之前我继续沿用昨天的提到一个命令:
docker run -d -p 5000:5000 --name echo ubuntu:16.04 /bin/bash -c "while true; do echo 1; sleep 1; done"
-d 参数后台运行
-p 端口号映射
--name 自定义容器名字,容器命名是唯一的,若要使用需要删除之前的。
启动好了之后我们可以通过docker logs -f echo
查看容器内数字1的打印。
我们从上面可以看到整个操作起来相对比较繁琐,既要输入各个参数,又有版本号,标签等等。如果我们只是一个容器还好用个shell定义一个快捷方式就行。
但是我们往往有多个容器,多个容器相互关联。比如一个web项目,我们可能有db容器,缓存容器,离线任务的容器,日志容器等等,这个时候如果我们还用手动输入进行控制,不仅非常麻烦还容易出错。
这时通过shell自定义命令就显得吃力一点了,并且不能做到多服务启动重启等等。
所以Docker官方出了一款编排工具,叫Compose,它通过一个单独docker-compose.yml模板文件来定义一组相关的容器,简单的理解就是通过这种方式把对应的各个容器相互组装起来,进行启动,停止,删除。
Compose这是由Python语言编写,通过Docker提供的API进行容器的管理,使用操作也非常方便。
下面来看一个docker-compose.yml 的文件形式:
version: "3" # 注意版本号 services: # 一个应用的容器,可以包括多个相同镜像容器实例 dev: image: hub.yourdomain.com/test:1.0 # 镜像地址 command: python app.py # 容器执行命令 container_name: test # 容器名 restart: always volumes: - ./docker:/data # 挂载地址 ports: - "9527:9527" #端口 environment: - PYTHONPATH=/data - XXX_API_SETTINGS=XXX.config.dev network_mode: bridge extra_hosts: # 配置额外的host名称 - "test.yourdomain.com:127.0.0.1" external_links: # 链接到外部容器 - redis:redis - mysql:mysql
通过上面的简单配置,我们就能把多个容器链接处理好了:
通过docker-compose up dev就能把整个服务启动起来了,并且把端口号已经环境变量地址等等都设置好了,非常方便。
下面我们来说一下docker-compose 安装,docker-compose 安装方式非常简单,一条命令就完事儿。
sudo pip install -U docker-compose
安装好了如果你Linux或者Mac终端是使用的ohmyzsh的话,可以在zshrc里面添加 plugins +=(docker-compose)
给大家贴一下我自己常使用的自动补全命令行
plugins=(git ruby autojump osx tmux zsh-syntax-highlighting brew-cask brew colored-man rsync sudo node-docs history-substring-search docker docker-compose fabric redis-cli cp zsh-autosuggestions )
我简单介绍一下常使用的几个命令(和docker没有太多差别),更多的请参考 docker-compose -h
:
docker-compose logs dev # dev 是定义service服务
docker-compose up -d dev # 启动服务,会进行自动拉取镜像,进行关联服务
docker-compose restart dev # 重启服务
docker-compose rm dev # 删除服务
通过Compose我们可以快速编写属于自己docker项目的启动配置文件,方便我们快速启动,重启服务,没有使用的同学可以用起来了,今天内容就先到这儿了。
容器化部署实践,我打算从基础操作到实战应用以一个系列进行分享,今天是第二篇docker-compose编排,后期我将持续分享更多相关内容,从容器化入门使用到部署实践编排技术,欢迎大家持续进行关注。