docker技术剖析--中小企业可以用docker来标准化开发、测试、生产环境

一、使用 Docker 搭建 Tomcat 运行环境

1 Docker与虚拟机

2 搭建过程

2.1 准备宿主系统

准备一个 CentOS 7操作系统,具体要求如下:

  • 必须是 64 位操作系统
  • 建议内核在 3.8 以上

通过以下命令查看您的 CentOS 内核:

 

# uname -r

2.2 安装Docker

 

# yum install docker

可使用以下命令,查看 Docker 是否安装成功:

 

# docker version

若输出了 Docker 的版本号,则说明安装成功了,可通过以下命令启动 Docker 服务:

 

# systemctl start  docker.service

一旦 Docker 服务启动完毕,就可以开始使用 Docker 了。

2.3 下载镜像

以 CentOS 为例,下载一个 CentOS 的镜像:

 

# docker pull centos:7.2.1511

下载完成后,使用命令查看本地镜像列表:

1

2

3


# docker images

REPOSITORY        TAG        IMAGE ID      CREATED      VIRTUAL SIZE

docker.io/centos  7.2.1511   83ee614b834e  9 weeks ago  194.6 MB

2.4 启动容器

容器是在镜像的基础上来运行的,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序。

本例中,所有安装程序都放在了宿主机的/root/software/目录下,现在需要将其挂载到容器的/mnt/software/目录下。

 

#pwd

/root/software

#ls

apache-tomcat-7.0.54.tar.gz  jdk-7u65-linux-x64.gz

使用以下命令即可启动容器:

 

#docker run -it -v /root/software/:/mnt/software/ 镜像 /bin/bash

命令包含以下三个部分:

 

docker run <相关参数> <镜像ID> <初始命令>

其中,相关参数包括:

  • -i:表示以“交互模式”运行容器
  • -t:表示容器启动后会进入其命令行
  • -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>

初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示启动后直接进入bash shell。

2.5 安装软件

为了搭建 Java Web 运行环境,需要安装 JDK 与 Tomcat,下面的过程均在容器内部进行。本例中,选择/opt/目录作为安装目录,首先需要通过cd /opt/命令进入该目录。

2.5.1 安装JDK

首先,解压 JDK 程序包:

 

# tar -zxf /mnt/software/jdk-7u65-linux-x64.gz

然后,移动 JDK 目录:

 

# mv jdk1.7.0_65/ /opt/jdk/

2.5.2 安装Tomcat

首先,解压Tomcat程序包:

 

# tar -zxf /mnt/software/aapache-tomcat-7.0.54.tar.gz

然后,移动Tomcat目录:

 

# mv apache-tomcat-7.0.54/ /opt/tomcat/

2.5.3 编写运行脚本

编写一个运行脚本,当启动容器时,运行该脚本,启动 Tomcat。

首先,创建运行脚本:

 

# touch /root/run.sh

# vi /root/run.sh

然后,编辑脚本内容如下:

 

#!/bin/bash

export JAVA_HOME=/opt/jdk/

export PATH=$JAVA_HOME/bin:$PATH

sh /opt/tomcat/bin/catalina.sh run

最后,为运行脚本添加执行权限:

 

# chmod u+x /root/run.sh

2.6 退出容器

当以上步骤全部完成后,可使用exit命令,退出容器。

随后,可使用如下命令查看正在运行的容器:

 

# docker ps

此时,应该看不到任何正在运行的程序,因为刚才已经使用exit命令退出的容器,此时容器处于停止状态,可使用如下命令查看所有容器:

 

# docker ps -a

CONTAINER ID IMAGE COMMAND  CREATED         STATUS

02bebc3f546a 83ee614b834e "/bin/bash" 12 minutes ago Exited (0) 7 seconds ago

记住以上CONTAINER ID(容器 ID),随后将通过该容器,创建一个可运行 Tomcat 镜像。

2.7 创建Tomcat镜像

使用以下命令,根据某个“容器 ID”来创建一个新的“镜像”:

 

# docker commit 02bebc3f546a centos7:tomcat7

65c88ec597e04812ec3b06b7749578bebcae3aa3d735b565ed25db6818d9d7f3

#docker images

