docker compose


cp  /etc/docker/daemon.json  /etc/docker/daemon.json.bak
echo { "registry-mirrors" : [ "https://dockerhub.timeweb.cloud" ] } > /etc/docker/daemon.json
systemctl reload docker

#
docker pull dockerhub.timeweb.cloud/library/alpine:latest

 

sudo apt-get remove docker-compose
# If installed via curl
sudo rm /usr/local/bin/docker-compose
# If installed via pip
pip uninstall docker-compose
# curl + grep
VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*\d')
# curl + jq
VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)
# Finally, download to your favorite $PATH-accessible location and set permissions:
DESTINATION=/usr/local/bin/docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m) -o $DESTINATION
sudo chmod 755 $DESTINATION

https://composerize.com/

https://docs.docker.com/compose/compose-file/

ОФФ гайд по установке последнего докера

 

 

sudo apt install docker-compose

Hello world

cat <<EOT >.env
NODE_ENV=test
EOT

cat <<EOT > docker-compose.yml
version: '3'
services:
  api:
    image: 'alpine:latest'
    env_file:
     - .env
    command: 'printenv'
EOT
docker-compose up

 

типичный сервис 

https://github.com/PHPtoday-ru/docker-local-conf.git

mkdir images images/php www www/site1 hosts

cat <<EOT>docker-compose.yml
version: '2'
services:
    nginx:
        image: nginx:latest
        ports:
            - "8001:80"
            - "443:443"
        volumes:
            - ./hosts:/etc/nginx/conf.d
            - ./www:/var/www
            - ./logs:/var/log/nginx
        links:
            - php
    php:
        build: ./images/php
        links:
            - mysql
        volumes:
            - ./www:/var/www
    mysql:
        image: mysql:8
        ports:
            - "13306:3306"
        volumes:
            - ./mysql:/var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: secret
    redis:
        image: redis
        command: ["sh", "-c", "exec redis-server --requirepass \"\${REDIS_PASSWORD}\""]
        ports:
          - "16379:6379"            
EOT



cat <<EOT> images/php/Dockerfile
FROM php:7.1-fpm-jessie
RUN apt-get update && apt-get install -y \
        curl \
        wget \
        git \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
    && docker-php-ext-install -j$(nproc) iconv mcrypt mbstring mysqli pdo_mysql zip \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ADD php.ini /usr/local/etc/php/conf.d/40-custom.ini
WORKDIR /var/www
CMD ["php-fpm"]
EOT

cat <<EOT> ./images/php/php.ini
display_errors = 1
EOT

cat <<EOT> hosts/site1.conf
server {
    index index.php;
    server_name site1;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/site1;

    location ~ \.php$ {
        try_files \$uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
        fastcgi_param PATH_INFO \$fastcgi_path_info;
    }
}
EOT

cat <<EOT> www/site1/index.php
<?php
phpinfo();
EOT

cat <<EOT> .env
REDIS_PASSWORD=eustatos
EOT

 

# build сервисов
docker-compose up 

 

 

# alpine php
FROM alpine:latest 
RUN apk add --no-cache php7 php7-fpm php7-amqp php7-mbstring php7-mysqli php7-pdo_mysql php7-zip php7-gd
RUN addgroup -S www-data && adduser -S www-data -G www-data 
RUN sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php7/php-fpm.conf \
    && sed -i -e "s/listen\s*=\s*127.0.0.1:9000/listen = [::]:9000/g" /etc/php7/php-fpm.d/www.conf \
    && sed -i -e "s/user\s*=\s*nobody/user = www-data/g" /etc/php7/php-fpm.d/www.conf \
    && sed -i -e "s/group\s*=\s*nobody/group = www-data/g" /etc/php7/php-fpm.d/www.conf \
    && sed -i -e "s/;clear_env\s*=\s*no/clear_env = no/g" /etc/php7/php-fpm.d/www.conf \
    && sed -i -e "s/;catch_workers_output\s*=\s*yes/catch_workers_output = yes/g" /etc/php7/php-fpm.d/www.conf 
ADD php.ini /etc/php7/conf.d/40-custom.ini
CMD ["php-fpm7"]