Docker Compose学习实战(一)搭建本地EasyMock服务
EasyMock介绍
Easy Mock 是杭州大搜车无线团队出品的一个极其简单、高效、可视化、并且能快速生成模拟数据的在线 mock 服务
。以项目管理的方式组织 Mock List,能帮助我们更好的管理 Mock 数据。
地址:https://www.easy-mock.com
在线文档:https://www.easy-mock.com/docs
本篇是对Docker Compose学习的一个小实践,搭建一个本地的EasyMock服务还能方便自己测试和部署,当然人家在线的服务也很好用~
Docker真的太方便了~
最小白方式
(1)安装Docker Desktop(自带了Docker Compose,点击下载),如果是Linux,安装参考 Docker Compose使用 。PS:Windows一键部署简易脚本,嫌麻烦的下载来双击运行即可,都不用管了,第一次运行脚本建议设置Docker阿里镜像源加速下载,请自行百度。du娘xia载:11n6
(2)在本地创建文件: docker-compose.yml
。
version: '3.3'
services:
web:
image: easymock/easymock:1.6.0
container_name: web-easymock
depends_on:
- mongodb
- redis
command: /bin/bash -c "npm run start"
ports:
- 7300:7300
networks:
- easy-mock
restart: on-failure
mongodb:
image: mongo:3.4
container_name: mongo-easymock
networks:
- easy-mock
redis:
image: redis:4.0.6
container_name: redis-easymock
command: redis-server --appendonly yes
networks:
- easy-mock
networks:
easy-mock:
(三)在该文件目录下打开powershell(空白处按住shift选择powershell),键入启动命令 docker-compose -p easymock up -d
。
(四)完成后访问 http://localhost:7300 测试。
准备知识
-
入门参考:Docker Compose使用
-
官网命令文档:https://docs.docker.com/compose/reference
-
官网脚本文档:https://docs.docker.com/compose/compose-file
-
EasyMock官方GitHub的DockerCompose方式部署
-
我用的是Docker Desktop因此自带安装了Docker Compose,没有安装的参考 Docker Compose使用
详细版步骤
一、下载EasyMock官方GitHub的DockerCompose配置,修改 docker-compose.yml
如下
version: '3.3'
services:
web: #服务名随便起
image: easymock/easymock:1.6.0
container_name: web-easymock #重命名启动容器名称
depends_on: #depends_on标签用于解决容器的依赖、启动先后的问题,先启动redis和db,最后启动web
- mongodb
- redis
command: /bin/bash -c "npm run start" #容器启动后运行的命令
ports: #映射 宿主机端口:容器端口
- 7300:7300
networks:
- easy-mock
restart: on-failure #失败重启
#挂载目录的各种方式演示,宿主机目录路径:容器目录路径,用宿主机的替换容器的。文档:https://docs.docker.com/compose/compose-file/#volumes
#volumes:
#方式一-相对路径
#- '~/localHome:/home' #用户主目录,添加后启动报错,原因:路径需要单引号
#- './localHome:/home:ro' #:ro表示访问模式
#方式二-绝对路径
#- '/usr/yoko:/home' #相对目录
#方式三-不同service之间挂载,第二行应该写在另一个service底下
#- 'shareVolumeVariable:/目录一' #在底下定义变量shareVolumeVariable,第一次将赋值,用于在服务间共享目录
#- 'shareVolumeVariable:/目录二' #将两个目录挂载,参考https://docs.docker.com/compose/compose-file/#volume-configuration-reference
#方式四-需要指定版本高于v3.2,example:version: '3.7'
#方式四-1,这种方式还不明白-todo
# - type: volume
# source: static
# target: /home
# volume:
# nocopy: true #是否允许从容器中读取数据
#方式四-2,本地成功创建目录static1
# - type: bind
# source: ./static1
# target: /home
mongodb: #服务名随便起
image: mongo:3.4
container_name: mongo-easymock #重命名启动容器名称
networks: #指定加入的网路
- easy-mock
redis: #服务名随便起
image: redis:4.0.6
container_name: redis-easymock #重命名启动容器名称
#redis-server --appendonly yes 表示开启AOF功能,AOF日志它是一个追加写入的日志文件。与一般数据库的binlog不同的是,AOF文件是可识别的纯文本,它的内容就是一个个的Redis标准命令。
command: redis-server --appendonly yes
networks: #指定加入的网路
- easy-mock
networks: #创建网络
easy-mock: #新网络名称随便写
# volumes: #方式三-挂载文件测试
# shareVolumeVariable:
# static:
二、在该配置文件下运行命令
- docker-compose up -d 启动
- docker-compose -p easymock up -d 自定义projectName,默认是当前目录名
- docker-compose stop 关闭
- docker-compose rm -svf 强制关闭并删除容器
- 测试访问:http://localhost:7300
三、(学习阅读)EasyMock的Dockerfile参考
Dockerfile
FROM ubuntu:16.04
# add user group, user and make user home dir
RUN groupadd --gid 1000 easy-mock && \
useradd --uid 1000 --gid easy-mock --shell /bin/bash --create-home easy-mock
# set pwd to easy-mock home dir
WORKDIR /home/easy-mock
# install dependencies
RUN apt-get update && \
apt-get install --no-install-recommends -y \
build-essential \
python \
wget \
jq \
git \
apt-transport-https \
ca-certificates
# install nodejs
RUN wget http://cdn.npm.taobao.org/dist/node/v8.4.0/node-v8.4.0-linux-x64.tar.gz && \
tar -xzvf node-v8.4.0-linux-x64.tar.gz && \
ln -s /home/easy-mock/node-v8.4.0-linux-x64/bin/node /usr/local/bin/node && \
ln -s /home/easy-mock/node-v8.4.0-linux-x64/bin/npm /usr/local/bin/npm
# download easy-mock source code
USER easy-mock
RUN mkdir easy-mock && \
wget https://github.com/easy-mock/easy-mock/archive/v1.6.0.tar.gz && \
tar -xzvf v1.6.0.tar.gz -C easy-mock --strip-components 1
# npm install dependencies and run build
WORKDIR /home/easy-mock/easy-mock
RUN jq '.db = "mongodb://mongodb/easy-mock"' config/default.json > config/tmp.json && \
mv config/tmp.json config/default.json
RUN jq '.redis = { port: 6379, host: "redis" }' config/default.json > config/tmp.json && \
mv config/tmp.json config/default.json
RUN npm install && npm run build