1 什么是docker
Docker 是一个开源的应用容器引擎,
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
简单一点理解你可以把它当作一个虚拟机
2 安装
3 docker nginx 部署多个web服务
#拉取官方nginx镜像
$ docker pull nginx
#使用 NGINX 默认的配置来启动一个 Nginx 容器实例
docker run --name runoob-nginx-test -p 8081:80 -d nginx
- runoob-nginx-test: 容器实例名称可以自定义。
- nginx: 官方nginx镜像。
根目录下创建目录nginx, 用于存放后面的相关东西。
mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf
拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录。
docker cp 6dd4380ba708:/etc/nginx/nginx.conf ~/nginx/conf
- 6dd4380ba708: 上面runoob-nginx-test容器实例ID,每次新建的都不一样,具体的看自己创建时的ID。
docker run -d -p 9001:80 --name myoa -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx
- www: 目录将映射为 nginx 容器配置的虚拟目录。
- logs: 目录将映射为 nginx 容器的日志目录。
- conf: 目录里的配置文件将映射为 nginx 容器的配置文件。
- myoa:自定义docker容器名称
- 9001:自定义端口号
部署第二个web 服务
docker run -d -p 9002:80 --name appoa -v ~/nginx/www1:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx
- www1: 如需配置多个web服务在目录nginx下创建多个目录即可。
- logs: 即可。
- conf: 使用同一个即可。
- myoa:自定义docker容器名称
- 9002:自定义端口号
www/www1目录结构如下
| |____index.html
| |____static
nginx web服务代理根目录下必须得有index.html文件
4 docker部署mysql服务
# 拉取官方的镜像,标签为5.6
docker pull mysql:5.6
# 运行mysql容器
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
- -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
- -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
- -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
- -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
- -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
5 docker部署node后端egg服务
项目根目录下Dockerfile文件
# 进入到myoa项目目录下
# 设置基础镜像,如果本地没有该镜像,会从Docker.io服务器pull镜像
FROM node:8.6.0-alpine
# 设置时区
RUN apk --update add tzdata \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& apk del tzdata
# 创建app目录
RUN mkdir -p /usr/src/node-app/koa-server
# 设置工作目录
WORKDIR /usr/src/node-app/koa-server
# 拷贝package.json文件到工作目录
# !!重要:package.json需要单独添加。
# Docker在构建镜像的时候,是一层一层构建的,仅当这一层有变化时,重新构建对应的层。
# 如果package.json和源代码一起添加到镜像,则每次修改源码都需要重新安装npm模块,这样木有必要。
# 所以,正确的顺序是: 添加package.json;安装npm模块;添加源代码。
COPY package.json /usr/src/node-app/koa-server/package.json
# 安装npm依赖(使用淘宝的镜像源)
# 如果使用的境外服务器,无需使用淘宝的镜像源,即改为`RUN npm i`。
RUN npm i --registry=https://registry.npm.taobao.org
# 拷贝所有源代码到工作目录
COPY . /usr/src/node-app/koa-server
# 暴露容器端口
EXPOSE 7001
# 启动node应用
CMD npm run dev
创建egg镜像
docker build -t eggnode .
创建egg服务容器
docker run -d --name eggnode -p 7001:7001 eggnode
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- itd 可连写
6 www/www1文件自动化部署sh
myoa.sh文件如下
# 进入到myoa项目目录下
cd mars/fe/myoa
# 拉取最新代码
git pull
# 打包项目
npm run build
# 将打包好的文件拷贝到nginx代理的www文件目录下
cp -r ./dist/* ~/nginx/www
执行myoa.sh
sh myoa.sh
appweb.sh文件如下
# 进入到myoa项目目录下
cd mars/fe/app
# 拉去最新代码
git pull
打包项目
npm run build
# 将打包好的文件拷贝到nginx代理的www文件目录下
cp -r ./build/* ~/nginx/www1
执行appweb.sh
sh appweb.sh
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。