docker 部署前端项目 【实践、记录】
初识docker一:认识docker二:docker client【交互】注意:下述内容都是以面向对象的角度思考总结1.管理docker服务2.管理docker镜像3.管理docker容器三:docker host【认识】1.what四:docker hub【参考】1.what2.how实践docker部署第一步:项目开发阶段【输出git repo(project and dockerfile)】
此文仅记录博主学习实践docker技术之后的基本认识以及初次部署实践,如有错误,敬请指正。
初识docker
一:docker组成
Docker的工作原理
Docker是基于C/S结构的系统,Docker的守护进程运行在Linux服务器(宿主机)上,当我们在Liunx服务器上(Docker-Client)输入Docker相关命令就会被发送给Doker-Server
二:docker host【认识】
1.镜像(image)
Docker镜像相当于一个文件系统,携带了创建特定类型容器所需的所有数据,根据某一类型的镜像可以创建出很多容器实例。
2.容器(container)
容器可以看做是一个简易版的Linux系统,运行在宿主机上,但是它有自己的文件系统和网络等。
三:docker client【交互】
注意:下述内容对各对象的各种行为做出分类,按照流程逻辑可分为对该对象的 crud action、config action、host action、controll action四种行为。以下内容仅关注各对象的基本行为逻辑,具体命令自行搜索查阅。
1.管理docker服务
crud action
- 安装(C): linux / window
- 描述(R)
docker version
docker info
- 卸载(D)
config action
- 设置镜像仓库
- 设置阿里云镜像加速
设置步骤:进入阿里云 -> 注册阿里云账号 -> 搜索进入容器镜像服务 -> 在镜像中心选项卡下选择镜像加速器 -> 里面可以看到加速器地址以及各系统下的配置方式
controll action
- (开机自)启动docker服务
- 关闭docker服务
2.管理docker镜像
crud action
- 拉取(C):pull
- 构建(C):build
- 查看(R)
# findAll
docker images
# findOne
docker search 镜像名
# detail
docker inspect 镜像id
- 删除(D)
# deleteAll
docker rmi -f $(docker images -aq)
# deleteOne
docker rmi -f 镜像id
# deleteMany
docker rmi -f 镜像id 镜像id 镜像id 镜像id
3.管理docker容器
crud action
- 创建(C)
docker run 可选参数 镜像名
# 可选参数
--name=”xxx“ # 容器名字
-d # 后台模式运行
-it # 使用交互模式运行,进入容器查看内容
-p(小学) # 指定端口映射 如:-p 8080(宿主机):8080(容器)
-P(大写) # 随机端口映射
--net # 网络模式
-v # 数据卷
- 查看(R)
# 查看运行中的容器
docker ps
# 查看所有容器
docker ps -a
# detail
docker inspect 容器id
- 删除(D)
# deleteAll
docker rm -f $(docker ps -aq)
# deleteOne
docker rm -f 容器id
host action
- 文件传输
docker cp 容器id:文件路径(容器内) 目的路径(宿主机)
[root@MT ~]docker cp 1a9a6785c37c:/home/c.java /home/
- 进程
docker top 容器id
- 共享文件,共享网络(运行镜像获得容器实例时以参数形式指定)
controll action
- 启动和停止
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止正在运行的容器
docker kill 容器id # 强制停止
- 进入和退出
# 进入
docker exec -it 容器ID /bin/bash
# 退出
exit # 容器直接退出
Ctrl + P + Q # 容器不停止退出
- 查看日志
docker logs -tf 容器id # 查看实时日志
docker logs -t --tail 数量 容器id # 查看指定数量的日志
四:docker Registry【参考】
docker Registry是集中存放镜像文件的场所,imageName和imageTag共同确定一个image。
1.docker Hub
官网:https://hub.docker.com/,扮演与github类似的角色,需要的镜像可以在这里搜索后翻阅文档。
2.阿里云 仓库
国内的公开仓库,镜像下载速度快。
实践docker部署
第一步:项目开发阶段【输出git repo(project and dockerfile)】
1.编写dockerfile
什么是dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
dockerfile常用配置项
- 英文好的看官方文档,英文差的看菜鸟教程等资料。
前端项目部署示例dockerfile
注:由于采用的部署方式是nginx代理到多个http服务的方式,以下示例只是构建一个单独的基于node环境的http服务镜像。
FROM node:12
RUN mkdir -p /home/docs
WORKDIR /home/docs
ADD package.json .
RUN yarn config set registry 'https://registry.npm.taobao.org'
RUN yarn
COPY . /home/docs
RUN yarn docs:build
EXPOSE 3386
# 以下server.js即是一个在node环境下,通过express框架搭建http服务的脚本。
CMD ["node", "server.js"]
2.准备data and script(dockerfile中涉及到的)
project code(data)
server.js(script)
// express依赖
const http = require('http')
const path = require('path')
const bodyParser = require('body-parser')
const express = require('express')
// ecstatic依赖
const ecstatic = require('ecstatic')
// connect-history-api-fallback依赖
const history = require('connect-history-api-fallback')
const app = express()
app.use(bodyParser.json())
app.use(history())
app.use(ecstatic({ root: path.join(__dirname, './dist') }))
http.createServer(app).listen(process.argv[2] || 3386)
第二步:前端打包阶段【输入git repo,输出image(after test)】
1.Clone
# 在打包机上
mkdir codePath
cd codePath
git clone https://github.com/xx/xx.git
2.Build
cd projectPath
docker build -t xx/node:tagName .
3.Run
docker run -d -p 3386:3386--name containerName xx/node:tagName
curl 127.0.0.1:7788 # test
4.Share
未作实践,另行参考https://www.runoob.com/docker/docker-repository.html
第三步:服务器运行容器阶段【输入image,running】
注:以下项目部署方式是 nginx容器 + 多个http server容器的方式
1.nginx服务
需求:nginx一级路由控制访问不同项目,如127.0.0.1/project1访问project1项目,127.0.0.1/project2访问project2项目。
first:拉取nginx服务、创建nginx容器、启动nginx容器
- 拉取创建启动:养成从Docker Hub查找镜像后翻阅文档的习惯(授之以鱼不如授之以渔,哈哈)。
- 注意点:跨容器转发,由于宿主以及各容器各有各自的网络和端口,所以需要做好网络和端口映射,可通过让nginx容器以–net=host的方式,让nginx容器与宿主机共享网络,进而实现nginx容器-> host -> project容器的请求转发需求(注意,在实践中,docker for window环境下出现预期外错误,linux正常)。
second:添加特定路由的请求转发配置
- 添加代理配置
docker ps
# 进入容器
docker exec -it nginxId /bin/bash
# 修改配置
vi /etc/nginx/conf.d # vi编辑器问题,1.command not find:执行 apt-get install vim 2.找不到包:apt-get update
--- conf.d
# 对应server下添加如下配置
location /project1{
proxy_pass http://127.0.0.1:3386;
}
---
2.project服务
运行测试project的http服务
docker run -d -p 3386:3386 --name containerName xx/node:tagName
curl 127.0.0.1:3386# test
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)