docker 应用场景技术有没有应用到pc端

相关文章12345678
相关问题发布时间:发布时间:发布时间:发布时间:发布时间:发布时间:发布时间:发布时间:发布时间:发布时间:发布时间:发布时间:
版权所有 (C) . All Right Reserved. 为中华文化之崛起而奋斗!3分钟,9个Q&A让你快速知道Docker到底是什么
发表于 15:47|
来源ithome|
作者王宏仁
摘要:Google、Amazon、Microsoft、VMware都纷纷加入Docker和Container所掀起的新时代云端虚拟化行列,很多人还不知道Docker和Container到底是什么,下面的9个Q&A让你快速了解这一切。
【编者按】不论是Google、Amazon、Microsoft、VMware都纷纷拥戴,加入Docker和Container所掀起的新时代云端虚拟化行列,这两项技术成为了IT界的新趋势。Docker和Container到底是什么?以下9个Q&A告诉你。以下为原文:
Q1:Container技术和服务器虚拟化是一样的技术吗?
A:不是。两者虽然都属于虚拟化的技术,目标都是为了将一套应用程序所需的执行环境打包起来,建立一个孤立环境,方便在不同的硬件中移动,但两者的运作思维截然不同。简单来说,常见的传统虚拟化技术如vSphere或Hyper-V是以操作系统为中心,而Container技术则是一种以应用程序为中心的虚拟化技术。
传统虚拟化技术从操作系统层下手,目标是建立一个可以用来执行整套操作系统的沙盒独立执行环境,习惯以虚拟机(Virtual Machine)来称呼。而Container技术则是直接将一个应用程序所需的相关程序代码、函式库、环境配置文件都打包起来建立沙盒执行环境,为了和传统虚拟化技术产生的虚拟机区分,Container技术产生的环境就称为Container。
Q2:一般常见的虚拟机和Container有何不同?
A:最明显的差别是,虚拟机需要安装操作系统(安装Guest OS)才能执行应用程序,而Container内不需要安装操作系统就能执行应用程序。Container技术不是在OS外来建立虚拟环境,而是在OS内的核心系统层来打造虚拟执行环境,透过共享Host
OS的作法,取代一个一个Guest OS的功用。Container也因此被称为是OS层的虚拟化技术。
Q3:为何Container是轻量级虚拟化技术?
A:因为Container技术采取共享Host OS的作法,而不需在每一个Container内执行Guest OS,因此建立Container不需要等待操作系统开机时间,不用1分钟或几秒钟就可以启用,远比需要数分钟甚至数十分钟才能开启的传统虚拟机来的快。
Q4:Container技术是全新的技术吗?
A:不是,早在1982年,Unix系统内建的chroot机制也是一种Container技术。其他如1998年的FreeBSD jails、2005年出现的Solaris
Zones和OpenVZ,或像是Windows系统2004年就有的Sandboxie机制都属于在操作系统内建立孤立虚拟执行环境的作法,都可称为是Container的技术。
直到2013年,dotCloud这家PaaS服务公司开源释出了一套将Container标准化的平台Docker,大受欢迎,所以,dotCloud决定以Docker为名成立新公司力推。
Q5:Docker如何实现Container标准化?
A:Docker采用了aufs文件系统来设计一个可以层层堆栈的Container映象文件,将Container内的所有程序(包括应用程序、相关函式库、配置文件),都打包进Docker映象档,并且提供了一个Dockerfile配置文件来记录建立Container过程的每一个步骤包括参数。只要在任何支持Docker平台的环境中,就可以从这个映象档来建立出一个一模一样的Container来执行同一个应用程序。如此一来,应用程序等于是可以透过Docker映象檔,或甚至只需要Dockerfile,就能将程序执行环境带着走,移动到任何支持Docker的环境中。Docker公司也释出API,可以用来控制所有的Container相关指令,任何人只要使用同一套Docker,就等于有了同一套管理和建立Container的方法,也就等同于将Container运用标准化了。
Q6:一个Container映象档内可以安装多少应用程序?
A:一个Container的映象档内可以安装多支程序,例如同时安装Ubuntu、Apache、MySQL、Node.js、Ruby等。不过,Docker官方建议,一只程序安装在一个Container内,再把这些Container迭起来提供一个完整的服务。
Docker称这是一种Microservices(微服务)的新软件架构,将组成一个应用系统的每一个Stack,拆解成许多小型服务,例如Apache服务、MySQL服务、Node.js服务、Ruby服务,每一个服务都是包在Container里的一只程序,例如MySQL服务就是部署在Container内的MySQL。
这么做的好处是可以建立一个松散耦合的弹性应用程序架构,也能轻易地抽换其中一个Container,例如要升级MySQL,只需要重载新版MySQL的Container映象文件,就可以完成数据库升级,不用将整套应用系统停机。
Q7:Container内不是不需要OS,为何需要OS的基础映象档?
A:OS基础映象档的用途是让Container拥有这OS的文件系统,例如使用ubuntu基础映象档就可以让Container建立ubuntu的根目录架构,而不是用来执行一个OS执行实例。
Q8:Docker对Devops有何帮助?
A:因为Docker透过Dockerfile来记录建立Container映象文件的每一个步骤,可以将建立应用程序执行环境的过程和配置参数,完整地记录下来。开发人员和维运人员之间可以利用Dockerfile来沟通对执行环境的讨论。甚至结合版本控制服务如GitHub,可以让Dockerfile具备版本控制功能,能将基础架构程序化(Infrastructure
as code)来管理。
Q9:可以在Windows
Server环境中执行Docker吗?
A:还不行。目前Docker只能在Linux平台上执行,但是微软10月中刚宣布要在下一波Windows Server改版时内建Docker引擎,未来同一份Docker映象档能否跨Linux和Windows
OS,还需待微软揭露更多细节才能得知。
原文链接:
&(责编/魏伟)如需要了解更多Docker相关的资讯或是技术文档可访问;如有更多的疑问请在提出,我们会邀请专家回答。购票等问题可咨询QQ群:。Container技术日报公众账号已开启,欢迎关注!
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章私活利器,docker快速部署node.js应用 - CNode技术社区
积分: 2180
这家伙很懒,什么个性签名都没有留下。
最近研究了几天docker的快速部署,感觉很有新意,非常轻量级和方便,打算在公司推广一下,解放运维,省得每次部署一台新服务器都去跑安装脚本了,对于我们开发人员也是好事情,无需写太多重复的部署文档,直接将docker的images丢上服务器就可以运行了。
可能还有一些同学不了解docker这个项目,docker是由go语言编写的,一个快速部署的轻量级虚拟技术项目,他允许开发人员将自己的程序和运行环境一起打包,制作成一个docker的image(镜像),这样部署到服务器上,也只需要下载这个image就可以将程序跑起来,免去每次都安装各种依赖和环境的麻烦,还能够做到应用程序之间的隔离,因为我们公司部署的python程序,这样一来我也省去了每次都到新服务器配置 vitualenv了。
官网地址:
如此看来docker非常适合做小巧的外包项目,免去每次都为客户配置一遍运行环境,费时费力。
一、安装:
安装很简单,直接进入下载页面,根据自己的操作系统下载相对应的安装包即可,下面说一下windows安装:
下载地址:
在安装docker时,会附带安装git和VirtualBox,所以可能安装时间稍微长一些,安装完毕重启系统,以管理员身份进入命令行,就可以使用进入linux虚拟机命令 “boot2docker” ,由于docker目前的镜像只针对linux,所以windows下面必须安装虚拟机才能使用。
第一次使用boot2docker start,会出现错误:
Failed to get machine &boot2docker-vm&: machine does not exist
没关系,这是因为没有boot2docker iso的镜像所致,执行:
$ boot2docker init
就可以初始化镜像,耐心等待下载并安装完毕后,我们继续执行开启虚拟机。
$ boot2docker start
在windows下是无法直接使用cmd窗口来操作linux系统的,所以我们需要进入linux虚拟机来操作docker,执行:
$ boot2docker ssh
就可以进入linux虚拟机,如果要退出并关闭虚拟机,执行如下命令:
$ boot2docker stop
调试时查看虚拟机ip地址,后面部署测试环境会用到:
$ boot2docker ip
192.168.59.103
我们可以通过ssh的ip地址192.168.59.103,用户名 docker,密码 tcuser,登录到虚拟机中去。
如果不幸长时间无法init成功,说明镜像被GFW挡住了,手动去github上下载镜像,地址为:
如果还是无法下载成功,我是好心人,把1.1.2版本的boot2docker.iso镜像丢到了百度云上:
下载完毕之后放到目录:
C:\Users\你的用户名\.boot2docker\boot2docker.iso
然后再执行
$ boot2docker init
二、下载镜像,安装环境
我们先执行如下命令,启动虚拟机:
$ boot2docker start
2014/08/18 21:22:41 Waiting for VM to be started...
...........
2014/08/18 21:23:21 Started.
2014/08/18 21:23:21 Docker client does not run on Windows for now. Please use
2014/08/18 21:23:21
&boot2docker& ssh
2014/08/18 21:23:21 to SSH into the VM instead.
如果我们的物理机内存低于4G,那么跑这个boot2docker可能需要手动设置内存占用大小:
$ boot2docker start -m=512
我们利用命令就可以进入linux虚拟机了
$ boot2docker ssh
## ## ## ##
/&&&&&&&&&&&&&&&&\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /
\____\______/
___ | |_|___ \ __| | ___
___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|
__/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 1.1.2
master : 740106c - Thu Jul 24 03:24:10 UTC 2014
执行 docker 命令,会有一个命令列表,里面列出了所有 docker 支持的功能,列表如下:
Attach to a running container
Build an image from a Dockerfile
Create a new image from a container's changes
下面会对一些常用的命令进行示例说明,我们可以通过如下命令,先查找centos的镜像,并把他下载下来
$ docker search centos #查找centos名字的镜像
$ docker pull centos #下载官方纯净版本的centos镜像
在调用search命令时,你会看到有好多centos包,他们都是这样的&username&/&image_name&,这些不在根目录的镜像都是非官方的,是其他用户提交到docker hub上去的,耐心等待片刻我们就可以将centos的镜像拉下来了。
如果脸黑,镜像又不幸被墙,那么试试加上下面的hosts:
54.234.135.251
get.docker.io
54.234.135.251
cdn-registry-1.docker.io
成功下载好centos镜像之后,我们可以利用如下命令来查看镜像列表:
$ docker images
REPOSITORY
VIRTUAL SIZE
b1bd49907d55
2 weeks ago
b157b77b1a65
2 weeks ago
b157b77b1a65
2 weeks ago
接下来我们就利用centos7这个镜像输出一段 hello world
$ docker run b15 /bin/echo 'Hello world'
Hello world
注意这里的 b15,他表示centos7这个images的id,不用全部打全,只要保证输入的id前几位能找到唯一镜像即可,这点很赞。
稍微复杂一点的例子:
$ docker run
-i -d -t b15 /bin/sh -c & sleep 1; done&
-i表示同步container的stdin,-t表示同步container的输出,-d表示deamon,以后台启动这个container,执行这个container是永远不会停止的,每一秒钟都会输出hello world。
至于什么是container,container和image的关系我们下一段再说,列出镜像的历史:
$docker history image_name
三、安装环境
在开始第三段介绍之前,有必要说几个利用windows cmd窗口的小技巧。
1、如果想要使用标记选中功能,你会发现,当我们进入 boot2docker ssh 之后,鼠标对窗口的右键是无效的,所以想要利用标记选中窗口内的文字得这么弄:“点击左上角图标-&编辑-&标记”,这样就可以使用标记了
2、如果从其他地方复制了命令,但是窗口没有右键无法粘贴怎么办?用和1相同的办法:“点击左上角图标-&编辑-&粘贴”。
3、坑爹的windws如果命令太长,在boot2docker ssh里换行会错位的,在“点击左上角图标-&属性-&布局-&屏幕缓冲区大小和窗口大小”的数值,保证长的命令也在一行内就没有问题了,注意要重启cmd窗口。
接下来我们简单说明一下image和container的关系,image顾名思义就是镜像的意思,我们把他理解为一个执行环境(env),当我们执行了docker run命令之后,dock就会根据当前的image创建一个新的container,container更像是一个操作或者程序运行的一个沙箱,他们互相独立,但是都运行在image创建的执行环境之上,根据上一段我们执行了2个run的任务,也就创建了2个独立的container,我们通过命令
$ docker ps #查看当前运行的container
$ docker ps -a #查看所有的container
CONTAINER ID
d1eca89869d0
centos:centos7
/bin/sh -c 'while tr
13 minutes ago
Exited (0) 7 minutes ago
distracted_mcclintock
centos:centos7
/bin/sh -c 'while tr
15 minutes ago
Exited (0) 7 minutes ago
pensive_meitner
79a488c9cfb6
centos:centos7
22 minutes ago
sick_babbage
06f43c19d10a
centos:centos7
/bin/echo 'Hello wor
25 minutes ago
Exited (0) 25 minutes ago
berserk_einstein
我们可以分别利用命令对image和container进行删除
$ docker rm #删除container
$ docker rmi #删除image
$ docker rm `docker ps -a -q`
#删除所有容器
这样执行一次run就创建一个container,势必会造成大量的无用的container,可能我不需要持久化保存container,如果在docker run命令加上 --rm=true 选项,那当这个container执行完毕,将自动自己删除,保证了container数量不会泛滥增长。
我们之前下载纯净版centos7是没有任何第三方软件的,包括wget,ping等命令都要通过yum工具来重新安装,我们当然不想每次都重新安装这些东西,我不仅希望要把一些常用的库安装到的image中去,同时还希望把程序运行的环境也安装进去,所以image更像是一个系统的模版。
你会发现,当你执行如下命令,wget命令时安装成功了,但是当你下次执行wget命令时,又会报错,说找不到这个命令,到底是怎么回事呢?
$ docker run -t b15 yum install -y wget #通过yum工具安装wget命令
#安装完毕后,执行wget会报没有这个命令
$ docker run -t b15 wget http://
2014/08/18 15:42:19 exec: &wget&: executable file not found in $PATH
为什么会出现这个问题呢?答案就是我们上面所说的那样,每次执行docker run都会去独立的创建一个新的container来执行程序,所以我们必须手动把这些对container的更改提交成一个新的image,才能够依据这个image执行wget操作。
我们先把当前所有的container都删除,然后直接登录到container的bash命令窗口中去,免得每次都去输入docker run了
$ docker run -t -i b15 /bin/bash
这样我们进入了一个新的container,依据centos7作为模板,我们将要在其上面安装wget工具,直接执行
$ yum install -y wget
安装完毕之后,我们执行exit退出container
输入docker ps -a 我们找到刚才安装过wget工具的container ID,我们要把这个container重新做成一个新的image模版,这个模版将带wget命令。
$ docker ps -a
CONTAINER ID
26cc82ad29af
centos:centos7
/bin/bash
3 minutes ago
Exited (0) 5 seconds ago
desperate_mccarthy
我们执行如下命令,将一个安装过软件的container提交为一个image
$ docker commit 26
wget-centos7
60cd26c6ca1e753bf77aa913ed7bb75f6ddce
我们查看当前image镜像的列表:
wget-centos7
60cd26c6ca1e
37 seconds ago
b1bd49907d55
2 weeks ago
b157b77b1a65
2 weeks ago
b157b77b1a65
2 weeks ago
你会发现多了一行我们刚才提交的 wget-centos7 的image镜像记录,现在我们执行这个镜像的wget命令,看看会不会报错
$ docker run -t -i --rm=true 60 wget http://
-- 15:54:55--
http:///
()... 180.97.33.108, 180.97.33.107
Connecting to
()|180.97.33.108|:80... connected.
HTTP request sent, awaiting response... 200 OK
执行完毕后,docker自动删除这个container,并且至今报错的wget命令无法找到也不会出错了。
第二种安装环境的办法,类似脚本安装,我们预先录入好一系列安装脚本,可以让docker帮我们依次执行这些安装脚本,然后生成image,例如有安装脚本Dockerfile:
# This is a comment
FROM centos
MAINTAINER doublespout &doublespout[@gmail](/user/gmail).com&
RUN yum install -y wget
我们执行如下命令进行创建images
$ mkdir wget
$ vi Dockerfile #将上面内容复制进去
$ docker build -t=&doublespout/wget& ./
#将看到安装脚本的执行输出,安装完成后,执行 docker images 就可以看到我们刚才创建的镜像了
docker images
container 和 host 文件互相拷贝:
1、从container往host拷贝文件:
docker cp &container_id&:/root/hello.txt .
2、从host往container里拷贝文件,比较麻烦一点,首先停止Contaitner(当然不停止也能拷贝)
docker stop &container_name_or_ID&
然后执行拷贝操作,执行完成之后就能看到Contaitner里有这个文件拉
#执行命令找到程序pid
ContainerID=$(docker inspect --format {{.Id}} &container_name_or_ID&)
cp /tmp/tmp.txt /var/lib/docker/aufs/mnt/&ContainerID&/tmp/
四、发布应用程序
我们根据上一段的步骤,手动将node.js环境装好container并且发布成image,并保存&app.js&文件到&/var/nodejs/app.js&,文件内容为:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337); //注意这边不能和官网示例那样监听127.0.0.1
console.log('Server running at http://0.0.0.0:1337/');
执行如下命令,运行container:
$ docker run -d -i -p --name=nodeapp
fa node /var/nodejs/app.js
#32bac9ed8ba055c935bd641da243eedc
其中fa是我创建的镜像id,这个值因人而异,name参数是给这个container取名字,必须是唯一的。
-p参数就是类似端口映射的功能,将主机的端口1337映射到contianer的1337端口,我们可以运行 docker ps,查看正在运行的container,打开浏览器,就能够看到 hello world了。
用同样的方法就可以将我们开发好的应用快速部署到生产服务器上去了。如果在docker run命令需要设置cpu的支持数和权重值可以这样:
-c, --cpu-shares=0
CPU shares (relative weight)
--cpuset=&&
CPUs in which to allow execution (0-3, 0,1)
另外一个小敲门,如果我想要进入一个在运行中的docker container时,可以使用 docker attach,连上这个container的输入和输出。
五、将多个 container 连接起来
我现在先下载一个redis数据库image,这也是以后做项目的常规用法,数据库单独用一个image,程序一个image,利用docker的link属性将他们连接起来。
$ docker pull redis #下载官方的redis镜像,耐心等待一段时间
接着我们执行命令启动redis镜像到一个container,开启redis-server持久化服务
$ docker run --name redis-server -d redis redis-server --appendonly yes
然后我们再启动一个redis镜像的container作为客户端连接它
$ docker run -it --link redis-server:redis --rm redis /bin/bash
redis[@e](/user/e):/data$ env
#想要知道当前我们在主机还是container,注意$前面的host和name
REDIS_PORT_6379_TCP_PROTO=tcp
HOSTNAME=e
TERM=xterm
REDIS_NAME=/boring_perlman/redis
REDIS_PORT_6379_TCP_ADDR=172.17.0.34
#redis服务器ip
REDIS_PORT_6379_TCP_PORT=6379
#redis服务器端口
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/data
REDIS_PORT_6379_TCP=tcp://172.17.0.34:6379
REDIS_PORT=tcp://172.17.0.34:6379
HOME=/
_=/usr/bin/env
$ redis-cli -h &$REDIS_PORT_6379_TCP_ADDR& -p &$REDIS_PORT_6379_TCP_PORT&
172.17.0.34:6379& set a 1 #成功连入redis数据库服务器
172.17.0.34:6379& get a
172.17.0.34:6379&
通过这样的方法,我们就可以将发布的应用程序和数据库分开,单独进行管理,以后对数据库进行升级或者对程序进行调整两者都没有冲突,系统环境变量我们可以通过程序的os模块来获得。
六、文件卷标加载
比如我们想要一个日志文件保存目录,如果直接写入container,那样image升级之后,日志文件处理就比较麻烦了,所以就需要将主机的文件卷标挂载到container中去,挂载方法如下:
$ docker run --rm=true -i -t --name=ls-volume -v /etc/:/opt/etc/ centos ls /opt/etc
boot2docker
ld.so.conf
mke2fs.conf
sysctl.conf
hosts.allow
modprobe.conf
hosts.deny
nsswitch.conf
resolv.conf
ld.so.cache
如果想要挂载后的文件是只读,需要在这样挂载:
-v /etc/:/opt/etc/:ro #read only
我们也可以挂载其他container中的文件系统,需要用到 -volumes-from 参数,我们先创建一个container,他共享/var/目录给其他container。
$ docker run -d -i -t -p
--name nodedev -v /var/ fa node /var/nodejs/app.js
然后我们启动一个ls-var的container来挂载nodedev共享的目录:
$ docker run --rm=true -i -t --volumes-from nodedev --name=aaa1 centos ls /var
我们打印var目录,会发现多了一个nodejs的目录,就是从nodedev中的container挂载过来的。其实我们挂载其他container的路径都是在根目录上的。
七、发布到docker hub上去
我们做完镜像,就需要将镜像发布到docker hub上,供服务器下载然后运行,这类似git仓库,将自己开发的东西丢到云服务器上,然后自己在其他机器或者其他开发者可以下载镜像,并且从这个镜像开始运行程序或者再进行2次制作镜像。
我们需要先登录docker帐号,执行:
$ docker login #输入你在docker官网注册的帐号和密码就可以登录了
$ docker push &用户名&/&镜像名& #将你制作的镜像提交到docker hub上
非官方不允许直接提交根目录镜像,所以必须以&用户名&/&镜像名&这样的方式提交,比如 doublespout/dev 这样
docker快速部署介绍完毕了,总结一下,要创建一个简单项目使用的步骤:
1、安装配置docker
2、pull镜像,安装程序执行环境
3、pull数据库镜像
4、开发程序
5、push 程序的镜像
6、服务器安装配置docker
7、运行数据库镜像
8、运行程序镜像,并且把数据库镜像link进来,并且挂载主机的日志目录或其他上传目录。
使用了docker以后,环境配置只需一次,免去了开发部署一套,测试部署一套,生产又部署一套的麻烦,以后程序搬家也是非常简单。
最后分享一个小敲门,如何像使用linux虚拟机那样运行一个container,比如我我们想要直接登录container执行多个任务,又不想直接借助 docker run 命令,以后我们还想登录到这个container来查看运行情况,比如执行top,ps -aux命令等等。
$ docker run -d -i -t -p
fa /bin/bash
$ docker attach 58
这样我们就可以通过进入container来调试程序了。但是一旦执行ctrl+d或者exit,container就将退出,这个方法也只适用于开发调试的时候。
最后请跳出 container 是一个小的vps的概念,详见另一篇文章.
赞一个,docker是好东西,我在用它做自动化单元测试与CI集成。唯一的感觉就是还用不好img和container的关系,有的时候不得不重新编译IMG,弄得很痛苦。
吴老师好厉害,顶起
还有一个情况我也不知是不是只有我这里出现,就是对于build失败的进程,有的时候没有办法退出。僵死在进程中了,吃了我机器50%多内存,现在还没好办法解决.
好文一篇, 最近也在看docker
这个关系不是 Dockerfile --&(build)–& Image --&(run)–& Container吗?
原来“还用不好……的关系”,是“因为还用不好……”的意思。理解错了。
是的,现在有一个问题就是变动的东西我应该放在哪里的问题,那我我应该把docker当做一个环境使用,还是当做一个容纳所有代码的盒子使用。如果作为盒子的话,那么每当代码的变动,就需要编译img,如果作为环境使用,那么就要把变的部分作为volume进行挂载,但是这种情况我觉得是不是和docker container的本意相违背啊。
根据手头的资料,有这么几点供参考:
坚持『一个container只运行一个应用程序』;
所谓变的部分,即『有状态』(stateful)。为了保证应用的横向扩展,这些状态不应该写在应用的代码中。根据中的Config原则:这些状态变量应该以环境变量的形式提供。例如,在Dockerfile设置一个环境变量DB_SERVER指向数据库服务器的监听地址和端口,应用代码读取环境变量再连接数据库;
像数据库服务器这样的后台服务,必须保持与应用的松散耦合关系(12个原则中的Backing Services原则)。这些服务要么通常直接运行在服务器主机或者虚拟机上。如果也要运行在Container中,目前只见到初步的尝试:,这里有
如果执行应用程序的Container和执行数据库服务器的Container不在同一个主机节点上,它们的联网是一个麻烦事。目前主要有三种方式。
docker 必须赞
能介绍一下Node.js应用开发的CI是怎么做的吗?用了哪些工具?
大赞!最近也在研究Docker,很棒!
同意你的观点,一定要保持松耦合,对于稍大一些的项目不要把container当作vps来用。
3Q,妹纸搞定拉?
这个没出现过,估计是个例
苏大大你们淘宝也用docker吗?
很轻量级又非常好用的工具,配合Dockerfile,超赞
其实有官方的node image。
其实CI这种东西不分语言的,我现在是jenkins CI跑angularjs的unit test和E2E test,有时间写一篇文章给大家分享,至于nodejs的CI是一样的,比如你用github托管。那么用webhook去把代码拉到宿主机,然后触发在jenkins中设定的脚本,然后利用docker的容器挂在代码volume,然后在容器中跑各种各样的测试。之后把输出的日志放到你绑定的volume,这样jenkins就能获得这个reporter,然后就可以了。
我觉得有可能是我用-d,然后jenkins跑失败任务的时候并不释放。
做为开发环境,容器映射本地文件有问题对开发者来说还是不方便。个人还是建议用vargant。
windows下加-v能mount local filesystem吗?Mac下有bug,mount进来后看不到文件。具体:
可以正确加载host文件的,因为windows下实际上跑的就是 virtualbox 的虚拟机,就是在linux下跑,不存在问题,只不过windows文件要拷贝 host 中,需要用sftp来传上去,麻烦点,开发环境肯定是本机,写完代码再丢到docker上去
docker在mac上也是virtualbox,vagrant也是用virtualbox。vagrant mount本地文件没问题,docker就不行。
如果能mount本地文件,不需要sftp,直接在容器里cp -R就行啊。
vagrant用过,最后发现直接virtualbox更爽。
用这些工具其实是统一开发环境,保证每个开发者和产品环境的系统,环境,服务配置一样。
好像还没听说。
感觉还是复杂了,hold 不住。。
用的顺了还是挺方便的
vagrant 刚开始用觉得复杂,甚至觉得还不如自己手动搭,用顺了也觉得不错。
是不是相当于运行在一个虚拟机环境里啊?
可以这么理解,一个轻量级的虚拟机。但由于非常轻量,所以倾向于每个有角色的进程都拥有一个自己的 container。
比如 redis 和 node app 和 mongodb 各有一个 container,然后再串起来用。
(以上是终极理想,配置过程太麻烦)
多少台机器?
我想等更方便的配置工具出来了再进去…
终极配置太麻烦,我是自己用ssh连进去,把数据库,nginx,node,等等环境一股脑儿装好,然后配置好启动命令,发布一个整合的image,有些配置通过加载主机文件来处理。
要做的地道当然你是你说的那种,db和程序环境放2个container
我们是弄统一开发环境,跟多少台机器没关系。越多越能体现vagrant的方便。
你这种做法其实就是把 docker 当成一个轻量级的虚拟机在用嘛,这样移动起来方便。
配置麻烦这件事,我觉得以后肯定会有方便的工具 + 最佳实践来完成的。
使用ssh连接虚拟机一直连不上,connecting之后就显示:
Bad port '0'
error in run: exit status 255
什么情况啊?
你看本文最后,不建议用ssh直接连接container,如果非要连接,可以去文章最底部的超链接地址,那里有教程
嘿嘿 折腾了半天我不玩了 跑去linux上玩妥妥的~
docker能不能放到那些智能路由器上面去呢?是不是有点异想天开了呢?
正是最近看了这篇文章,我才决定把评论改为平铺式的…要不找最新评论太辛苦了。
不玩docker,不玩虚拟机,以开这些东东,电脑啥活也别想干了:(
干货,赞一个
回复以马克,赞?
来自酷炫的
墙是个大问题~~~ 慢得要死要死的~~
这样的利器,就被你用来做私活了?
ibus-daemon -drx 原来ubuntu的拼音输入法是这么用的
求教一个问题. 本地文件和container能保持同步吗? 我目前的理解是,在本地开发-&生成image-&由image建成相应container-&在本地hit相应端口看结果.
如果是这个流程,那我如果本地更改了代码如果想看结果每次都跑一遍这个流程感觉太复杂了啊。 有没有更好的方式?
可以通过文件夹挂载的方式实现。
好的,谢谢了 我去试试
2年过去了。。。。
boot2docker 改用 docker-machine 了。。
又浮上来了
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的}

我要回帖

更多关于 docker打包web应用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信