为了账号安全,请及时绑定邮箱和手机立即绑定

用于 nginx、php、mysql、golang 的 Docker-compose

用于 nginx、php、mysql、golang 的 Docker-compose

Go
莫回无 2022-05-23 18:07:04
服务器现在正在使用此配置。version: '3'services:    nginx:        image: nginx:latest        ports:            - "80:80"            - "443:443"        volumes:            - ./www:/var/www        depends_on:            - php    php:        build: ./docker/images/php        volumes:            - ./www:/var/www    mysql:        image: mysql               ports:            - "3306:3306"        volumes:            - ./docker/mysql:/var/lib/mysql            - ./docker/import:/docker-entrypoint-initdb.d        environment:            MYSQL_USER: ${MYSQL_USER}            MYSQL_PASSWORD: ${MYSQL_PASSWORD}            MYSQL_DATABASE: ${MYSQL_DATABASE}            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}用于 php 映像的 Dockerfile# Main imageFROM php:7.3-fpm# Update and install modules for php and otherRUN apt-get update && apt-get install -y \              libfreetype6-dev \        libjpeg62-turbo-dev \        libpng-dev \    && apt-get install -y wget zip unzip git \    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \    && docker-php-ext-install -j$(nproc) gd pdo mysqli pdo_mysql \    && docker-php-ext-enable mysqli# Workdir for phpWORKDIR /var/www# Run containerCMD ["php-fpm"]我想将golang容器添加到此配置中,以便我可以golang从cron.问题是:做这个的最好方式是什么?如何将其专门添加到docker-compose/Dockerfile并从中运行cron?
查看完整描述

1 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

== 选项 1:添加docker-compose到crontab==

* * * * * cd <project dir>/docker-compose && command docker-compose -f docker-compose.yml run --rm -T -w /go/bin <go_app_container> <go_app_name>

== 选项 2:使用cron-docker==

这是在 Docker 容器内运行 cron 的 Docker 映像


Debian-基于:Dockerfile,start-cron


Alpine-基于:Dockerfile,start-cron


添加 cron 作业 cron-docker

假设您有cron.d包含 cron 脚本的文件夹。您唯一需要做的就是将此文件夹复制到 Docker 映像中:


# Dockerfile


FROM renskiy/cron:debian


COPY cron.d /etc/cron.d

然后构建并创建容器:


docker build --tag my_cron .

docker run --detach --name cron my_cron

查看日志

要查看日志,请使用 Docker logs命令:


docker logs --follow cron

您所有的 cron 脚本都应该将日志写入/var/log/cron.log. 否则您将无法使用这种方式查看任何日志。


通过参数传递 cron 作业

start-cron此外,您可以在创建容器时使用自定义命令通过参数传递任何 cron 作业(为可选用户提供-u/--user选项):


docker run --detach --name cron renskiy/cron:debian start-cron --user www-data \

    "0 1 \\* \\* \\* echo '01:00 AM' &gt;&gt; /var/log/cron.log 2&gt;&1" \

    "0 0 1 1 \\* echo 'Happy New Year!!' &gt;&gt; /var/log/cron.log 2&gt;&1"

环境变量

您传递给 Docker 的几乎所有环境变量都将对您的 cron 脚本可见。$SHELL, $PATH, $PWD,$USER等除外。


docker run --tty --rm --interactive --env MY_VAR=foo renskiy/cron:debian start-cron \

    "\\* \\* \\* \\* \\* env &gt;&gt; /var/log/cron.log 2&gt;&1"

== 选项 3:cron-docker与docker-compose==一起使用

对于您的情况:


version: '3'

services:

    nginx:

        image: nginx:latest

        ports:

            - "80:80"

            - "443:443"

        volumes:

            - ./www:/var/www

        depends_on:

            - php

    php:

        build: ./docker/images/php

        volumes:

            - ./www:/var/www

    mysql:

        image: mysql       

        ports:

            - "3306:3306"

        volumes:

            - ./docker/mysql:/var/lib/mysql

            - ./docker/import:/docker-entrypoint-initdb.d

        environment:

            MYSQL_USER: ${MYSQL_USER}

            MYSQL_PASSWORD: ${MYSQL_PASSWORD}

            MYSQL_DATABASE: ${MYSQL_DATABASE}

            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

    cron_go_app:

      image: renskiy/cron:alpine

      volumes:

        - crontabs:/etc/crontabs

        - my_go_app:/app/my_go_app

      run: start-cron


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信