REPOSITORY  TAG IMAGE ID  CREATED    VIRTUAL SIZE

centos7  tomcat7 65c88ec597e0  About a minute ago  514.4 MB

docker.io/centos 7.2.1511 83ee614b834e 9 weeks ago  194.6 MB

该容器的ID是02bebc3f546a,所创建的镜像名是“m centos7:tomcat7”,随后可使用镜像来启动Tomcat容器。

2.8 启动Tomcat容器

首先,新建/root/webapps/ROOT目录,并在该目录下创建一个index.html文件,文件内容如下:

 

<html>

<body>

<h2>Hello World!</h2>

</body>

</html>

正如上面所描述的那样,可以通过“镜像名”或“镜像 ID”来启动容器,与上次启动容器不同的是,现在不再进入容器的命令行,而是直接启动容器内部的 Tomcat 服务。此时,需要使用以下命令:

 

#docker run -d -p 8080:8080 -v /root/webapps/:/opt/tomcat/webapps/ --name tomcat7 centos7:tomcat7 /root/run.sh

其中,相关参数包括:

  • -d:表示以“守护模式”执行/root/run.sh脚本,此时 Tomcat 控制台不会出现在输出终端上。
  • -p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 8080 端口,这样就向外界暴露了 8080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
  • -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
  • --name:表示容器名称,用一个有意义的名称命名即可。

在浏览器中,输入宿主IP和端口号,即可访问 Tomcat:

注:192.168.53.5是宿主机的ip地址

2.9 最终示意图:

至此搭建容器的tomcat环境成功

2.10 停止Tomcat容器

 

# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED    STATUS

f23598b6544d  mytomcat:1.0  "/root/run.sh"  6 minutes ago   Up 6 minutes

# docker stop f23598b6544d

2.11 移除容器

 

# docker ps -a

CONTAINER ID  IMAGE  COMMAND CREATED STATUS

f23598b6544d mytomcat:1.0 "/root/run.sh" 8 minutes ago  Exited (137)

#docker rm f235

# docker ps -a

CONTAINER ID  IMAGE COMMAND CREATED STATUS

二、docker应用案例:

对于中小企业来说,搭建paas没有那个精力,也没那个必要,中小企业可以用docker来标准化开发、测试、生产环境。

画了简单的图:

docker占用资源小,在一台E5 128G内存的服务器服务器上部署100个容器都绰绰有余,可以单独抽一个容器或则直接在宿主物理主机上部署samba,利用samba的home分享方案将每个用户的home目录映射到开发中心和测试部门的windows机器上。可以针对项目组,由架构师搭建好一个标准的容器环境供项目组和测试部门使用,每个开发工程师可以拥有自己单独的容器,通过docker run -v 将用户的home目录映射到容器中。需要提交测试时,只需要将代码移交给测试部门,然后分配一个容器使用-v 加载测试部门的home目录启动即可。这样,在公司内部的开发、测试基本就统一了,不会出现开发提交的代码,测试部门部署不了的问题。

测试发布测试通过的报告后,架构师再一次检测容器环境,就可以直接交由部署工程师将代码和容器分别部署到生产环境中了。

1、 构建一个标准的tomcat容器环境,例如上面知点中用docker commit生成的centos7:tomcat7容器镜像

2、 在宿主机上搭建samba环境

安装samba(centos 7/redhat 7提供的samba版本是samba 4)

开机启动, 启动服务

查看监听端口(使用netstat或ss命令查看连接状态)

防火墙放行

给开发工程师、测试工程师、部署工程师创建samba账号

Samba默认是共享samba用户的宿主目录的

在所建用户的宿主目录下创建ROOT目录,该目录下用于存放开发部门的jsp代码。

将开发工程师用户的home目录映射到开发工程师的windows主机上

创建开发工程师所需要的容器,将/home/kaifa目录挂载到容器的/opt/tomcat/webapps/目录

test.jsp内容如下:

时间: 2024-10-26 10:18:04

docker技术剖析--中小企业可以用docker来标准化开发、测试、生产环境的相关文章

docker技术剖析--镜像、容器管理

