فهرست منبع

Merge pull request #38 from moritzheiber/docker

Workable Docker container definitions and docker-compose runtime
daniel 7 سال پیش
والد
کامیت
4f2f6db200
3فایلهای تغییر یافته به همراه67 افزوده شده و 27 حذف شده
  1. 1 0
      .dockerignore
  2. 26 12
      Dockerfile
  3. 40 15
      docker-compose.yml

+ 1 - 0
.dockerignore

@@ -1,6 +1,7 @@
 storage
 storage
 data
 data
 Dockerfile
 Dockerfile
+docker-compose*.yml
 .dockerignore
 .dockerignore
 .git
 .git
 .gitignore
 .gitignore

+ 26 - 12
Dockerfile

@@ -1,17 +1,31 @@
-FROM php:7.2-fpm-alpine
+FROM php:7.2.6-fpm-alpine
 
 
-RUN apk add --no-cache git imagemagick \
-    && apk add --no-cache --virtual .build build-base autoconf imagemagick-dev libtool \
-    && docker-php-ext-install pdo_mysql pcntl \
-    && pecl install imagick \
-    && docker-php-ext-enable imagick \
-    && apk del --purge .build
+ARG COMPOSER_VERSION="1.6.5"
+ARG COMPOSER_CHECKSUM="67bebe9df9866a795078bb2cf21798d8b0214f2e0b2fd81f2e907a8ef0be3434"
 
 
-RUN curl -sS https://getcomposer.org/installer | php \
-    && mv composer.phar /usr/local/bin/ \
-    && ln -s /usr/local/bin/composer.phar /usr/local/bin/composer
+RUN apk add --no-cache --virtual .build build-base autoconf imagemagick-dev libtool && \
+  apk --no-cache add imagemagick git && \
+  docker-php-ext-install pdo_mysql pcntl && \
+  pecl install imagick && \
+  docker-php-ext-enable imagick pcntl imagick && \
+  curl -LsS https://getcomposer.org/download/${COMPOSER_VERSION}/composer.phar -o /tmp/composer.phar && \
+  echo "${COMPOSER_CHECKSUM}  /tmp/composer.phar" | sha256sum -c - && \
+  install -m0755 -o root -g root /tmp/composer.phar /usr/bin/composer.phar && \
+  ln -sf /usr/bin/composer.phar /usr/bin/composer && \
+  rm /tmp/composer.phar && \
+  apk --no-cache del --purge .build
+
+COPY . /var/www/html/
 
 
 WORKDIR /var/www/html
 WORKDIR /var/www/html
-COPY . .
-RUN composer install --prefer-source --no-interaction
+RUN install -d -m0755 -o www-data -g www-data \
+    /var/www/html/storage \
+    /var/www/html/storage/framework \
+    /var/www/html/storage/logs \
+    /var/www/html/storage/framework/sessions \
+    /var/www/html/storage/framework/views \
+    /var/www/html/storage/framework/cache && \
+  composer install --prefer-source --no-interaction
+
+VOLUME ["/var/www/html"]
 ENV PATH="~/.composer/vendor/bin:./vendor/bin:${PATH}"
 ENV PATH="~/.composer/vendor/bin:./vendor/bin:${PATH}"

+ 40 - 15
docker-compose.yml

@@ -3,37 +3,62 @@ version: '3'
 services:
 services:
   nginx:
   nginx:
     image: nginx:alpine
     image: nginx:alpine
+    networks:
+      - internal
+      - external
     ports:
     ports:
-    - 3000:80
+      - 3000:80
     volumes:
     volumes:
-    - .:/var/www/html
-    - ./contrib/nginx.conf:/etc/nginx/conf.d/default.conf
+      - "php-storage:/var/www/html"
+      - ./contrib/nginx.conf:/etc/nginx/conf.d/default.conf
     depends_on:
     depends_on:
-    - php
+      - php
+
   php:
   php:
     build: .
     build: .
+    image: pixelfed
     volumes:
     volumes:
-    - ./storage:/var/www/html/storage
-    depends_on:
-    - mysql
-    - redis
+      - "php-storage:/var/www/html"
+    networks:
+      - internal
     environment:
     environment:
       - DB_HOST=mysql
       - DB_HOST=mysql
       - DB_DATABASE=pixelfed
       - DB_DATABASE=pixelfed
-      - DB_USERNAME=${DB_USERNAME}
-      - DB_PASSWORD=${DB_PASSWORD}
+      - DB_USERNAME=${DB_USERNAME:-pixelfed}
+      - DB_PASSWORD=${DB_PASSWORD:-pixelfed}
       - REDIS_HOST=redis
       - REDIS_HOST=redis
       - APP_KEY=${APP_KEY}
       - APP_KEY=${APP_KEY}
+    env_file:
+      - ./.env
+
   mysql:
   mysql:
     image: mysql:5.7
     image: mysql:5.7
+    networks:
+      - internal
     environment:
     environment:
       - MYSQL_DATABASE=pixelfed
       - MYSQL_DATABASE=pixelfed
-      - MYSQL_USER=${DB_USERNAME}
-      - MYSQL_PASSWORD=${DB_PASSWORD}
+      - MYSQL_USER=${DB_USERNAME:-pixelfed}
+      - MYSQL_PASSWORD=${DB_PASSWORD:-pixelfed}
+      - MYSQL_RANDOM_ROOT_PASSWORD="true"
+    env_file:
+      - ./.env
     volumes:
     volumes:
-    - ./docker-volumes/mysql:/var/lib/mysql
+      - "mysql-data:/var/lib/mysql"
+
   redis:
   redis:
     image: redis:alpine
     image: redis:alpine
     volumes:
     volumes:
-    - ./docker-volumes/redis:/data
-...
+      - "redis-data:/data"
+    networks:
+      - internal
+
+volumes:
+  redis-data:
+  mysql-data:
+  php-storage:
+
+networks:
+  internal:
+    internal: true
+  external:
+    driver: bridge