Docker-构建Java应用服务

使用Docker容器构建Tomcat服务器

Posted by carm on April 8, 2016

Docker数据卷应用—构建Java应用服务

关于Docker

Docker容器是一种轻量级的虚拟技术,可以快速搭建好开发和运行环境,并且该环境可以各种平台上运行。这就为测试和产品部署节省了大量的人力和时间。目前,由官方维护的Docker Hub上已经涌现出大量的基础镜像,读者可以去查看Docker Hub。不过由于国内GWF的原因,从Docker Hub下载镜像显然没那么容易。

经过一上午亲自实践后,偷着午休时间记录下学习过程,以防遗忘。

关于数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,使用它可以达到以下效果

  • 数据卷在容器间共享和重用
  • 数据卷在宿主机和容器之间共享目录
  • 数据卷在宿主和容器间共享单个文件
  • 对数据卷的修改不会对镜像产生影响
  • 数据卷一直存在直到没有任何容器使用它

本文中的所有操作都需使用root权限,ubuntu下可使用sudo来获取root权限

从Docker Hub下载tomcat:latest镜像

官方链接:docker hub

$ docker pull tomcat

挂载宿主机目录作为数据卷

$ mkdir -p $HOME/tomcat/webapps
$ docker run -d -p 8080:8080 \
  -v $HOME/tomcat/webapps:/usr/local/tomcat/webapps \
  --name tomcat1 tomcat
# -d: --detach 后台运行
# -p: 宿主主机端口:容器端口
# -v: 宿主主机目录:容器内目录
# --name: 为容器命名为tomcat1   
# tomcat: tomcat镜像
# 通过localhost:8080测试下tomcat是否启动成功
# 将project.WAR文件放入$HOME/tomcat/webspps下,测试localhost:8080/project

多个容器共享数据卷

# 创建容器tomcat2,使用容器tomcat1的数据卷
$ docker run -d -p 8888:8080 --columes-from=tomcat1 --name tomcat2 tomcat

# 创建新容器tomcat2,引用tomcat1的数据卷。即tomcat1与tomcat2容器使用的是同一数据卷/usr/local/tomcat/webapps
# 测试:localhost:8888/project ### 查看容器配置 `docker inspect tomcat2`
# 部分配置如下:
"VolumesFrom": [
            "tomcat1"
        ]
"Mounts": [
        {
            "Source": "/home/docker/tomcat/webapps",
            "Destination": "/usr/local/tomcat/webapps",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        }
    ]
"Ports": {
            "8080/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "8888"
                }
            ]
        }

利用卷进行数据备份

# 备份

# 通过ubuntu镜像新建一个容器,引用tomcat1容器的数据卷,并创建一个数据卷映射
# 在用户目录$HOME下创建backup文件夹

$ cd ~ && mkdir backup
$ docker pull ubuntu:15.10
# 使用ubuntu镜像作为专门用于挂载数据卷的容器
$ docker run --volumes-from=tomcat1 -v $HOME/backup:/backup \
  ubuntu:15.10 tar zcf /backup/www.tar.gz /usr/local/tomcat/webapps/

# 将宿主机$HOME目录下的backup文件映射到容器的/backup目录,通过tar命令将/usr/local/tomcat/web	apps目录压缩打包到/backup数据卷中,
# 该数据卷又映射到了宿主机$HOME/backup,故容器中的数    	据就保存到了宿主机中,文件名为:www.tar.gz

# 恢复

# 创建容器tomcat3,并创建数据卷
$ docker run -d -p 8889:8080 -v /usr/local/tomcat/webapps --name tomcat3 tomcat
# -v参数:在容器中创建数据卷/usr/local/tomcat/webapps
# 基于ubuntu镜像创建新容器来关联到宿主机目录$HOME/backup 并将数据解压到数据卷中
# 新容器与tomcat3容器共享数据卷
$ docker run --volumes-from=tomcat3 -v $HOME/backup:/backup ubuntu:15.10 tar -zxf /backup/www.tar.gz
# 测试: localhost:8889/project

注:本文不限转载,但转载时请注明出处