创建Dockerfile 文件
什么是dockerfile他就是一个配置文件,定义了使用什么容器,将什么文件放入docker 中的什么位置 ,定义了向外部暴漏了哪个端口
简单
FROM nginx #基于Nginx官方镜像
COPY dist/ /usr/share/nginx/html/ #将文件拷贝至指定容器位置
EXPOSE 80 #容器对外暴露接口 注意真实端口映射还需要在创建容器时定义
CMD ["nginx","-g","daemon off;"]
复杂
# dokcerfile
# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm config set registry https://registry.npm.taobao.org/
RUN npm install -g npm@latest
RUN npm install
COPY . .
RUN npm run build
# production stafe
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx","-g","Daemon off;"]
- FROM node:lts-alpine as build-stage 基于node lst-alpine 版本镜像 并通过构建阶段命名 为build-stage
- WORKDIR /app 将工作区设为app与其他系统文件隔离
- COPY package*.json ./ 将package.json 与package-lock.json 到/app目录
- RUN npm install 运行npm install 在容器中安装依赖
- COPY . . 拷贝其他文件到 /app 分两次拷贝是因为要保持node_modules一致
- RUN npm run build :运行npm run build
将构建分为两个阶段,第一阶段基于node镜像,第二阶段基于Nginx 镜像
- FROM nginx:stable-alpine as production-stage 基于nginx stable-alpine 版本镜像 并将有nginx 的环境阶段命名为productuion-stage
- COPY --from=build-stage /app/dist /usr/share/nginx/html 通过–from 参数可以引用build-stage 阶段生成的产物,并将其复制到 /usr/share/nginx/html
- EXPOSE 80: 容器对外暴漏80端口
- CMD [“nginx” ,“-g”,“daemon off”] 容器创建时运行 nginx -g daemon off 命令 一旦COM对映命令结束 容器就会被销毁 所以通过daemon off rang Nginx 一直在前台运行
.gitignore与dockerignore
两者类似都是创建需要忽略的文件
# .dockerignore
node_modules
# .gitignore
node_modules
创建Docker 镜像
docker build . -t dokcerImage:last
- docker build 创建Docker镜像
- . 使用当前目录下的Dockerfile文件
- -t 使用tag 标记版本
- dockerImage:last 创建名为dockerImage的镜像,并标记为last(最新)版本
创建Docker 容器
docker run -d -p 80:80 --name dockerContainer dockerImage:last
- docker run :创建并运行docker容器
- -d 后台运行
- 80:80 将当前服务的80端口(冒号前的80),映射到容器的80端口(冒号后的80)
- –name 给容器命名,便于之后定位容器
- dockerImage:last 基于dockerImage 最新版本镜像创建的容器