设为首页 收藏本站
查看: 702|回复: 0

[经验分享] 项目Docker化流程与问题总结(1)

[复制链接]

尚未签到

发表于 2017-11-22 10:37:10 | 显示全部楼层 |阅读模式
  到了新公司,领导让我研究项目Docker化的方案,在此做个记录。
  
  Docker
  Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署。
  关于Docker的资料,可以看官方的文档和Docker中文社区。中文社区有一个Docker问答录 https://blog.lab99.org/post/docker-2016-07-14-faq.html,感觉对于我这种新的Docker使用者很有帮助

Docker通常用于如下场景:


  • web应用的自动化打包和发布;
  • 自动化测试和持续集成、发布;
  • 在服务型环境中部署和调整数据库或其他的后台应用;
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
  Docker 镜像Image
  假设Linux内核是第0层,那么无论怎么运行Docker,它都是运行于内核层之上的。这个Docker镜像,是一个只读的镜像,位于第1层,它不能被修改或不能保存状态。
  一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。
  Docker镜像通过镜像ID进行识别。镜像ID是一个64字符的十六进制的字符串。但是当我们运行镜像时,通常我们不会使用镜像ID来引用镜像,而是使用镜像名来引用。
  Docker 容器 Container
  容器是在所有镜像层之上增加的一个可写层。容器有运行在CPU上的进程,而且有两个不同的状态:运行态(Running)和退出态(Exited)。当我们使用docker run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,它就进入退出态。
  当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会永久地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。
  我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身。
  Docker的安装
  公司主机用的是Debian的系统,Docker支持64位、内核高于3.10的Debian操作系统,内核低于3.10将导致数据丢失和系统不稳定等问题。 查看内核版本使用以下命令:



$ uname -r
  Docker的安装参照官网文档: https://docs.docker.com/engine/installation/linux/docker-ce/debian/
  
  部署项目到Docker中
  使用MobaXterm工具远程控制主机,将项目代码文件夹(后面用app表示)打包,移入主机的某个目录中,比如根目录 / 中,在根目录下用unzip app.zip命令解压app.zip文件,进入解压出来的目录app。
  在app文件夹中创建Dockerfile文件,内容如下:



#设置基础镜像,如果本地没有该镜像,会从Docker.io服务器pull镜像
node
#创建app目录,保存我们的代码
mkdir -p /usr/src/node
#设置工作目录
/usr/src/node
#复制所有文件到 工作目录。
. /usr/src/node
#编译运行node项目,使用npm安装程序的所有依赖,利用taobao的npm安装
npm install --registry=https://registry.npm.taobao.org

#暴露container的端口
3100
#运行命令
["npm", "start"]
  在app文件夹下,构建项目的docker镜像,最后一个点表示当前目录:



$ docker build -t app .
  可以通过docker的命令查看刚构建的镜像



$ docker images
REPOSITORY    TAG            IMAGE ID            CREATED             SIZE
app           latest         a3f4ce440e89        27 minutes ago      735MB
  启动docker容器



$ docker run -d --name App -p 3100:3100 app
  -d表示后台运行容器,--name指定容器的名字,-p设置端口映射,前者是暴露给外部的端口号,后者是主机上的端口号。app就是刚才构建的镜像名。
  这样就可以在浏览器输入 主机ip:3100 访问web应用了。
  Docker常用命令



$ docker images                              #查看docker中的镜像
$ docker ps -a                               #查看docker中的容器,-a参数表示显示没有在运行的容器
$ docker stop container id/container name    #停止容器
$ docker rm container id/container name      #删除容器
$ docker rm $(docker ps -a -q)               #删除所有容器
$ docker rmi image id/image name             #删除镜像
$ docker rmi $(docker images -q)             #删除所有镜像
$ docker exec -it container id/name /bin/sh  #进入后台运行的容器,执行exit不会停止容器
$ docker volume create myvol                 #创建数据卷myvol
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-409449-1-1.html 上篇帖子: Ubuntu软件包管理器 下篇帖子: linux程序机制入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表