安装部署nacos
Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。用来取代以前常用的注册中心(zookeeper , eureka等等),以及配置中心(spring cloud config等等),Nacos是集成了注册中心和配置中心的功能,做到了二合一。
直接运行服务
可以直接用docker 启动服务,镜像不存在会自动拉取
docker run -d -p 8848:8848 --name nacos --env MODE=standalone nacos/nacos-server
运行容器后可以稍等下,等待nacos启动成功,受环境限制启动可能有些慢
登录页面测试
可以登录服务器测试以下
用户名:nacos 密码:nacos
微服务打包镜像
我们准备将一个微服务打包成Docker镜像,在各种服务器中进行运行,改为服务支持进行查询用户信息
提前说明
因为我们刚开始进行学习Docker,先从单个微服务开始学习,我们就先部署
learn-docker-storage
服务,后面随着课程的深入在慢慢增加其他的微服务
访问测试
在idea中运行
learn-docker-storage
我们配置的端口是8003,我们可以直接访问http://localhost:8003/storage/employe/findByID/10001
打包上传微服务
将
learn-docker-storage
服务打包后上传到服务器
注意配置项
这里需要检查下maven配置的编译属性是否正确
<mysql.addr>192.168.64.153:3306</mysql.addr>
<nacos.addr>192.168.64.153:8848</nacos.addr>
我们发现是我们容器中启动的地址
上传打包后的微服务
将target目录中打包完成的微服务上传到服务器
创建DockerFile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。创建一个Dockerfile文件vi Dockerfile
具体内容如下FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD learn-docker-storage-2.0-SNAPSHOT.jar app.jar
EXPOSE 8003
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
命令解释
- FORM:定制的镜像都是基于 FROM 的镜像,这里的 openjdk 就是定制需要的基础镜像,后续操作都是基于openjdk
- VOLUME:挂载一个数据卷,这里因为没有名称,所以是一个默认的数据卷(后面详细解释)
- ADD:添加一层镜像到当前镜像,这里就是添加SpringBootTest镜像到当前层,并改名app.jar
- EXPOSE:暴漏端口,因为我们的自己的端口是8003,所以我们暴漏8003
- ENTRYPOINT:设定容器启动时第一个运行的命令及其参数,这里就是容器以启动就执行 java -jar /app.jar
打包镜像
写好DockerFile后就需要用
docker build
命令来构建我们的镜像了,这样就可以将我们的微服务打包成一个镜像了
构建命令格式
构建一个镜像需要使用以下命令
docker bulid -t 仓库名/镜像名:tag .
参数解释
-
-t: 镜像的名字及标签,一般命名规则是 仓库名/镜像名:tag,
- 仓库名:一般是私服或者dockerhub等地址,如果忽略默认就是dockerhub的地址
docker.io.library/
- 镜像名称:就是我们的自己的服务名称,可以随意命名
- tag:就是我们的版本号
- 仓库名:一般是私服或者dockerhub等地址,如果忽略默认就是dockerhub的地址
-
.:这个
.
表示当前目录,这实际上是在指定上下文的目录是当前目录,docker build
命令会将该目录下的内容打包交给 Docker 引擎以帮助构建镜像。
实战操作
一般来说,应该会将 Dockerfile
置于一个空目录下,或者项目根目录下,如果该目录下没有所需文件,那么应该把所需文件复制一份过来。
一般大家习惯性的会使用默认的文件名 Dockerfile
,以及会将其置于镜像构建上下文目录中。
当前目录的结构如下
构建镜像
进入Dockerfile的目录,通过如下命令构建镜像
docker build -t learn-docker-storage:0.0.1 .
构建完成如果出现Successfully
说明已经构建成功了,
查看我们构建的镜像
使用
docker images
命令查看我们构建完成的镜像docker images
我们可以看到我们的镜像就在第一个位置
运行镜像
刚才已经打包完成了镜像,现在我们运行我们自己的镜像# 运行容器
docker run -d -p 8003:8003 learn-docker-storage:0.0.1
# 查看运行中的容器
docker ps
参数最后的
learn-docker-storage:0.0.1
是镜像的名称,如果启动容器可以使用镜像名称或者镜像ID
参数解释
- -d:后台运行
- -p:映射端口,将宿主机的8080端口映射到docker内部的8080端口上
查看启动日志
使用
docker logs 容器ID
来查看启动日志
尝试访问服务
通过
curl
命令来访问服务
curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool
我们发现服务调用成功了,我们基本实现了微服务改造为docker方式并运行
删除容器
要删除一个容器首先需要将一个容器停止掉
停止容器
我们要把刚才运行的容器停止掉,使用
docker stop 容器ID
停止一个容器
停止容器后,我们在通过进程查看是看不到容器的,但是容器还是存在我们的服务中的
查看全部容器
通过
docker ps
只能看到运行中的容器,但是我们停止的容器是看不到的,可以加上-a
查看所有的容器
我们可以看到 加上
-a
参数可以看到刚才已经停止掉的容器
启动停止的容器
想要启动一个停止的容器可以使用
docker start 容器ID
docker start 3752f7088a04
这样就把刚才已经停止的容器启动了
删除容器
已经停止的容器可以使用
docker rm 容器ID
删除容器,但是对于运行中的容器可以加上-f
参数强制删除
这样可以将一个运行的容器强制删除,如果停止的容器可以通过通过
docker rm
删除
docker rm 3752f7088a04
这个时候就把容器给删除掉了