Docker实践记录

近期项目基于Spring Cloud实现了微服务化,在此基础上进一步做了容器化的尝试.


1.1 Docker简介


Docker是一个开源的由Go实现的容器引擎,它可以让开发者打包应用以及依赖到一个可移植的容器中,使用Docker可以打包一次到处运行,帮助开发人员更加快速便捷的发布交付应用。它可以将基础设施和应用隔离,并且像管理程序般的管理基础设施。大大提高发布效率,减少研发到生产部署运行代码的周期。


1.2 Docker架构


首先是环境搭建,先安装Docker,然后可以安装一款容器管理编排工具,例如Rancher、K8s等,最后搭建Registory,用于push、pull镜像。如果前面步骤顺利完成,那么一套基于Docker容器化的环境基本上已经构建完成。我们来看一下Docker官方的架构图,如图示:

Docker实践记录_第1张图片


简单讲解图中包含的组件。


(1) Docker daemon(Docker守护进程)

Docker daemon是一个运行在宿主机(DOCKER_HOST)的后台进程。我们可通过Docker客户端与之通信。


(2) Client(Docker客户端)

Docker客户端是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。图中,docker build等都是Docker的相关命令。


(3) Images(Docker镜像)

Docker镜像是一个只读模板,它包含创建Docker容器的说明。它和系统安装光盘有点像——我们使用系统安装光盘安装系统,同理,我们使用Docker镜像运行Docker镜像中的程序。


(4) Container(容器)

容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。我们可通过Docker API或者CLI命令来启停、移动、删除容器。


(5) Registry

Docker Registry是一个集中存储与分发镜像的服务。我们构建完Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,我们就需要手动拷贝。此时,我们可借助Docker Registry来避免镜像的手动拷贝。

一个Docker Registry可包含多个Docker仓库;每个仓库可包含多个镜像标签;每个标签对应一个Docker镜像。这跟Maven的仓库有点类似,如果把Docker Registry比作Maven仓库的话,那么Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本号。

Docker Registry可分为公有Docker Registry和私有Docker Registry。最常用的Docker Registry莫过于官方的Docker Hub,这也是默认的Docker Registry。Docker Hub上存放着大量优秀的镜像,我们可使用Docker命令下载并使用。


1.3 本地微服务容器化


首先构建本地微服务,通常打包成一个jar文件包,我们这里手动上传到搭建好的docker环境。其次构建对应Dockerfile,如下简单的例子。


FROM java:8

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

COPY target/user-server-1.0.jar /home/user-server-1.0.jar

ENTRYPOINT [ "java", "java -jar /home/user-server-1.0.jar" ]


# docker build -t user-server:0.1.0 .

# docker tag user-server:latestctrl

# docker push user-server:latestctrl


1.4 Rancher 管理编排工具


登陆Rancher UI界面,添加宿主机,对宿主机容器进行编辑管理。


你可能感兴趣的:(Docker)