ITKeyword,专注技术干货聚合推荐

注册 | 登录

Docker 实战——将 JavaWeb 应用容器化

smartbetter 分享于 2017-08-24

推荐:减少使用Java应用服务器,迎接Docker容器

【编者的话】随着Docker的发展,越来越多的应用开发者开始使用Docker。James Strachan写了一篇有关Java开发者如何使用Docker进行轻量级快速开发的文章。他告诉我

2019阿里云双11返场狂欢继续,
地址https://www.aliyun.com/1111/2019/home

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/77512260

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker 提供了一种在安全、可重复的环境中自动部署软件的方式,快速的持续集成,服务的弹性伸缩,部署简单,解放运维,更为企业节省了机器资源。在2016年的京东618,已经有15万个 Docker 实例,所有业务全部容器化。

Docker 核心技术:Build(构建)、Ship(运输)、Run(运行)
Docker 镜像
Docker 容器:本质就是一个进程。
Docker 仓库:https://hub.docker.com/https://c.163.com/

还需要知道,Docker 网络类型有 Bridge、 Host、None 三种:

Bridge:桥接,做端口映射。
端口映射:Docker可以指定容器内的某一个端口和容器所在主机上的某一个端口,两者之间做一个映射。当你访问主机上端口的时候,其实就是访问容器里面的那个端口。

Host:启动容器时指定使用 Host,那么容器将不会获得独立的 Network Namespace,而是和主机使用一个,这个时候容器将不会虚拟出自己的网卡、配置自己的 ip 等等,而是会使用宿主机上的 ip 和端口。

None:没有网络,这种情况 Docker 将不会和外界进行通信。

1.Linux 安装 Docker

$ ssh root@192.168.2.20            //SSH连接,使用 sudo 或 root 权限的用户登入终端
# uname -r                         //检查内核版本,需要64-bit,内核版本3.10+
# yum update                       //更新yum,确保yum是最新的

//添加 yum 仓库(下面命名全部复制执行)
#  tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

# yum install -y docker-engine     //安装
# systemctl start docker.service   //启动,centos6 启动要使用 service docker start 命令
# docker version                   //验证安装是否成功,有client和service两部分表示docker安装启动都成功了。

安装启动都成功会显示:

Client:
 Version:      17.05.0-ce
 API version:  1.29
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:06:25 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.05.0-ce
 API version:  1.29 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:06:25 2017
 OS/Arch:      linux/amd64
 Experimental: false

配置docker开机自启动:

# systemctl enable docker.service   //配置docker开机自启动

安装过程中可能会报错误:

https://yum.dockerproject.org/repo/main/centos/6/6Server/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - 
"The requested URL returned error: 403 Forbidden"

解决方法:

/etc/yum.repos.d/docker.repo 中 baseurl 变量不正确,先找到自己系统的版本(目前只有6和7两种选择),然后把变量的地方替换成
6或7即可。

2.Linux 卸载 Docker

# yum list installed | grep docker      //列出安装的软件包
# yum -y remove docker-engine.x86_64    //移除列出的软件包
# yum -y remove docker-engine-selinux.noarch
# rm -rf /var/lib/docker                //删除所有镜像、容器和组

3.Docker 运行 Nginx

Docker命令执行过程:

推荐:Docker mesos在生产环境的应用

我们是一家做生鲜电商的公司,从系统搭建初期,我们就采用微服务的架构,基于DEVOPS体系来不断提高我们的交付的质量和效率, 随着业务和团队规模的发展,服务逐

Docker命令执行过程

# docker pull nginx     //默认从Docker远程仓库hub.docker.com拉取镜像 docker pull [OPTIONS] NAME [:TAG]
# docker images         //查看本机都有哪些镜像 docker images [OPTIONS] NAME[:TAG]
# docker ps             //查看运行中的镜像
# docker run -d -p 8080:80 nginx   //Docker 后台运行镜像,返回容器id。端口映射 主机端口:容器端口。

返回容器id为:

888882c841add37f63d276977fdef427e95aca4d05d5607aa64a471abc4d9e18

此时访问主机的 8080,已经发现可以返回nginx欢迎界面了。

Welcome to nginx

另外,还有一些常用 Docker 命令如下:

# docker stop 88            //停止Docker容器
# docker restart 88         //重启Docker容器
# netstat -na|grep 8080     //检查端口是否开放,LISTEN状态则成功

进入 Docker 容器内部:

# docker exec --help              //查看docker exec命令的帮助。docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
# docker exec -it ebbd6c bash     //进入容器内部,ebbd6c是容器id的前几位(写的位数无所谓)
root@ebbd6c160860:/# which nginx  //查看Nginx目录位置

4.制作自己的Docker 镜像并运行

准备工作:

# docker pull nginx
# docker pull tomcat
# vim Dockerfile

编写代码如下:

from tomcat
MAINTAINER name name@example.com
COPY myproject.war /usr/local/tomcat/webapps

解释如下:

from tomcat 表示以 tomcat 的镜像为起点
MAINTAINER 配置该镜像所有者姓名、联系方式
复制项目 war 到 tomcat webapps 目录下,目录地址可在下载 tomcat 镜像的说明页查看 https://hub.docker.com/_/tomcat/

然后执行:

# docker build -t myproject:latest .     //构建Docker,-t指定'name:tag'

制作成功,此时就可以运行该 Docker 了,运行方法参照 3.Docker 运行 Nginx 部分。到此使用 Docker 容器化 Web 应用全部结束了。

推荐:让java-web应用内嵌类node.js容器:保护资产与已有投入

抱怨过了,街也骂过了(第一篇,第二篇,第三篇,第四篇)。那么重要的是我们其实需要解决问题。 在node.js的压力下,个人选择jvm上内嵌类似nodejs的js容器作为

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/77512260 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。