docker小笔记~

648 阅读4分钟

开发必备利器

何为docker?移步阮一峰老师的文章Docker 入门教程,看完就会有一个初步的了解。说简单点其实就是独立的,隔离的容器环境,用来部署各种杂七杂八的应用,互不干扰。极大方便了因各种环境差异而带来的例如项目跑不动,浪费时间去配置各种复杂的环境变量的情况
本文仅对前端日常工作可能使用到的一些工具等技术点进行记录,docker内部services, swarm 等后续补充docker document(说白了就是我还看不懂。。。)

前端开发需要的傻瓜式搭建

为什么需要使用docker?
例如,某个项目内部需要使用到redis,然而前端开发仅仅只是需要跑起来就行,并不需要那么多复杂的配置,这时就可以通过docker跑一个redis镜像,通过映射对应端口号就能为我们所用,傻瓜式操作

本着减少折腾,一切从简的至上理念。
1.直接去官网下载docker Desktop-->windows or mac
2.安装一款docker gui软件 kitematic!!!地址:ktitematic

两位老铁

粗略举个例子吧,显示一下如何在kitematic里面建立镜像,并且根据你的服务配置映射对应端口号到容器内部。
如图所示,搜索你需要的镜像包,并且拉取。例如redis,拉取后启动它就完事了。

这里需要注意根据你项目内部设置的redis监听的端口号与容器内的端口号进行映射,不然本地无法与容器内部进行连接。


到此傻瓜式的开发环境配置就完成啦!这里我们就可以不用为了项目内依赖的一些例如(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  #查看本地镜像

可以看到本地已经成功根据DOCKERFILE创建了一个名字为friendlyhello的镜像,版本号为latest.

运行镜像

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>  #推送

当然kitematic里面肯定也是找的到自己发布的

拉取的话就直接执行就行了。

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>
...