首页 > 代码库 > Spring Boot教程34——Docker入门

Spring Boot教程34——Docker入门

Spring Data介绍
Spring Data项目是Spring用来解决数据访问问题的一揽子解决方案。Spring Data包含了大量关系型数据库及非关系型数据库的数据访问解决方案。Spring Data使我们可以快速且简单地使用普通的数据访问技术及新的数据访问技术。

Spring Data包含的子项目如下:
Spring Data JPA

org.springframework.data
spring-data-jpa
1.8.1.RELEASE

Spring Data MongoDB

org.springframework.data
spring-data-mongodb
1.7.1.RELEASE

Spring Data Neo4J

org.springframework.data
spring-data-neo4j
3.3.1.RELEASE

Spring Data Redis

org.springframework.data
spring-data-redis
1.5.1.RELEASE

Spring Data Solr

org.springframework.data
spring-data-solr
1.4.1.RELEASE

Spring Data Hadoop

org.springframework.data
spring-data-hadoop
2.2.0.RELEASE

Spring Data GemFire

org.springframework.data
spring-data-gemfire
1.6.1.RELEASE

Spring Data REST

org.springframework.data
spring-data-rest-webmvc
2.3.1.RELEASE

Spring Data JDBC Extensions

org.springframework.data
spring-data-oracle
1.1.0.RELEASE

Spring Data CouchBase

org.springframework.data
spring-data-couchbase
1.3.1.RELEASE

Spring Data Elasticsearch

org.springframework.data
spring-data-elasticsearch
1.2.1.RELEASE

Spring Data Cassandra

org.springframework.data
spring-data-cassandra
1.2.1.RELEASE

Spring Data DynamoDB

opensourceagility-release
http://repo.opensourceagility.com/release


org.springframework.data
spring-data-dynamodb
1.0.2.RELEASE

Spring Data为我们使用统一的API来对上述的数据库技术进行数据访问操作提供了支持。这是Spring通过提供Spring Data Commons项目来实现的,它是上述各种Spring Data项目的依赖。Spring Data Commons让我们在使用关系型或非关系型数据访问技术时都使用基于Spring的统一标准,该标准包含了CRUD(创建、获取、更新、删除)、查询、排序和分页的相关操作。

此处介绍下Spring Data Commons的一个重要概念:Spring Data Repository抽象。使用Spring Data Repository可以极大地减少数据访问层的代码。Spring Data Repository抽象的根接口时Reposityory接口:

package org.springframework.data.repository;
import java.io.Serializable;
public interface Repository<T,ID extends Serializable>{
}

从源码中可以看出,它接受领域类(JPA为实体类)和领域类的id类型作为类型参数。
它的子接口CrudRepository定义了和CRUD操作相关的内容,CrudRepository的子接口PagingAndSortingRepository定义了与分页和排序操作相关的内容。

不同的数据访问技术也提供了不同的Repository,如Spring Data JPA有JpaRepository、Spring Data MongoDB有MongoRepository。

Spring Data项目还给我们提供了一个激动人心的功能,即可以根据属性名进行计数、删除、查询方法等操作。如:

public interface PersonRepository extends Repository<Person,Long>{
    //按照年龄计数
    Long countByAge(Integer age);
    //按照名字删除
    Long deleteByName(String name);
    //按照名字查询
    List<Person> findByName(String name);
    //按照名字和地址查询
    List<Person> findByNameAndAddress(String name,String address);
}

Docker入门
Docker是一个轻量级容器技术,类似于虚拟机技术。Docker是直接运行在当前操作系统之上,而不是运行在虚拟机中,但是也实现了虚拟机技术的资源隔离,性能远远高于虚拟机技术。
Docker支持将软件编译成一个镜像(image),在这个镜像里做好对软件的各种配置,然后发布这个镜像,使用者可以运行这个镜像,运行中的镜像称之为容器,容器的启动是非常快的(秒级),有点像ghost。
目前各大主流云计算平台都支持Docker容器技术,大有统一云计算的趋势。
目前主流的软件以及非主流的软件大部分都有人将其封装成Docker镜像,我们只需要下载Docker镜像,然后运行镜像就可以快速获得已做好配置可运行的软件。
特别指出的是,Docker并不是为开发测试方便而提供的小工具,而是可以用于实际生产环境的一种极好的部署方式。

1.Docker的安装

在Mac下安装Docker,只需要安装Docker.dmg即可。
启动docker后,可以在命令行中通过"docker -v"查看版本来验证安装成功。

2.Docker常用命令及参数

1>.Docker镜像命令

镜像检索
Docker的镜像都放置在Docker官网的Docker Hub上,地址是https://registry.hub.docker.com。可在该网站搜索镜像,也可以用命令“docker search 镜像名”(如:docker search redis)检索。

镜像下载
docker pull 镜像名

查看本地镜像列表
docker images

删除镜像
docker rmi image-id

删除所有镜像
docker rmi $(docker images -q)

2>.Docker容器命令

运行镜像为容器
docker run --name container-name -d image-name
其中--name市委容器取个名称,-d表示detached,意味着执行完这句命令后控制台将不会被阻碍,可继续输入命令操作。如:
docker run --name test-redis -d redis

查看运行中的容器列表
docker ps
通过下列命令可查看运行和停止状态的容器:
docker ps -a

停止容器
通过容器名称或容器ID停止容器
docker stop container-name/container-id
如:
docker stop test-redis

启动容器
通过容器名称或容器ID启动容器
docker start container-name/container-id
如:
docker start test-redis

端口映射
Docker容器中运行的软件所使用的端口,需要映射到当前主机的端口上才能访问。Docker的端口映射通过一个-p参数来实现。例如,我们将Redis容器的6379端口映射到本机的6378端口:
docker run -d -p 6378:6379 --name port-redis redis

删除容器
docker rm container-id

删除所有容器
docker rm $(docker ps -a -q)

查看当前容器日志
docker logs container-name/container-id
如:
docker logs port-redis

登陆容器
运行中的容器其实是一个功能完备的Linux操作系统,所以我们可以像常规的系统一样登录并访问容器。
我们可以使用如下命令,登录访问当前容器,登陆后我们可以在容器中进行常规的Linux系统操作命令,还可以使用exit命令退出登录:
docker exec -it container-id/container-name bash

3.下载常用Docker镜像

docker pull wnameless/oracle-xe-11g
docker pull mongo
docker pull redis:2.8.21
docker pull cloudesire/activemq
docker pull rabbitmq
docker pull rabbitmq:3-management

4.异常处理

若出现命令不能执行的错误,可直接使用下面命令登录VirtualBox虚拟机:
boot2docker ssh
登录虚拟机后,再执行常规命令。

Spring Boot教程34——Docker入门