防伪码:博观而约取,厚积而薄发                                 docker技术剖析--镜像.容器管理 一.Docker简介 Docker是什么? Docker的英文本意是"搬运工",在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的.可移植的.自管理的组件,可以在任何主流系统中开发.调试和运行. 说白了,docker是一种用了新颖方式实现的轻量级虚拟机,

docker技术剖析--docker网络

防伪码:不经一番寒彻骨,怎得梅花扑鼻香.                 docker技术剖析--docker网络 一. Docker 中的网络功能介绍 默认情况下,容器可以建立到外部网络的连接,但是外部网络无法连接到容器. Docker 允许通过外部访问容器或容器互联的方式来提供网络服务 外部访问容器: 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过  -P  或  -p  参数来指定端口映射. 练习环境:运行一个容器,提供web服务和ssh服务 宿主机启用路由转发(net.

docker技术剖析--dockerfile and registry(构建容器和私有仓库)

防伪码:梅须逊雪三分白,雪却输梅一段香 docker技术剖析--dockerfile and registry(构建容器和私有仓库) 一.根据Dockerfile构建出一个容器 1.Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.

docker技术剖析--docker资源限制及应用总结

防伪码:有花堪折直须折,莫待无花空折枝. 一.本文将介绍 cgroup 如何做到内存,cpu 和 io 速率的隔离 本文用脚本运行示例进程,来验证 Cgroups 关于 cpu.内存.io 这三部分的隔离效果. 测试机器环境(docker 1.12版本) 启动 Cgroups systemctl enable cgconfig.service systemctl start cgconfig.service 执行 mount 命令查看 cgroup 的挂载点 从上图可以看到 cgroup 挂载在

docker技术剖析--docker资源限制及应用总结 for centos7.2

http://hongge.blog.51cto.com/ Docker(linux container)所依赖的底层技术 1 Namespace 用来做容器的隔离,有了namespace,在docker container里头看来,就是一个完整的linux的世界.在host看来,container里的进程,就是一个普通的host进程,namespace提供这种pid的映射和隔离效果,host承载着container,就好比一个世外桃源. namespace包括:pid namespace.pi

docker技术剖析--docker1.12版本+swarmkit

防伪码:为目标,晚卧夜半,梦别星辰,脚踏实地,凌云舍我其谁! 1.Docker Swarm  是什么? Docker Swarm 是一个用于创建 Docker 主机(运行 Docker 守护进程的服务器)集群的工具, 使用 Swarm 操作集群,会使用户感觉就像是在一台主机上进行操作 docker1.12 集成了 swarmkit, 使你可以不用安装额外的软件包, 使用简单的命令启动创建 docker swarm 集群. 如果你在运行 Docker 1.12 时,你就可以原生创建一个 Swarm

docker技术剖析--docker supervisor、compose

防伪码:有志不在年高,无志空活百岁. 一.使用 Supervisor 来管理进程 Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本. 例如:docker  run  –d  镜像  /run.sh 另外就是安装进程管理工具. 本节将使用进程管理工具 supervisor 来管理容器中的多个进程.使用 Sup

docker技术剖析--docker网络(二)docker宿主机之间容器互通

http://hongge.blog.51cto.com/ 多台物理主机之间的容器互联(暴露容器到真实网络中) docker 默认的桥接网卡是 docker0 .它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 vethxxx,而 docker 只是把所有这些网卡桥接在一起,如下: 这样就可以把这个网络看成是一个私有的网络,通过 nat 连接外网,如果要让外网连接到容器中,就需要做端口映射,即 -p 参数. 如果在企业内部应用,或则做多个物理主机的集群,可能需要将多个物理

Docker标准化开发测试和生产环境

对于大部分企业来说,搭建 PaaS 既没有那个精力,也没那个必要,用 Docker 做个人的 sandbox 用处又小了点. 可以用 Docker 来标准化开发.测试.生产环境. Docker 占用资源小,在一台 E5 128 G 内存的服务器上部署 100 个容器都绰绰有余,可以单独抽一个容器或者直接在宿主物理主机上部署 samba,利用 samba 的 home 分享方案将每个用户的 home 目录映射到开发中心和测试部门的 Windows 机器上. 针对某个项目组,由架构师搭建好一个标准的