❶ 如何使用docker部署web应用
步骤一 - 创建Dockerfile
如下的Dockerfile可以满足以上的要求:
**FROM** golang:1.6
*# Install beego and the bee dev tool*
**RUN** go get github.com/astaxie/beego && go get github.com/beego/bee
*# Expose the application on port 8080*
**EXPOSE** 8080
*# Set the entry point of the container to the bee command that runs the*
*# application and watches for changes*
**CMD** ["bee", "run"]
第一行,
FROM golang:1.6
将Go的官方映像文件作为基础映像。该映像文件预安装了 Go 1.6 . 该映像已经把 $GOPATH 的值设置到了 /go 。所有安装在 /go/src 中的包将能够被go命令访问。
第二行,
RUN go get github.com/astaxie/beego && go get github.com/beego/bee
安装 beego 包和 bee 工具。 beego 包将在应用程序中使用。 bee 工具用语在开发中再现地重新加载咱们的代码。
第三行,
EXPOSE 8080
在开发主机上利用容器为应用程序开放8080端口。
最后一行,
CMD ["bee", "run"]
使用bee命令启动应用程序的在线重新加载。
步骤二 - 构建image
一旦创建了Docker file,运行如下的命令来创建image:
docker build -t ma-image .
执行以上的命令将创建名为ma-image的image。该image现在可以用于使用该应用程序的任何人。这将确保这个团队能够使用一个统一的开发环境。
为了查看自己的系统上的image列表,运行如下的命令:
docker images
这行该命令将输出与以下类似的内容:
REPOSITORY TAG IMAGE ID CREATED SIZE
ma-image latest 8d53aa0dd0cb 31 seconds ago 784.7 MB
golang 1.6 22a6ecf1f7cc 5 days ago 743.9 MB
注意image的确切名字和编号可能不同,但是,应该至少看到列表中有 golang 和 ma-image image。
步骤三 - 运行容器
一旦 ma-image 已经完成,可以使用以下的命令启动一个容器:
docker run -it --rm --name ma-instance -p 8080:8080 \
-v /app/MathApp:/go/src/MathApp -w /go/src/MathApp ma-image
让咱们分析一下上面的命令来看看它做了什么。
。docker run命令用于从一个image上启动一个容器
。-it 标签以交互的方式启动容器
。--rm 标签在容器关闭后将会将其清除
。--name ma-instance 将容器命名为ma-instance
。-p 8080:8080 标签允许通过8080端口访问该容器
。-v /app/MathApp:/go/src/MathApp更复杂一些。它将主机的/app/MathApp映射到容器中的/go/src/MathApp。这将使得开发文件在容器的内部和外部都可以访问。
。ma-image 部分声明了用于容器的image。
执行以上的命令将启动Docker容器。该容器为自己的应用程序开发了8080端口。无论何时做了变更,它都将自动地重构自己的应用程序。自己将在console(控制台)上看到以下的输出:
bee :1.4.1
beego :1.6.1
Go :go version go1.6 linux/amd64
2016/04/10 13:04:15 [INFO] Uses 'MathApp' as 'appname'
2016/04/10 13:04:15 [INFO] Initializing watcher...
2016/04/10 13:04:15 [TRAC] Directory(/go/src/MathApp)
2016/04/10 13:04:15 [INFO] Start building...
2016/04/10 13:04:18 [SUCC] Build was successful
2016/04/10 13:04:18 [INFO] Restarting MathApp ...
2016/04/10 13:04:18 [INFO] ./MathApp is running...
2016/04/10 13:04:18 [asm_amd64.s:1998][I] http server Running on :8080
❷ 项目为什么用docker
回答之前,先反问一个问题:为什么不用Docker呢?
Docker出现之前,有现在还在用的VMWare虚拟机,有Ghost,部分解决了服务器安装配置的琐碎工作,但是没有解决运行环境的问题。比如常见的环境不一致的问题:开发环境能运行,测试生产环境有bug?还有就是每次新服务器、新环境搭建时无穷无尽的问题。
那么Docker出现后,整个环境被打包起来,也就是将所有安装配置代码化自动化了,结合资源编排和云服务,可以秒启一个集群化的web服务系统,如果没有容器技术是做不到的。Docker是使用最普遍的容器技术,事实上的容器技术标准。
推荐看一个Docker秒启Web服务的视频:https://www.ixigua.com/i6799872807397229068/
我可以举几个例子,就可理解为什么要用docker?
用传统的方式上线一个WEB项目,我们的一般做法是在线上服务器中,安装WEB服务器,然后装好数据库,装好其他需要的软件最后把本地己打包好的代码上传至服务器,然后重启就好了。
如果一台服务器上要部署多个项目,每个项目之间无论是在资源的使用,还是之间的冲突。都会让人崩溃。更别提有不同的开发语言和开发团队。
现在我们有docker ,可以用docker把应用直接打包封装到一个容器中。容器之间有着进程之间的隔离,在容器中操作不会影响到其他容器的使用。
以前开发一套应用,必须开发机上安装环境,测试机上安装环境,然后部署的服务器上安装环境,而且由于使用的机器不是同样的操作系统,所以有时会出现在本机上没问题,测试时有出问题,甚至开发测试都没问题,一上线就BUG满满。估计大家遇到过与测试之间撕B的场景。
用上docker,无论是在开发机,测试机,生产环境以容器运行,使应用在三种环境下保持一致。
对比虚拟机,docker占用资源更小。而且可以提高服务器的资源利用率。
Docker可以将复杂的应用程序运行环境部署打包,这样就避免开发人员或者运维人员反复部署相同的应用程序运行环境。在如今云计算盛行的情况下,分布式应用和管理变得简单了。基本上云计算服务平台都提供了现成的群集计算服务,这些群集服务无一例外都是基于docker镜像构建的。群集应用的要求就是每个节点的应用程序版本以及环境要一致,一个docker镜像就是一个虚拟主机,只要放到容器中即可实现单机独立运行的效果,大大简化了分布式群集应用的实现过程
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
云计算、大数据,移动技术的快速发展,加之企业业务需求的不断变化,导致企业架构要随时更改以适合业务需求,跟上技术更新的步伐。毫无疑问,这些重担都将压在企业开发人员身上;团队之间如何高效协调,快速交付产品,快速部署应用,以及满足企业业务需求,是开发人员亟需解决的问题。Docker技术恰好可以帮助开发人员解决这些问题。
为了解决开发人员和运维人员之间的协作关系,加快应用交付速度,越来越多的企业引入了DevOps这一概念。但是,传统的开发过程中,开发、测试、运维是三个独立运作的团队,团队之间沟通不畅,开发运维之间冲突时有发生,导致协作效率低下,产品交付延迟, 影响了企业的业务运行。Docker技术将应用以集装箱的方式打包交付,使应用在不同的团队中共享,通过镜像的方式应用可以部署于任何环境中。这样避免了各团队之间的协作问题的出现,成为企业实现DevOps目标的重要工具。以容器方式交付的Docker技术支持不断地开发迭代,大大提升了产品开发和交付速度。
此外,与通过Hypervisor把底层设备虚拟化的虚拟机不同,Docker直接移植于Linux内核之上,通过运行Linux进程将底层设备虚拟隔离,这样系统性能的损耗也要比虚拟机低的多,几乎可以忽略。同时,Docker应用容器的启停非常高效,可以支持大规模的分布系统的水平扩展,真正给企业开发带来福音。
Docker很大程度上解决了上述问题,提高开发和运维的工作效率,提高企业的工作效率。
任何一项新技术的出现,都需要一个发展过程,比如云计算为企业所接受用了将近五年左右时间,OpenStack技术也经历了两、三年才受到人们的认可。因此,虽然Docker技术发展很快,但技术还不够成熟,对存储的灵活的支持、网络的开销和兼容性方面还存在限制,这是Docker没有被企业大范围使用的一个主要原因。另外一个原因是企业文化是否与DevOps运动一致,只有企业支持DevOps,才能更大地发挥Docker的价值。最后一个原因就是安全性问题,Docker对于Linux这一层的安全的隔离还有待改进,才能进一步得到企业的认可。
当服务器运行多个应用程序时,为了防止应用程序之间所需的环境依赖产生冲突或误操作影响,所以需要做好隔离,最大限度利用服务器资源环境,docker就把它变成了一个个沙盒。沙盒与沙盒之间互不影响
这是一个容器,为了防止一个项目的程序运行异常影响其他项目程序的正常运行,可以理解为隔离不同项目的程序,简单来说类似于一个虚拟的盒子或系统,里面运行独立的项目程序,共享系统底层资源。
docker跟项目有什么关系,运维玩就行了
❸ 如何使用Docker快速部署go-web应用程序
大部分Go应用程序可以编译为一个单一的二进制文件。都是对于Web应用程序来说,可能还有自己的模板和配置文件。如果在一个项目中包含大量的文件,可能会因为文件的不同步而导致出错或造成更严重的错误。
本文将通过beego应用程序在docker中的快速部署,来介绍如何使用docker简化go-web应用程序的部署。通过该文章您可以了解如何使用Docker部署Go Web应用程序,以及Docker如何帮您改善开发工作流和部署过程
❹ 如何使用 Docker 部署容器
设想,为了推出一个网站,您不必从裸机安装一个完整的服务器。 而不是安装操作系统,然后安装服务器软件,然后部署精心设计的应用程序或站点,您可以简单地在一个独立的包中开发所有内容,并使用单个命令将其推出。
这是使用容器的众多好处之一。它们使开发和部署周期变得异常高效。但是你如何部署这些容器?我想在这里指导你完成这个过程。我们将专注于在Ubuntu Server 18.04上部署基本的NGINX Web服务器作为容器。所有这一切都将在Docker的帮助下完成。
为了成功将NGINX部署为容器,您需要具备以下条件:
- 一个安装了Docker的Ubuntu Server 18.04的运行实例。
- 一个docker 用户组的成员用户
是的,有了这两部分,你就准备好了。
您部署的每个容器都将基于从DockerHub中提取的镜像。 您可以下拉单个镜像并根据需要随时使用。 DockerHub上还有许多镜像用于单个应用程序或平台。 以NGINX为例。 如果你在DockerHub上搜索NGINX,你会得到大约56,172个条目。 这并不意味着每个条目都是您可以使用的可用图像。
图像命名如下:
例如,对于NGINX,您可能会找到一个名字为的镜像:
或许你可能找到:
您也看到了,有几乎所有需要的镜像。
在使用图像之前,必须将其保存在本地驱动器上。 有两种方法可以做到这一点:
- 直接使用pull命令
- 间接地,在容器部署过程中。
要从DockerHub中拉取图像,您将打开一个终端窗口并发出命令:
如果你想拉取Ingress图像,该命令是:
当你拉取你需要的图像之后,你可以使用命令确认是否存在:
上面的命令将列出你拉取的所有镜像(图A)。
拉取随意图像时要谨慎。 为什么? 因为你永远不知道创造它们的原因。 容器可能包含恶意代码,可能会对您的网络或数据造成严重破坏。 因此,最好只使用官方图像(例如NGINX图像)。
现在该部署容器了, 如果您尚未拉取镜像,则在部署阶段将下拉所需要的镜像。 由于我们拉取官方NGINX图像,我们将使用它。
要部署容器,请使用docker命令,如下所示:
备注:
- NAME等于您要为容器提供的名称(这可以是任何内容,例如nginx-webserver)。
- PORTS您要使用的端口(以NETWORK PORT:CONTAINER PORT形式)。
- IMAGE用于容器的图像(例如nginx)。
因此,部署NGINX容器的基本命令是:
容器将要部署,NGINX Web服务器将在端口80上可用于本地网络。但是,如果已在服务器上使用端口80来部署容器,该怎么办? 您可以将其部署在网络端口8080上,如下所示:
此时,您可能会看到下一个问题。 运行上述命令之一后,不返回bash提示符(图B)。
你如何运行一个容器,并获得你的bash提示? 为此,您必须以分离模式运行容器。 在此之前,您必须使用键盘组合[Ctrl] +终止当前容器。 该组合将返回提示并杀死容器。
要确定容器是否运行,使用命令:
将列出所有容器及其状态(图C)。
如果容器仍在运行,我们必须在同一端口部署另一个容器之前将其终止(否则端口会发生冲突,从而阻止容器部署)。 要杀死正在运行的容器,首先需要Container ID(随机字符串)。 发出docker ps -a命令时会显示此字符串。 要终止正在运行的容器,使用命令:
其中CONTAINER_ID是相关容器的ID。
然后,您可以使用以下命令删除容器:
其中CONTAINER_ID是相关容器的ID。
请注意,您不必输入完整的Container ID,字符串的前四个字符就足够了。
现在,要以分离模式部署容器,命令是:
这次你不仅会得到你的提示,而且Docker会为你显示容器ID(图D)。
如果你想在正在运行的容器上工作怎么办? 假设您想对NGINX进行更改甚至开始开发它将显示的网站? 因此,您必须访问容器。 因此,您需要Container ID。 使用ID,发出命令:
其中CONTAINER_ID是容器的ID。
您现在应该处于运行容器提示符(图E)中,您可以在其中开始处理NGINX服务器。
要退出容器,只需键入命令exit。
七、比你想象的容易
希望到现在为止,您看到容器部署并不像您想象的那样具有挑战性。 在Docker的帮助下,您可以在几分钟内推出专业版的应用和服务。
原文链接:
❺ 用eclipse开发web项目如何打包docker的tar部署给linux服务器
这个需要了解一下dockerfile的制作,制作自己的镜像,并不是直接使用工具之类的进行打包,需要编写构建。在dockerfile构建好之后,再编写docker-compose的yaml文件,前提还是得有自己的镜像仓库。
将自己做好的docker镜像push到私有镜像仓库(确保镜像是正确且可用的),在新的环境里,只需要搭建一下docker环境,直接使用docker-compose up docker-compose的yaml文件,即可直接搭建好你的项目。
再向上延伸一点的话,就可以了解了解K8S。
❻ 如何在docker中部署web应用
需要在当前目录下建立如下三个文件。
1).gitignore
node_moles/*
2)package.json
{
"name": "docker-centos-hello",
"private": true,
"version": "0.0.1",
"description": "Node.js Hello world app on CentOS using docker",
"author": "Daniel Gasienica <[email protected]>",
"dependencies": {
"express": "3.2.4"
}
}
3)server.js
var express = require('express'),
app = express(),
redis = require('redis'),
RedisStore = require('connect-redis')(express),
server = require('http').createServer(app);
app.configure(function() {
app.use(express.cookieParser('keyboard-cat'));
app.use(express.session({
store: new RedisStore({
host: process.env.REDIS_HOST || 'localhost',
port: process.env.REDIS_PORT || 6379,
db: process.env.REDIS_DB || 0
}),
cookie: {
expires: false,
maxAge: 30 * 24 * 60 * 60 * 1000
}
}));
});
app.get('/', function(req, res) {
res.json({
status: "ok"
});
});
var port = process.env.HTTP_PORT || 3000;
server.listen(port);
console.log('Listening on port ' + port);
配置Dockerfile
我们需要通过Dockerfile来配置我们的docker镜像。
FROM ubuntu:14.04
MAINTAINER zengjinlong <[email protected]>
RUN apt-get update
#Install Redis
RUN apt-get -y -qq install python redis-server
RUN apt-get -y -qq install wget
#Install Node
RUN cd /opt && \
wget http://nodejs.org/dist/v0.10.33/node-v0.10.33-linux-x64.tar.gz && \
tar -xzf node-v0.10.33-linux-x64.tar.gz && \
mv node-v0.10.33-linux-x64 node && \
cd /usr/local/bin && \
ln -s /opt/node/bin/* . && \
rm -f /opt/node-v0.10.33-linux-x64.tar.gz
#Set the working directory
WORKDIR /src
j
CMD ["/bin/bash"]
有了Dockerfile之后,就可以通过docker build来建立我们的镜像。
docker build -t minimicall/node_web:0.1 .
这里需要说明的是,你需要灵活的根据你的ubuntu真实的环境来变化中间的指令。例如,当我们第一次执行的时候,告诉我找不到python redis-server,我想应该是我的apt 源太out了,所以,我加了RUN apt-get update.就解决了这个问题。
当我wget的时候,说没有这个指令,那么我就得安装wget.而nodejs的地址,也是我去从nodejs的官网查找的。所以碰到问题,具体问题具体分析。
查看我们建立的镜像。
micall@micall-ThinkPad:~/docker/nodejs_web_app$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
minimicall/node_web 0.1 730770dff17f 6 minutes ago 268.7 MB
centos centos6 70441cac1ed5 2 weeks ago 215.8 MB
ubuntu 14.04 5506de2b643b 4 weeks ago 199.3 MB
启动我们的镜像:
sudo docker run -i -t --rm \
> -p 3000:3000 \
> -v `pwd`:/src \
> minimicall/node_web:0.1
这时候我们已经进入到了这个镜像启动的容器里面了。
root@d80a2ed6b4c0:/src#
执行下列命令
root@d80a2ed6b4c0:/src# npm install --quiet > /dev/null
npm WARN engine [email protected]: wanted: {"node":"<0.9.0"} (current: {"node":"0.10.33","npm":"1.4.28"})
root@d80a2ed6b4c0:/src# npm install -g nodemon --quiet > /dev/null
root@d80a2ed6b4c0:/src# ls
Dockerfile Dockerfile~ index.js~ package.json server.js src
Dockerfile.centos index.js node_moles package.json~ server.js~
root@d80a2ed6b4c0:/src# nodemon server.js
22 Nov 14:37:31 - [nodemon] v1.2.1
22 Nov 14:37:31 - [nodemon] to restart at any time, enter `rs`
22 Nov 14:37:31 - [nodemon] watching: *.*
22 Nov 14:37:31 - [nodemon] starting `node server.js`
Listening on port 3000
这个时候用浏览器打开:http://localhost:3000/,会的到如下结果。
{
"status": "ok"
}
❼ Docker部署WEB 应用
1、环境:阿里云服务器
2、CentOS7系统
3、Docker成功部署
这里前提docker 已经成功部署啦,现有有一个简单的测试案例,在docker上部署一个应用从而访问web。
接下来让我们尝试使用 docker 构建一个 web 应用程序。
我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。
通过 -p 参数来设置一样的端口:
docker ps 查看正在运行的容器
容器内部的 5000 端口映射到我们本地主机的 5000 端口上。
这时我们可以通过浏览器访问WEB应用
发现 访问失败
指定外网端口为5000,
1. 本地测试能否打开测试页
本地没有问题。
2. 浏览器中访问
在任意一台电脑上输入公网IP+端口号 (此端口号为运行WEB应用时指定的端口号5000) 如我的阿里云公网IP为123.11.11.11 此时在任意一台有网络的浏览器地址栏输入公网IP:http://123.11.11.11:5000 应该会出现测试页
但现在出现如下图所示:
显示打不开
查啦大量资料,以前曾经也解决过,一定弄明白自已购买的地区后,再去设置安全组的配置规则。
***1. 登录阿里云管理控制台****
2.找到云服务器ECS-概览
5. 手动添加端口5000
6. 最后保存,再从浏览器地址栏输入公网IP加端口号5000成功显示测试页如图:
❽ 部署 Docker Registry WebUI
私服安装成功后就可以使用 docker 命令行工具对 registry 做各种操作了。然而不太方便的地方是不能直观的查看 registry 中的资源情况。如果可以使用 UI 工具管理镜像就更好了。这里介绍两个 Docker Registry WebUI 工具
两个工具的功能和界面都差不多,我们以 docker-registry-fontend 为例讲解
我们使用 docker-compose 来安装和运行, docker-compose.yml 配置如下:
运行成功后在浏览器访问:http://192.168.75.133:5000