Dockerfile: 参考文件像别名而不是 Docker ADD?
Dockerfile: reference file like an alias instead of Docker ADD?
我的项目结构如下:
项目
- app(包含我的应用程序代码的目录)
- images(包含 docker 个预构建图像的目录)
- Docker 文件
- docker-compose.yml
- 其他文件
当我 运行 docker-compose up -d
我希望我的 backend
容器将主机 app
文件夹镜像到容器 /var/www/app
所以我在应用程序直接反映在 docker 容器中,因此使我的开发变得容易。
目前我在 Dockerfile
中使用它
FROM backend
ADD ./app /var/www/app/
EXPOSE 8000
这基本上是复制文件,但我需要为每次更改重建:((
我创建了卷 APP_DATA_DIR=/var/www/app/public/data
来保存用户数据,但这将仅供生产使用。
对于开发,是否可以使用“ALIAS”(引用文件而不是复制)而不是 ADD?
docker-组成是
version: "3"
services:
backend:
container_name: backend
image: serverBuild
restart: always
build: ./
env_file: .env
volumes:
- "app_data:${APP_DATA_DIR}"
ports:
- "8000:8000"
depends_on:
- mariadb
networks:
- app_network
mariadb:
container_name: mariadb
image: "mariadb:${MARIADB_VERSION}"
restart: 'always'
env_file: .env
volumes:
- "${SQL_INIT}:/docker-entrypoint-initdb.d"
- "db_data:${MARIADB_DATA_DIR}"
- "db_logs:${MARIADB_LOG_DIR}"
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
ports:
- "3306:3306"
networks:
- app_network
volumes:
app_data:
db_data:
db_logs:
networks:
app_network:
.env
MARIADB_VERSION=latest
APP_DATA_DIR=/var/www/app/public/data
MARIADB_DATA_DIR=/var/lib/mysql
MARIADB_LOG_DIR=/var/logs/mysql
MYSQL_DATABASE=app
MYSQL_USER=app
MYSQL_PASSWORD=password
MYSQL_ROOT_PASSWORD=password
SQL_INIT=./database/dev
您可以简单地在服务内的 docker-compose.yml
中声明一个卷,这是您已经在使用的概念。只需做 ./app:/var/www/app/
我还想建议您在复制文件时使用COPY
instead of ADD
。
我不知道你说 For development is it possible to ALIAS instead of ADD ?
是什么意思,所以除非你澄清这一点,否则我无法帮助你,但这应该是你想要的。
我的项目结构如下:
项目
- app(包含我的应用程序代码的目录)
- images(包含 docker 个预构建图像的目录)
- Docker 文件
- docker-compose.yml
- 其他文件
当我 运行 docker-compose up -d
我希望我的 backend
容器将主机 app
文件夹镜像到容器 /var/www/app
所以我在应用程序直接反映在 docker 容器中,因此使我的开发变得容易。
目前我在 Dockerfile
FROM backend
ADD ./app /var/www/app/
EXPOSE 8000
这基本上是复制文件,但我需要为每次更改重建:((
我创建了卷 APP_DATA_DIR=/var/www/app/public/data
来保存用户数据,但这将仅供生产使用。
对于开发,是否可以使用“ALIAS”(引用文件而不是复制)而不是 ADD?
docker-组成是
version: "3"
services:
backend:
container_name: backend
image: serverBuild
restart: always
build: ./
env_file: .env
volumes:
- "app_data:${APP_DATA_DIR}"
ports:
- "8000:8000"
depends_on:
- mariadb
networks:
- app_network
mariadb:
container_name: mariadb
image: "mariadb:${MARIADB_VERSION}"
restart: 'always'
env_file: .env
volumes:
- "${SQL_INIT}:/docker-entrypoint-initdb.d"
- "db_data:${MARIADB_DATA_DIR}"
- "db_logs:${MARIADB_LOG_DIR}"
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
ports:
- "3306:3306"
networks:
- app_network
volumes:
app_data:
db_data:
db_logs:
networks:
app_network:
.env
MARIADB_VERSION=latest
APP_DATA_DIR=/var/www/app/public/data
MARIADB_DATA_DIR=/var/lib/mysql
MARIADB_LOG_DIR=/var/logs/mysql
MYSQL_DATABASE=app
MYSQL_USER=app
MYSQL_PASSWORD=password
MYSQL_ROOT_PASSWORD=password
SQL_INIT=./database/dev
您可以简单地在服务内的 docker-compose.yml
中声明一个卷,这是您已经在使用的概念。只需做 ./app:/var/www/app/
我还想建议您在复制文件时使用COPY
instead of ADD
。
我不知道你说 For development is it possible to ALIAS instead of ADD ?
是什么意思,所以除非你澄清这一点,否则我无法帮助你,但这应该是你想要的。