[学习实践]利用docker把环境放到项目中

389 阅读2分钟

前言

基于上次的[边看边实践]-用docker搭建开发环境实践引出一个疑问。如果只是偶尔需要用到的环境,能不能不安装到开发环境中而直接放到项目里呢?

本文以一个自己没封装好的工具为例,在做这个工具的时候是先有了nodejsali-oss做的bucket工具,然后发现竟然不支持域名绑定,所以又用phposs-sdk-php写了绑定域名的功能,如果要把这个工具给其他人用需要安装nodejsphp环境显得有点麻烦了(当然直接重写一个统一的就好了)。所以我给这个项目添加了Dockerfiledevcontainer.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 image.png

镜像构建完,容器启动之后,会根据devcontainer.json中的postCreateCommand配置继续执行npm install && composer install && cat README.md

image.png

这一切都运行完之后,再开启一个新的命令行窗口,就可以使用了

image.png

后记

写完了自己都觉得太麻烦了,就当是为了练习而练习吧