多容器应用实例

多容器应用实例

services:
    app:
        #getstart:net-mysql是根据docker文档中的一个例子自己重新构建的镜像,因为这个镜像总是需要很多的依赖,每次运行都因为各种原因卡住不动,所以我在一次成功运行后,用docker commit提交了一个新版本镜像。虽然这个镜像比官方的大很多,不过不会出现每次都因为解决依赖问题等几个小时。
        image: getstart:net-mysql
        command: sh -c "yarn install && yarn run dev"
        ports:
            - 3000:3000
        working_dir: /app
        volumes:
            - ./:/app
#这里的“-”表示这个值是个数组,也就是这里可以写多行,每行都以“-”开头。
        environment:
            MYSQL_HOST: mysql
            MYSQL_USER: root
            MYSQL_PASSWORD: secret
            MYSQL_DB: todos
        depends_on:
            mysql:
                condition: service_healthy
#如上面解释“-”一样,这里也可以是字典(键-值对),mysql就是“键”,而“condition: service_healthy”就是“值”,这里也可以写成上面的数组形式,不过就没办法写condition了。这里的意思是“该镜像的启动依赖于mysql镜像启动的健康检查是否成功,在其成功后启动该镜像”
    mysql:
        image: mysql:8.0
        volumes:
            - todo-mysql-data:/var/lib/mysql
        healthcheck:
#这里是健康检查,test周期执行命令“mysqladmin ping -h localhost”,执行成功了,healthcheck就代表成功了,上面condition的条件就达成了。
            test: ["CMD","mysqladmin","ping","-h","localhost"]
            interval: 10s
            timeout: 5s
            retries: 3
        environment:
            MYSQL_ROOT_PASSWORD: secret
            MYSQL_DATABASE: todos

volumes:
    todo-mysql-data:
      external: true

PS1:该格式的缩进很重要,我起初以为volumes是mysql镜像里面的成员,结果用了缩进,后来排查了很久才发现volumes是顶级缩进和services是同一级别。其它缩进也是一样,弄错了docker compose就读不出来。

PS2:还有一个就是docker compose是有两个版本的,一个是docker-compose工具,还有一个是”docker compose”命令,compose工具是要单独安装的,他们的功能差不多,但是也有略微不同(网上是这么说的,我没研究有什么不同,也没去安装),而docker compose命令是docker的子命令。在启动compose文件时,要使用docker compose -f xxxx.yml up -d。相应的还有docker compose -f xxxx.yml down、docker compose -f xxxx.yml logs、docker compose -f xxxx.yml ps等等。

Comments are closed.