Docker入门系列--Docker-Compose模板命令

十一、Docker入门系列--Docker-Compose模板命令

一、Docker入门系列--Docker 简介二、Docker入门系列--Docker安装
三、Docker入门系列--Docker常用命令
四、Docker入门系列--Docker镜像
五、Docker入门系列--Docker容器数据卷
六、Docker入门系列--DockerFlie解析
七、Docker入门系列--使用DockerFlie自定义Tomcat镜像
八、Docker入门系列--Docker常用安装
九、Docker入门系列--本地镜像发布到阿里云
十、Docker入门系列--Docker-Compose简介和安装
十一、Docker入门系列--Docker-Compose模板命令
十二、Docker入门系列--Docker-Compose常用命令
十三、Docker入门系列--Portainer可视化Docker
十四、Docker入门系列--Docker搭建部署SpringCloud微服务项目Demo


docker-compose.yml文件模版介绍

模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。

version: "3"

services:
  webapp:
    image: mysql
    ports:
      - "80:80"
    volumes:
      - "/data"

YAML文件中的image代表使用Docker仓库中已经存在的镜像,我们之前使用都需要先构建一个镜像,然后在文件里面指定这个镜像才可以运行。

这样比较麻烦,有一个命令比较方便

Build

表示:通过Docker-compose在启动容器之前根据dockerfile构建镜像,然后根据镜像启动容器

version: '3'
services:

  webapp:
    build: ./dir

使用 context 指令指定 Dockerfile 所在文件夹的路径

使用 dockerfile 指令指定 Dockerfile 文件名,如果不指定文件名默认就是寻找Dockerfile

command

覆盖容器启动后默认执行的命令

command: echo "hello world"

container_name

指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式

container_name: mysqltest

不推荐使用

depends_on

解决容器的依赖、启动先后的问题。以下例子中会先启动 mysql再启动 tomcat

version: '3'

services:
  web:
    build: ./
    depends_on:
      - mysql
      - tomcat

  tomcat:
    image: tomcat01

  mysql:
    image: mysql01

web服务会等待mysql、tomcat服务启动的差不多了再启动,不会等到被依赖服务完全启动再启动

environment

设置环境变量。可以使用数组或字典两种格式

env_file

跟environment作用类似,也是设置环境变量,不过这个是指定文件的形式

env_file: .env

env_file:
  - ./common.env  #文件的路径
  - ./apps/web.env
  - /opt/secrets.env

相比environment把环境比阿里直接写在yaml中安全一点

expose

暴露端口

本来在Dockerfile中暴露端口,这个命令意思可以不用在Dockerfile中填写端口,一般不用

image

指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像,相当于docker run images(镜像名)

networks

用来指定启动的容器使用的网桥(网络),相当于docker run --network

Docker Yapi 部署 docker-compose.yaml_redis

每个容器指定同一个网桥,那么只要进入一个容器的内部,使用另外一个容器的ip就可以访问到

docker network ls #查看Docker中的网桥

查看网桥的详细信息

Docker Yapi 部署 docker-compose.yaml_Docker_02

ports

暴露宿主端口:容器端口的信息,相当于docker run -p

volumes

暴露宿主路径:容器路径的信息,相当于docker run -v

restart

指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,在生产环境中推荐配置为 always 或者 unless-stopped

相当于docker run --restart=always

总结

掌握以上命令之后,如果需要在文件中跑一个es服务,自己写命令可能一点头绪都没有,可以按照这种运行命令改编

docker run -p 6379:6379 -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf  -d redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes

改编之后YAML文件

redis:
   image: redis:5.6
   ports: 
    -3306:3306
   volumes: 
    - /mydata/redis/data:/data
    - /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
   environment:
    - /usr/local/etc/redis/redis.conf --appendonly yes