Docker Compose
Docker Compose是一个用来定义和运行复杂应用的docker工具。
可以通过使用Compose在一个文件中定义一个多容器应用,使用docker-compose up命令来启动应用。
Compose的指令
-
build 构建或重建服务
-
help 帮助指令
-
kill 结束容器
-
logs 记录容器输出日志
-
port 打印容器绑定的端口
-
ps 列出容器列表
-
pull 从仓库拉取服务镜像
-
restart 重启
-
rm 删除已经停止的容器
-
run 运行容器
-
scale 设置服务的容器数目
-
stop 停止
-
start 开启
-
up 创建并启动容器
以上都是compose的一些基础指令,但是Docker Compose最为重要的是docker-compose.yml配置的设置。
docker-compose.yml配置文件
一份标准的配置文件由version、services、networks三部分组成,其中最关键的是services和networks。
以下介绍services的书写规则:
一、image
services: db: image: "mysql:5.7.15"
在services标签下的第二级标签db是用户给当前这个服务自定义的名字。
image是指定服务的镜像名称或者镜像ID(如果镜像在本地不存在,就会到仓库中去pull)。
二、build
services除了可以基于指定的image,还可以基于一份Dockerfile,在docker-compose up启动的时候执行构建。
services: nginx: build: /path/nginx
build就是用来指定Dockerfile所在的文件路径,这里的路径可以是绝对路径亦可是相对路径。
注:
如果同时指定了image和build两个标签,那么Compose会在构建镜像时使用iamge的名称来命名。
三、command
使用command可以覆盖容器启动后默认执行的命令。
如:
command: bundle exec thin -p 3000# 或command: [bundle,exec,thin,-p,3000]
四、container_name
container_name: app #指定容器名称
五、depends_on
一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。
为了避免这一情况,可使用depends_on。
depends_on标签是用来规定容器启动的先后顺序。
如:
version: ’2‘ services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres
以上配置中的depends_on规定的启动顺序为:db、redis、web。
六、tmpfs
挂载临时目录到容器内部,与run的参数效果一样。
tmpfs: /run tmpfs: - /run - /tmp
七、entrypoint
与Dockerfile中的ENTRYPOINT一样,在容器启动时有效。
entrypoint: /usr/sbin/nginx #启动时运行nginx
八、expose
与Dockerfile中的EXPOSE一样,用于暴露接口。
expose: - "3500" - "5000"
九、links
解决容器链接问题。
links: - db - redis
以上配置是指,当前服务将要链接数据库和redis方可正常运行。
十、ports
映射端口。
ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001"
注:
当使用HOST:CONTAINER格式来映射端口时,如果你使用的容器端口小于60你可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制。
建议采用字符串格式。
十一、volumes
挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER] 这样的格式,或者使用 [HOST:CONTAINER:ro] 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统。
volumes: # 指定一个文件目录,用来存放容器数据。 # $PWD 表示当前路径 - $PWD/data:/var/lib/mysql
以上是个人感觉相对重要的标签,其它详解。
实例
version: '2'# 指定网络模式networks: ghost:# 配置服务services: ghost-app: # 使用当前路径下ghost中的Dockerfile构建容器 build: ghost networks: - ghost # 指定当前服务依赖服务 depends_on: - db # 端口映射 ports: - "2368:2368" nginx: build: nginx networks: - ghost depends_on: - ghost-app ports: - "80:80" db: image: "mysql:5.7.15" networks: - ghost # 配置环境变量 environment: MYSQL_ROOT_PASSWORD: mysqlroot MYSQL_USER: ghost MYSQL_PASSWORD: ghost # 设置数据路径,容器销毁任然有效 volumes: - $PWD/data:/var/lib/mysql ports: - "3306:3306"