애플리케이션을 도커화하는 방법
도커란?
Docker는 애플리케이션을 쉽게 생성, 실행 및 배포하도록 설계된 오픈 소스 도구입니다. 어떻게 보면 Virtual Machine과 같지만 Virtual Machine과 달리 Docker는 전체 가상 운영 체제를 생성하는 것이 아니라 응용 프로그램이 동일한 커널을 사용할 수 있도록 합니다.
왜 도커인가?
프로젝트에 새 기능을 추가했는데 내 로컬 컴퓨터에서는 제대로 작동하지만 프로덕션 환경에서는 작동하지 않는다고 가정해 보겠습니다. 예를 들어 새 기능을 사용하여 종속성을 설치했는데 해당 종속성을 프로덕션에 설치하는 것을 잊었습니다. Docker의 목적은 이 문제를 해결하는 것입니다.
Dockerfile이란 무엇입니까?
Dockerfile은 새 도커 이미지를 빌드하기 위해 도커 환경에서 순차적으로 자동 실행되는 명령 및 지침 모음이 포함된 구성 파일입니다. 파일은 YAML 마크업 언어로 작성됩니다.
도커 이미지란?
Docker 이미지는 애플리케이션을 실행하는 데 필요한 소스 코드, 라이브러리, 종속성, 도구 및 기타 파일을 포함하는 파일입니다. 도커 이미지는 간단하고 잘 정의된 구문이 있는 a Dockerfile
라는 텍스트 파일에 설명되어 있습니다.
도커 컨테이너란?
Docker 컨테이너는 Docker 이미지의 실행 중인 인스턴스입니다.
다음 이미지를 통해 컨테이너, 이미지 및 Dockerfile을 더 잘 이해할 수 있습니다.
개발을 위해 애플리케이션을 도커화하는 방법
Laravel 및 Vuejs 애플리케이션을 도커화할 계획이라고 가정해 보겠습니다. 그렇다면 두 개의 docker 파일이 필요합니다. Vuejs 애플리케이션을 실행하기 위한 하나의 도커 파일과 Laravel 애플리케이션을 실행하기 위한 다른 도커 파일. Laravel 애플리케이션을 실행하기 위한 제 Dockerfile
입니다.
Dockerfile.dev
#choose the OS as a basae image
FROM php:7.3-fpm
#add metadata
LABEL version="1.0.0"
#install required dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
libzip-dev \
zip \
jpegoptim optipng pngquant gifsicle \
unzip \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
#specify the directory where the source code must be copied
WORKDIR /var/www
#Copy from the host machine to image
COPY composer.json composer.lock ./
COPY . .
#copy environment file
COPY ./.env.example ./.env
RUN composer install
RUN php artisan key:generate --ansi
RUN php artisan storage:link
COPY ./script/php_script.sh /tmp
RUN chmod +x /tmp/php_script.sh
ENTRYPOINT ["sh","/tmp/php_script.sh"]
#choose the port to communicate with a container
EXPOSE 8000
다음은 Vuejs를 실행하는 도커 파일입니다.
Dockerfile.node
FROM node:14.15.0
WORKDIR /var/www
COPY package.json ./
RUN npm install
COPY . .
CMD npm run watch -- --watch-poll
물론 데이터베이스용으로 또 다른 컨테이너가 필요하고 데이터베이스용으로 Dockerfile이 필요하지 않습니다. docker hub의 MySQL 이미지를 사용합니다.
단일 명령으로 위의 도커 파일을 실행하려면 docker-compose
를 사용합니다.
Docker Compose란 무엇입니까?
Docker 허브에서 이미지를 생성하고 MySQL 이미지를 생성하기 위한 두 개의 사용자 지정 Dockerfile이 있습니다. 따라서 모든 이미지를 하나씩 생성, 실행, 네트워크 및 볼륨화해야 하며 개발자로서 세 개의 이미지를 모두 하나씩 위아래로 이동하는 것은 골치 아픈 일입니다.
Docker-compose는 이 문제를 해결합니다. 간단하게 하나의 명령만 실행하면 됩니다.
Docker-compose is a simple yet powerful tool that is used to run multiple containers as a single service. For example, suppose you have an application which requires nodejs to run Vuejs, PHP to run Laravel, and mysql as a database service. In this case by docker-compose, you can create one single file (docker-compose.yml ) which will create all the containers as a single service without starting each separately.
docker-compose.yml
version: "3.8"
services:
server:
build: .
container_name: server
ports:
- "${HTTP_PORT}:8000"
volumes:
- ./:/var/www/
- /var/www/vendor
depends_on:
- mysql
links:
- mysql
mysql:
image: mysql
container_name: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
ports:
- ${MYSQL_PORT}:3306
volumes:
- ./mysql/init.sql:/data/application/init.sql
- mysql_data:/var/lib/mysql
client:
build:
context: .
dockerfile: ./Dockerfile.node
container_name: client
volumes:
- ./:/var/www/
- /var/www/node_modules
depends_on:
- "server"
volumes:
mysql_data:
docker-compose up -d를 up으로 실행하고 docker-compose down을 서비스 아래로 실행하면 됩니다.
프로덕션 환경 설정
프로덕션 환경에서는 Nodejs와 컴포저를 설치할 필요가 없습니다. 내 애플리케이션을 제공하기 위해 PHP와 Nginx 또는 Apache만 있으면 됩니다. 그러나 Vuejs 애플리케이션을 실행 및 빌드하려면 Nodejs가 필요하고 PHP 종속성을 설치하려면 작성기가 필요할 수 있습니다. 이미지 패키지 크기를 피하고 줄이기 위해. Dockermulti-stage
기능을 사용해야 합니다.
Docker 다단계란 무엇입니까?
일반적으로 각 docker 파일에는 하나의 명령문FROM
이 기본으로 포함됩니다. Multi-Stage를 사용하면 여러 개FROM
를 가질 수 있으며 각각 빌드의 새 단계를 시작합니다. 최종 이미지에 원하지 않는 모든 것을 남겨두고 한 단계에서 다른 단계로 아티팩트를 선택적으로 복사할 수 있습니다. 다음은 Dockerfile.prod
파일입니다.
#Client App
FROM node:14.15.0 as vuejs
LABEL authors="Nimat Razmjo
RUN mkdir -p /app/public
COPY package.json webpack.mix.js package-lock.json /app/
COPY resources/ /app/resources/
WORKDIR /app
RUN npm install && npm run prod
#Server Dependencies
FROM composer:2.0.8 as vendor
WORKDIR /app
COPY database/ database/
COPY composer.json composer.json
COPY composer.lock composer.lock
RUN composer install \
--ignore-platform-reqs \
--no-interaction \
--no-plugins \
--no-scripts \
--prefer-dist
#Final Image
FROM php:7.4-apache as base
#install php dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libonig-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
libzip-dev \
zip \
jpegoptim optipng pngquant gifsicle \
unzip \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
# change the document root to /var/www/html/public
RUN sed -i -e "s/html/html\/public/g" \
/etc/apache2/sites-enabled/000-default.conf
# enable apache mod_rewrite
RUN a2enmod rewrite
WORKDIR /var/www/html
COPY . /var/www/html
COPY --from=vendor /app/vendor/ /var/www/html/vendor/
COPY --from=vuejs /app/public/js/ /var/www/html/public/js/
COPY --from=vuejs /app/public/css/ /var/www/html/public/css/
COPY --from=vuejs /app/mix-manifest.json /var/www/html/mix-manifest.json
RUN pwd && ls -la
RUN php artisan key:generate --ansi && php artisan storage:link && php artisan config:cache && php artisan route:cache
# these directories need to be writable by Apache
RUN chown -R www-data:www-data /var/www/html/storage \
/var/www/html/bootstrap/cache
# copy env file for our Docker image
# COPY env.docker /var/www/html/.env
# create sqlite db structure
RUN mkdir -p storage/app \
&& touch storage/app/db.sqlite
VOLUME ["/var/www/html/storage", "/var/www/html/bootstrap/cache"]
EXPOSE 80
그리고 다음은 모든 인스턴스를 단일 서비스로 실행하기 위한 docker-compose.production.yml
파일입니다.
docker-compose.production.yml
version: "3.8"
services:
server:
build:
context: .
dockerfile: Dockerfile.prod
target: base
container_name: server
env_file:
- ./.env
depends_on:
- mysql
links:
- mysql
ports:
- 80:80
networks:
- back-tier
mysql:
image: mysql
container_name: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
ports:
- ${MYSQL_PORT}:3306
volumes:
- ./mysql/init.sql:/data/application/init.sql
- mysql_data:/var/lib/mysql
networks:
- back-tier
volumes:
mysql_data:
networks:
back-tier:
프로덕션 모드에서 응용 프로그램을 실행하려면 docker-compose -f docker-compose.production.yml up -d
를 실행하여 서비스를 시작하고 docker-compose -f docker-compose.production.yml down
를 실행하여 서비스를 종료하십시오.
소스 코드는 here에서 사용할 수 있습니다.
참고: Github에서 위의 프로젝트에 기여하고 싶다면 진심으로 환영합니다.
읽어 주셔서 감사합니다. 이 기사가 마음에 드셨다면 친구 및 동료와 공유하십시오! 또는 일반적인 피드백이 있으면 알려주세요. :)
Reference
이 문제에 관하여(애플리케이션을 도커화하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/nimatrazmjo/how-to-dockerize-your-application-4mj7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
프로젝트에 새 기능을 추가했는데 내 로컬 컴퓨터에서는 제대로 작동하지만 프로덕션 환경에서는 작동하지 않는다고 가정해 보겠습니다. 예를 들어 새 기능을 사용하여 종속성을 설치했는데 해당 종속성을 프로덕션에 설치하는 것을 잊었습니다. Docker의 목적은 이 문제를 해결하는 것입니다.
Dockerfile이란 무엇입니까?
Dockerfile은 새 도커 이미지를 빌드하기 위해 도커 환경에서 순차적으로 자동 실행되는 명령 및 지침 모음이 포함된 구성 파일입니다. 파일은 YAML 마크업 언어로 작성됩니다.
도커 이미지란?
Docker 이미지는 애플리케이션을 실행하는 데 필요한 소스 코드, 라이브러리, 종속성, 도구 및 기타 파일을 포함하는 파일입니다. 도커 이미지는 간단하고 잘 정의된 구문이 있는 a
Dockerfile
라는 텍스트 파일에 설명되어 있습니다.도커 컨테이너란?
Docker 컨테이너는 Docker 이미지의 실행 중인 인스턴스입니다.
다음 이미지를 통해 컨테이너, 이미지 및 Dockerfile을 더 잘 이해할 수 있습니다.
개발을 위해 애플리케이션을 도커화하는 방법
Laravel 및 Vuejs 애플리케이션을 도커화할 계획이라고 가정해 보겠습니다. 그렇다면 두 개의 docker 파일이 필요합니다. Vuejs 애플리케이션을 실행하기 위한 하나의 도커 파일과 Laravel 애플리케이션을 실행하기 위한 다른 도커 파일. Laravel 애플리케이션을 실행하기 위한 제 Dockerfile
입니다.
Dockerfile.dev
#choose the OS as a basae image
FROM php:7.3-fpm
#add metadata
LABEL version="1.0.0"
#install required dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
libzip-dev \
zip \
jpegoptim optipng pngquant gifsicle \
unzip \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
#specify the directory where the source code must be copied
WORKDIR /var/www
#Copy from the host machine to image
COPY composer.json composer.lock ./
COPY . .
#copy environment file
COPY ./.env.example ./.env
RUN composer install
RUN php artisan key:generate --ansi
RUN php artisan storage:link
COPY ./script/php_script.sh /tmp
RUN chmod +x /tmp/php_script.sh
ENTRYPOINT ["sh","/tmp/php_script.sh"]
#choose the port to communicate with a container
EXPOSE 8000
다음은 Vuejs를 실행하는 도커 파일입니다.
Dockerfile.node
FROM node:14.15.0
WORKDIR /var/www
COPY package.json ./
RUN npm install
COPY . .
CMD npm run watch -- --watch-poll
물론 데이터베이스용으로 또 다른 컨테이너가 필요하고 데이터베이스용으로 Dockerfile이 필요하지 않습니다. docker hub의 MySQL 이미지를 사용합니다.
단일 명령으로 위의 도커 파일을 실행하려면 docker-compose
를 사용합니다.
Docker Compose란 무엇입니까?
Docker 허브에서 이미지를 생성하고 MySQL 이미지를 생성하기 위한 두 개의 사용자 지정 Dockerfile이 있습니다. 따라서 모든 이미지를 하나씩 생성, 실행, 네트워크 및 볼륨화해야 하며 개발자로서 세 개의 이미지를 모두 하나씩 위아래로 이동하는 것은 골치 아픈 일입니다.
Docker-compose는 이 문제를 해결합니다. 간단하게 하나의 명령만 실행하면 됩니다.
Docker-compose is a simple yet powerful tool that is used to run multiple containers as a single service. For example, suppose you have an application which requires nodejs to run Vuejs, PHP to run Laravel, and mysql as a database service. In this case by docker-compose, you can create one single file (docker-compose.yml ) which will create all the containers as a single service without starting each separately.
docker-compose.yml
version: "3.8"
services:
server:
build: .
container_name: server
ports:
- "${HTTP_PORT}:8000"
volumes:
- ./:/var/www/
- /var/www/vendor
depends_on:
- mysql
links:
- mysql
mysql:
image: mysql
container_name: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
ports:
- ${MYSQL_PORT}:3306
volumes:
- ./mysql/init.sql:/data/application/init.sql
- mysql_data:/var/lib/mysql
client:
build:
context: .
dockerfile: ./Dockerfile.node
container_name: client
volumes:
- ./:/var/www/
- /var/www/node_modules
depends_on:
- "server"
volumes:
mysql_data:
docker-compose up -d를 up으로 실행하고 docker-compose down을 서비스 아래로 실행하면 됩니다.
프로덕션 환경 설정
프로덕션 환경에서는 Nodejs와 컴포저를 설치할 필요가 없습니다. 내 애플리케이션을 제공하기 위해 PHP와 Nginx 또는 Apache만 있으면 됩니다. 그러나 Vuejs 애플리케이션을 실행 및 빌드하려면 Nodejs가 필요하고 PHP 종속성을 설치하려면 작성기가 필요할 수 있습니다. 이미지 패키지 크기를 피하고 줄이기 위해. Dockermulti-stage
기능을 사용해야 합니다.
Docker 다단계란 무엇입니까?
일반적으로 각 docker 파일에는 하나의 명령문FROM
이 기본으로 포함됩니다. Multi-Stage를 사용하면 여러 개FROM
를 가질 수 있으며 각각 빌드의 새 단계를 시작합니다. 최종 이미지에 원하지 않는 모든 것을 남겨두고 한 단계에서 다른 단계로 아티팩트를 선택적으로 복사할 수 있습니다. 다음은 Dockerfile.prod
파일입니다.
#Client App
FROM node:14.15.0 as vuejs
LABEL authors="Nimat Razmjo
RUN mkdir -p /app/public
COPY package.json webpack.mix.js package-lock.json /app/
COPY resources/ /app/resources/
WORKDIR /app
RUN npm install && npm run prod
#Server Dependencies
FROM composer:2.0.8 as vendor
WORKDIR /app
COPY database/ database/
COPY composer.json composer.json
COPY composer.lock composer.lock
RUN composer install \
--ignore-platform-reqs \
--no-interaction \
--no-plugins \
--no-scripts \
--prefer-dist
#Final Image
FROM php:7.4-apache as base
#install php dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libonig-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
libzip-dev \
zip \
jpegoptim optipng pngquant gifsicle \
unzip \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
# change the document root to /var/www/html/public
RUN sed -i -e "s/html/html\/public/g" \
/etc/apache2/sites-enabled/000-default.conf
# enable apache mod_rewrite
RUN a2enmod rewrite
WORKDIR /var/www/html
COPY . /var/www/html
COPY --from=vendor /app/vendor/ /var/www/html/vendor/
COPY --from=vuejs /app/public/js/ /var/www/html/public/js/
COPY --from=vuejs /app/public/css/ /var/www/html/public/css/
COPY --from=vuejs /app/mix-manifest.json /var/www/html/mix-manifest.json
RUN pwd && ls -la
RUN php artisan key:generate --ansi && php artisan storage:link && php artisan config:cache && php artisan route:cache
# these directories need to be writable by Apache
RUN chown -R www-data:www-data /var/www/html/storage \
/var/www/html/bootstrap/cache
# copy env file for our Docker image
# COPY env.docker /var/www/html/.env
# create sqlite db structure
RUN mkdir -p storage/app \
&& touch storage/app/db.sqlite
VOLUME ["/var/www/html/storage", "/var/www/html/bootstrap/cache"]
EXPOSE 80
그리고 다음은 모든 인스턴스를 단일 서비스로 실행하기 위한 docker-compose.production.yml
파일입니다.
docker-compose.production.yml
version: "3.8"
services:
server:
build:
context: .
dockerfile: Dockerfile.prod
target: base
container_name: server
env_file:
- ./.env
depends_on:
- mysql
links:
- mysql
ports:
- 80:80
networks:
- back-tier
mysql:
image: mysql
container_name: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
ports:
- ${MYSQL_PORT}:3306
volumes:
- ./mysql/init.sql:/data/application/init.sql
- mysql_data:/var/lib/mysql
networks:
- back-tier
volumes:
mysql_data:
networks:
back-tier:
프로덕션 모드에서 응용 프로그램을 실행하려면 docker-compose -f docker-compose.production.yml up -d
를 실행하여 서비스를 시작하고 docker-compose -f docker-compose.production.yml down
를 실행하여 서비스를 종료하십시오.
소스 코드는 here에서 사용할 수 있습니다.
참고: Github에서 위의 프로젝트에 기여하고 싶다면 진심으로 환영합니다.
읽어 주셔서 감사합니다. 이 기사가 마음에 드셨다면 친구 및 동료와 공유하십시오! 또는 일반적인 피드백이 있으면 알려주세요. :)
Reference
이 문제에 관하여(애플리케이션을 도커화하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/nimatrazmjo/how-to-dockerize-your-application-4mj7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#choose the OS as a basae image
FROM php:7.3-fpm
#add metadata
LABEL version="1.0.0"
#install required dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
libzip-dev \
zip \
jpegoptim optipng pngquant gifsicle \
unzip \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
#specify the directory where the source code must be copied
WORKDIR /var/www
#Copy from the host machine to image
COPY composer.json composer.lock ./
COPY . .
#copy environment file
COPY ./.env.example ./.env
RUN composer install
RUN php artisan key:generate --ansi
RUN php artisan storage:link
COPY ./script/php_script.sh /tmp
RUN chmod +x /tmp/php_script.sh
ENTRYPOINT ["sh","/tmp/php_script.sh"]
#choose the port to communicate with a container
EXPOSE 8000
FROM node:14.15.0
WORKDIR /var/www
COPY package.json ./
RUN npm install
COPY . .
CMD npm run watch -- --watch-poll
Docker-compose is a simple yet powerful tool that is used to run multiple containers as a single service. For example, suppose you have an application which requires nodejs to run Vuejs, PHP to run Laravel, and mysql as a database service. In this case by docker-compose, you can create one single file (docker-compose.yml ) which will create all the containers as a single service without starting each separately.
version: "3.8"
services:
server:
build: .
container_name: server
ports:
- "${HTTP_PORT}:8000"
volumes:
- ./:/var/www/
- /var/www/vendor
depends_on:
- mysql
links:
- mysql
mysql:
image: mysql
container_name: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
ports:
- ${MYSQL_PORT}:3306
volumes:
- ./mysql/init.sql:/data/application/init.sql
- mysql_data:/var/lib/mysql
client:
build:
context: .
dockerfile: ./Dockerfile.node
container_name: client
volumes:
- ./:/var/www/
- /var/www/node_modules
depends_on:
- "server"
volumes:
mysql_data:
#Client App
FROM node:14.15.0 as vuejs
LABEL authors="Nimat Razmjo
RUN mkdir -p /app/public
COPY package.json webpack.mix.js package-lock.json /app/
COPY resources/ /app/resources/
WORKDIR /app
RUN npm install && npm run prod
#Server Dependencies
FROM composer:2.0.8 as vendor
WORKDIR /app
COPY database/ database/
COPY composer.json composer.json
COPY composer.lock composer.lock
RUN composer install \
--ignore-platform-reqs \
--no-interaction \
--no-plugins \
--no-scripts \
--prefer-dist
#Final Image
FROM php:7.4-apache as base
#install php dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libonig-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
libzip-dev \
zip \
jpegoptim optipng pngquant gifsicle \
unzip \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
# change the document root to /var/www/html/public
RUN sed -i -e "s/html/html\/public/g" \
/etc/apache2/sites-enabled/000-default.conf
# enable apache mod_rewrite
RUN a2enmod rewrite
WORKDIR /var/www/html
COPY . /var/www/html
COPY --from=vendor /app/vendor/ /var/www/html/vendor/
COPY --from=vuejs /app/public/js/ /var/www/html/public/js/
COPY --from=vuejs /app/public/css/ /var/www/html/public/css/
COPY --from=vuejs /app/mix-manifest.json /var/www/html/mix-manifest.json
RUN pwd && ls -la
RUN php artisan key:generate --ansi && php artisan storage:link && php artisan config:cache && php artisan route:cache
# these directories need to be writable by Apache
RUN chown -R www-data:www-data /var/www/html/storage \
/var/www/html/bootstrap/cache
# copy env file for our Docker image
# COPY env.docker /var/www/html/.env
# create sqlite db structure
RUN mkdir -p storage/app \
&& touch storage/app/db.sqlite
VOLUME ["/var/www/html/storage", "/var/www/html/bootstrap/cache"]
EXPOSE 80
version: "3.8"
services:
server:
build:
context: .
dockerfile: Dockerfile.prod
target: base
container_name: server
env_file:
- ./.env
depends_on:
- mysql
links:
- mysql
ports:
- 80:80
networks:
- back-tier
mysql:
image: mysql
container_name: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
ports:
- ${MYSQL_PORT}:3306
volumes:
- ./mysql/init.sql:/data/application/init.sql
- mysql_data:/var/lib/mysql
networks:
- back-tier
volumes:
mysql_data:
networks:
back-tier:
Reference
이 문제에 관하여(애플리케이션을 도커화하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nimatrazmjo/how-to-dockerize-your-application-4mj7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)