前言
基于上次的[边看边实践]-用docker搭建开发环境实践引出一个疑问。如果只是偶尔需要用到的环境,能不能不安装到开发环境中而直接放到项目里呢?
本文以一个自己没封装好的工具为例,在做这个工具的时候是先有了nodejs的ali-oss做的bucket工具,然后发现竟然不支持域名绑定,所以又用php的oss-sdk-php写了绑定域名的功能,如果要把这个工具给其他人用需要安装nodejs和php环境显得有点麻烦了(当然直接重写一个统一的就好了)。所以我给这个项目添加了Dockerfile和devcontainer.json来安装环境,用remote-containers构建镜像启动容器之后,在容器中使用命令行来操作。
安装
克隆项目到本地
使用remote-containers打开项目
Dockerfile只负责环境的安装,不参与依赖安装,文件内容如下
FROM php:7.1-fpm-alpine
RUN apk update && apk add curl && \
curl -sS https://getcomposer.org/installer | php \
&& chmod +x composer.phar && mv composer.phar /usr/local/bin/composer
RUN apk add nodejs && node -v
RUN apk add npm && npm -v
RUN npm set registry https://registry.npm.taobao.org
vscode会根据devcontainer.json的配置,进行镜像的构建,devcontainer.json配置如下
{
"name": "Existing Dockerfile",
// 设置工作区的目录,这里直接指定上一级目录也就是项目根目录作为工作区
"context": "..",
// 设置dockerfile的位置
"dockerFile": "../Dockerfile",
// Set *default* container specific settings.json values on container create.
"settings": {
"terminal.integrated.shell.linux": null
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [],
// 安装依赖的操作放到这里
"postCreateCommand": "npm install && composer install && cat README.md"
}
在vscode中打开项目,ctrl+shift+p执行remote-containers: open folder in container
镜像构建完,容器启动之后,会根据devcontainer.json中的postCreateCommand配置继续执行npm install && composer install && cat README.md
这一切都运行完之后,再开启一个新的命令行窗口,就可以使用了
后记
写完了自己都觉得太麻烦了,就当是为了练习而练习吧