一、微服务下的Docker介绍和使用场景
1、什么是Dokcer
1)百科:一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口;
2)使用go语言编写,在LCX(linux容器)基础上进行的封装
简单来说:
1)可以快速部署启动应用
2)实现虚拟化,完整资源隔离
3)一次编写,四处运行(有一定的限制,比如Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用)
复制代码
2、为什么要用
1)提供一次性的环境,假如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就可以直接启动运行
2)快速动态扩容,使用docker部署了一个应用,可以制作成镜像,然后通过Dokcer快速启动
3)组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用
4)更好的资源隔离和共享
总结一句话:开箱即用,快速部署,可移植性强,环境隔离
3、Linux云服务器Centos7安装Docker实战(阿里云ECS服务安装Docker实战)
Linux Standard Base的缩写,lsb_release命令用来显示LSB和特定版本的相关信息
lsb_release -a :用来显示LSB和特定版本的相关信息
复制代码
安装条件:CentOS 7环境,Docker要求64位的系统且内核版本至少为3.10
安装步骤:
1、添加yum源
# yum install epel-release –y
# yum clean all
# yum list
2、安装并运行Docker
# yum install docker-io –y
# systemctl start docker
3、检查安装结果
# docker info
4、docker hello-work
# docker run hello-world
复制代码
run运行原理:
4、Docker常用指令
1、帮助命令
docker version
docker info
docker --help
2、镜像命令
docker images:列出本地主机上的镜像
-a:列出本地所有的镜像
-q:只显示镜像ID
--digests:显示镜像的摘要信息
--no -trunc:显示完整的镜像信息
docker search 某个镜像名字
docker pull 某个镜像名字
docker rmi 某个镜像名字
复制代码
5、Docker仓库、镜像、容器核心知识讲解
Docker镜像(Docker images):软件打包好的镜像,放在docker仓库中,容器运行时的只读模板,操作系统+软件运行环境+用户程序
Docker容器(Docker containers):镜像启动后的实例称为一个容器,容器是独立运行的一个或一组应用,容器包含了某个应用运行所需要的全部环境
Docker仓库(Docker registeries):用来保存镜像,有公有和私有仓库,好比Maven的中央仓库和本地私服
镜像仓库:(参考)配置国内镜像仓库
对比面向对象的方式:
Dokcer 里面的镜像 : Java里面的类 Class
Docker 里面的容器 : Java里面的对象 Object
通过类创建对象,通过镜像创建容器
复制代码
6、Docker容器常见命令实战(Docker在云服务上的实际应用)
常用命令(安装部署好Dokcer后,执行的命令是docker开头),xxx是镜像名称
docker search xxx :搜索镜像
docker images :列出当前系统存在的镜像
docker pull xxx :拉取镜像
xxx是具体某个镜像名称(格式 REPOSITORY:TAG)
REPOSITORY:表示镜像的仓库源,TAG:镜像的标签
docker run -d --name "my_image" -p 5672:5672 xxx :运行一个容器
docker run :运行一个容器
-d :后台运行
-p :端口映射
xxx(格式 REPOSITORY:TAG) :如果不指定tag,默认使用最新的
--name "xxx" :镜像的别名
docker ps :列举当前运行的容器
docker inspect IMAGE_ID :检查容器内部信息
docker rmi IMAGE_ID :删除镜像
docker rmi -f IMAGE_ID :强制删除镜像
docker stop IMAGE_ID :停止某个容器
docker start IMAGE_ID :启动某个容器:
docker rm IMAGE_ID :移除某个容器(容器必须是停止状态)
复制代码
7、实战应用之使用Docker部署Nginx服务器
docker search nignx :获取镜像
docker images :列举镜像
docker pull nignx :拉取镜像
docker run -d --name "nginx1" -p 8088:80 nginx :启动镜像
docker run -d --name "nginx2" -p 8089:80 nginx :启动镜像
docker run -d --name "nginx3" -p 8090:80 nginx :启动镜像
curl http://127.0.0.1:8088 :访问
复制代码
docker run (首先会从本地找镜像,如果有则直接启动,没有的话,从镜像仓库拉起,再启动)
如果是阿里云服务,记得配置安全组,腾讯云也需要配置,这个就是一个防火墙
8、公司中Docker镜像仓库使用讲解
镜像仓库分类:官方公共镜像仓库和私有镜像仓库
1)公共镜像仓库:
官方:基于各个软件开发或者有软件提供商开发的 非官方:其他组织或者公司开发的镜像,供大家免费试用
2)私有镜像仓库:用于存放公司内部的镜像,不提供给外部试用;
9、高级篇幅之构建自己的镜像仓库(使用阿里云搭建自己的镜像仓库)
1、点击控制台
2、找到容器镜像服务
3、初次使用会提示开通,然后设置密码
复制代码
使用阿里云私有镜像仓库:
1、登录阿里云Docker Registry
docker login --username=lingqi18 registry.cn-beijing.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码
2、从Registry中拉取镜像
docker pull registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]
3、将镜像推送到Registry
docker login --username=lingqi18 registry.cn-beijing.aliyuncs.com
docker tag [ImageId] registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]
docker push registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]
复制代码
二、SpringCloud和Docker整合部署
1、构建Springboot应用docker镜像
使用Docker的maven插件,构建springboot应用
1.1、添加pom文件
<properties>
<docker.image.prefix>xdclass</docker.image.prefix>
</properties>
<build>
<finalName>docker-demo</finalName>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!-- 指定打包的镜像名称 -->
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<buildArgs>
<!-- 项目打包的名称 -->
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
复制代码
配置讲解:Spotify的docker-maven-plugin插件是用maven插件方式构建docker镜像的。
${project.build.finalName}产出物名称,缺省为${project.artifactId}-${project.version}
复制代码
1.2、创建Dockerfile,默认是根目录,(可以修改为src/main/docker/Dockerfile,如果修改则需要制定路径)
Dockerfile : 由一系列命令和参数构成的脚本,这些命令应用于基础镜像, 最终创建一个新的镜像
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
复制代码
参数讲解:
FROM <image>:<tag> :需要一个基础镜像,可以是公共的或者是私有的, 后续构建会基于此镜像,如果同一个Dockerfile中建立多个镜像时,可以使用多个FROM指令
VOLUME :配置一个具有持久化功能的目录,主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
ARG :设置编译镜像时加入的参数, ENV 是设置容器的环境变量
COPY :只支持将本地文件复制到容器 ,还有个ADD更强大但复杂点
ENTRYPOINT :容器启动时执行的命令
EXPOSE 8080 :暴露镜像端口
复制代码
1.3、构建镜像
mvn install dockerfile:build
docker login --username=lingqi18 registry.cn-beijing.aliyuncs.com
docker tag [ImageId] registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]
docker push registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]
docker pull registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]
docker run -d --name myname -p 8099:8080 [ImageId]
复制代码
1.4、查看启动日志
docker logs -f containerid
复制代码