Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。,容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。,几个概念:,docker架构:,
,可以先选择卸载:,安装存储驱动等:,设置docker仓库:,安装社区版docker:,参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,一些简单的操作:,命令有很多,不必记忆,勤用,例如:,
,一些简单的容器操作:,数据卷是一个虚拟目录,指向宿主机文件系统中的某个目录。,create 创建数据卷inspect 显示一个或多个数据卷的信息ls 列出所有数据卷prune 删除未使用数据卷rm 删除一个或多个数据卷,
,后文练习123帮助理解。,很多时候需要自己构建镜像,构建镜像需要写Dockerfile。,首先介绍镜像结构,镜像是应用程序及其所需要的系统函数库、环境、配置、依赖一层一层构建出来的,以mysql为例:,底层是系统函数库(例如Ubuntu),这一层也叫做
基础镜像(BaseImage),相当于地基。,然后在地基上添加安装包,配置环境变量、配置、依赖等等。,最后需要提供一个
入口(Entrypoint),也就是程序启动的脚本和参数。,
,Dockerfile是一个文本文件,名为Dockerfile,没有后缀,其中包含一些指令,每一个指令就是一层。,常用指令:,
,写好Dockerfile后使用,命令构建镜像,详见练习4,若是部署微服务集群,一个个docker去构建会很繁琐,所以需要DOcker-Compose。,DockerCompose基于Compose文件快速部署分布式应用,无需手动一个个的创建和运行。,Compose文件也是一个文本文件,通过指令定义集群中的每个容器如何运行。,和docker操作差不多,搭建一个docker 私 服。,docker-compose.yml:,存放镜像的目录得准备好。,还得给docker设置信任地址。,我们的私 服采用的是http协议,默认不被Docker信任,所以需要做一个配置:,然后就可以,
docker-compose up -d
,启动,访问ip+端口,成功:,
,上传一个镜像试试:,
,打包镜像:,加载镜像:,此时访问宿主机的8080端口即可访问到nginx服务。,问题:修改主页,方式一:进入容器修改/usr/share/nginx/html/index.html文件(这个路径dockerhub的nginx镜像官方文档中可以找到),
,这种方式明显是有很大局限性的!容器和数据耦合度非常高,操作繁琐不说,数据也不可复用,维护也非常困难。,方式二:将数据卷挂载到/usr/share/nginx/html目录。,这样 就可以把数据和容器解耦了。,准备mysql配置文件后缀是.conf例如my.conf,内容如下:,这里面的一些数据是需要取看官方文档的,例如环境变量、配置文件目录等。,Dockerfile内容:,构建镜像,问题 层数太多,每次都要安装jdk,这样做有缺陷,有很多层都用来做安装jdk了:,所以改进后:,部署之前的cloud-demo。,修改cloud-demo中的配置,nacos和mysql的地址改为docker-compose中的服务名,例如:,打包,然后写对应的Dockerfile,例如:,打包有个小坑 如果之前feign-api这个公共模块是创建的spring项目而不是maven项目,那么会order-service打包失败,换一个打包插件就好:,然后install一下这个模块就行。,完成后:,
,编写docker-compose.yml:,启动docker-compose,原因:nacos启动慢,微服务启动时nacos还没有启动完成。,解决:重启指定微服务,下次部署时先部署好nacos,使用depends_on也不行不知道啥问题。