开发必备利器
何为docker?移步阮一峰老师的文章Docker 入门教程,看完就会有一个初步的了解。说简单点其实就是独立的,隔离的容器环境,用来部署各种杂七杂八的应用,互不干扰。极大方便了因各种环境差异而带来的例如项目跑不动,浪费时间去配置各种复杂的环境变量的情况
本文仅对前端日常工作可能使用到的一些工具等技术点进行记录,docker内部services, swarm 等后续补充docker document(说白了就是我还看不懂。。。)
前端开发需要的傻瓜式搭建
为什么需要使用docker?
例如,某个项目内部需要使用到redis,然而前端开发仅仅只是需要跑起来就行,并不需要那么多复杂的配置,这时就可以通过docker跑一个redis镜像,通过映射对应端口号就能为我们所用,傻瓜式操作
本着减少折腾,一切从简的至上理念。
1.直接去官网下载docker Desktop-->windows or mac
2.安装一款docker gui软件 kitematic!!!地址:ktitematic
粗略举个例子吧,显示一下如何在kitematic里面建立镜像,并且根据你的服务配置映射对应端口号到容器内部。
到此傻瓜式的开发环境配置就完成啦!这里我们就可以不用为了项目内依赖的一些例如(mongodb,memcached)等头疼了。
通过docker去部署项目
项目运行在服务器的docker容器中,各项目之间相互隔离,互不影响。
了解dockerFile
创建一个容器首先需要了解什么是dockerFile,docker会通过dockerFile文件内部的指令去创建对应配置的image,下面是一些常见的语法(伪代码):
FROM: #指定基础镜像
语法: FROM<image>:<tag>?:<digest>? #后两者为可选项
LABEL: #为镜像指定标签
语法: LABEL <key>=<value>
WORKDIR: #设置工作目录
语法: WORKDIR /xx/xx
RUN: #运行命令
语法:RUN <command>
RUN ['aaa', 'parm1', 'parm2']
#(aaa为可执行文件,后面带两个参数)
注意: 不要同时写多个RUN,每个指令都会建立一层镜像。用 \ 换行
COPY: #复制到镜像(不能解压压缩包)
语法: COPY <src> <dest> src只能为本地文件 dest为容器内绝对地址或者工作目录相对路径
EXPOSE: #暴露容器运行的端口给外界
语法: EXPOSE 3000
ENV: #设置环境变量
语法: ENV <key> = <value>
CMD: #启动容器需要的命令
语法: 1.CMD ["xxx", "parm1"]
2. CMD xxx parm1
注意: 双引号!!!,docker解析的是一个JSON array
RUN & CMD 区别
RUN 是指在构建容器的时候最先初始化运行的命令,类似于npm i
CMD 是指启动容器的命令 类似于npm start
eg
FROM xxx.com/node:8.4.0
LABEL version="x.0" descriptionx="xxx"
# 工作目录
WORKDIR /app
# 全局安装pm2模块
RUN npm i -g pm2 \
# 需要安装pm2-intercom模块,否则log4js日志不输出
&& pm2 install pm2-intercom
# 复制源码,仅复制服务端运行时需要的代码文件即可
COPY server /app/server
COPY var /app/var
COPY ecosystem.config.yaml package.json /app/
# 镜像内的服务使用 3000 端口
EXPOSE 3000
# 传递环境变量
ENV NODE_ENV=production PORT=3000
# 使用pm2-docker启动程序
CMD ["pm2-docker", "start", "ecosystem.config.yaml"]
创建镜像
在目录下创建一个DOCKERFILE文件
创建命令
docker build --tag=name
docker image ls #查看本地镜像
运行镜像
docker run -p 4000:80 friendlyhello
并且打开本地浏览器4000端口,可以成功看到自己的写的一个静态服务已成功跑起来
发布镜像
将自己创建的imgage发布到自己的dockerhub仓库。
docker login # 登录docker hub账号
docker tag imageName username/xxx:<version> # 其中username必须为自己的docker账号
docker push username/xxx:<version> #推送
docker pull username/xxx:<tag>
常见的docker命令部分(自己去查吧)
docker image ls #查看本地镜像
docker container ls #查看正在运行的镜像
docker run -p localPort:Port xxx #-p映射接口
docker container stop <NAME or ID>
...