Docker 在工程运维上的探索

@force2008 2018-01-30 10:33:44发表于 kaola-fed/blog 待归档

Docker 在工程运维上的探索

标签(空格分隔): docker nodejs webapp


背景

最近组内有同学用docker在项目中应用,参加了设计分享,分享完后多数同学都是“我是谁,我从哪儿来,我到哪儿去”的一脸懵圈,这技术已经出现有些年头了,但在我们前端圈里有实践应用的还不多,而这也是我第一次参加docker技术在实践项目中的应用。于是就有了这一篇的学习记录。

Docker是啥?

  • Docker Client:Docker提供给用户的客户端。Docker Client提供给用户的是一个终端,用户输入Docker提供命令来管理本地或远程服务器。
  • Docker Daemon:Docker服务的守护进程。每台服务器上只要安装Docker的环境,基本上就跑有一个后台程序Docker Daemon, Docker Daemon会接收Docker Client发过来的指令,并对服务器进行具体操作。
  • Docker Image:镜像。绿色安装程序。
  • Docker Registry:是 Docker Image的仓库,就像git仓库一样,用来管理Docker镜像,提供Docker镜像的上传,下载,浏览等,也就Dock Hub.
  • Docker Container:Docker 容器。Docker Container是跑项目程序,消耗机器资源,提供服务的地方,Docker Container 通过Docker Images 启动,在Docker Images的基础上运行代码。 Docker Container提供了系统硬件环境,然后使用Docker Images制作好的系统盘,再加上项目代码,就可以运行起来提供服务。

Docker怎么玩

此处输入图片的描述
这张图比较好的说明了宿主机,docker主机,窗口终端三个载体

  • 命令解析
docker-machine ssh default

Create and manage machines running Docker. Log into with SSH on default machine.

docker ps -a

此处输入图片的描述
列表出容器,然后用

  • docker rm或docker kill等令删掉容器,
  • docker attach containerName进入容器(容器是启动的),
  • docker start -i(启动容器并入进)
docker --help

可以快速查看docker的命令

docker rm containerName

移除container名称
删除容器还有

  • docker stop name
  • docker kill name
  • docker rmi 删除镜像
docker pull node

下载安装最新版本的node的linux系统

docker run --name koa -v /docker_study/koa-template:/app -p 3000:3000 -i -t node /bin/bash

docker run --help 可以查看docker run的参数命令

实践

基于上面的命令的解释,开始一个实例
先在宿机上应射一个本地目录,在windows上的操作上面的那篇引导文章里有指出。然后拉代码到这个目录

git clone https://github.com/ltaoo/koa-template.git
  1. 启动docker machine
docker-machine ssh default
  1. mount命令把宿主机的目录应射到default的docker主机终端上
mount
  1. 下载node的linux镜像
docker pull node
  1. 启动容器,/docker_study/koa-template是代码目录,这个目录会应射到容器的app目录
docker run --name koa -v /docker_study/koa-template:/app -p 3000:3000 -i -t node /bin/bash
  1. 在容器里进入app目录,安装应用依赖
npm i
  1. 启动应用
node start.js

docker-machine的ip一般是192.168.99.100
所以上面的应用可以能过 http://192.168.99.100:3000 进行访问,同时修改源码里的内容,访问的内容就会修改

基于上面的实践

我们可以总结出一套用于发布工程的方法
此处输入图片的描述

  • 要发布工程时,源代码从指定的gitlab的分支如master上拉代码下来
  • 把原来宿主机上的container 重启一下,工程就部署完成了
  • 如果要新开一个测试环境,可以新做一个image,然后从指定分支拉代码,在测试容器里进行测试,效率很高

参考资料