Docker 部署微服务

1、微服务打包成 jar 包

(1)使用 maven 进行打包
在这里插入图片描述
(2)生成的 jar 包位于 taget 目录下
在这里插入图片描述

2、编写 Dockerfile 文件

FROM java:8
VOLUME /tmp
ADD microservice-provider-user-0.0.1-SNAPSHOT.jar /microservice-provider-user.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/microservice-provider-user.jar"]

Dockerfile 文件命令解析:
FROM:为映像文件构建指定基础映像,指定的基础镜像可以是官方远程仓库中的,也可以是位于本地仓库,默认情况下现在docker本机仓库寻找,找不到则从官方远程仓库拉取。本文件指定了继承于一个带有 java8 环境的镜像,新的镜像会以这个环境为基础进行拓展。
在这里插入图片描述
ADD:复制指定的< src>到容器中的< dest>,其中< src> 可以是 Dockerfile 所在目录的一个相对路径(文件或目录),也可以是一个URL。ADD命令在引入压缩包文件时,会自动解压到镜像中,然后删掉压缩包,不需要再执行解压命令,这时候SpringBoot的相关文件已经引入到镜像。
在这里插入图片描述
< dest>路径的填写可以是容器内的绝对路径,也可以是相对于工作目录的相对路径
< src>可以是一个本地文件或者是一个本地压缩文件(可以是Dockerfile所在目录的一个相对路径),还可以是一个url
VOLUME
用于指定持久化目录,实现挂载功能,授权访问从容器内到主机上的目录。用于containers之间共享数据,将本地文件夹或者其他容器中的文件夹挂在到这个容器中等。
在这里插入图片描述
容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失,所以当数据需要持久化时用这个命令。
一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统
卷可以容器间共享和重用 可以关注参数 --volumes-from
容器并不一定要和其它容器共享卷
修改卷后会立即生效
对卷的修改不会对镜像产生影响
卷会一直存在,直到没有任何容器在使用它
ENTRYPOINT
启动时的默认命令,配置给容器一个可执行的命令,这意味着在每次使用镜像创建容器时一个特定的应用程序可以被设置为默认程序。同时也意味着该镜像每次被调用时仅能运行指定的应用。ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,指定多个时靠后的设置会覆盖前面的设置,而只执行最后的ENTRYPOINT指令
在这里插入图片描述
EXPOSE
指定于外界交互的端口,即容器在运行时监听的端口
在这里插入图片描述
EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口
默认是TCP

3、将打包好的 jar 包和 Dockerfile 文件放在同一目录下

将 jar 包和 Dockerfile 文件都放在Linux服务器的 /home/lhj/weifuwu/ 目录下
在这里插入图片描述

4、创建镜像

(1)构建构建,首先 cd 到刚才 Dockerfile 文件的目录下
在这里插入图片描述
(2)然后执行以下命令来构建镜像

sudo docker build -t="test/mico_service" .

-t参数用来指定生成docker镜像的仓库和镜像名,test为仓库名(可以省略),/后为镜像名,命令时不能使用大写字母最后面的点来指定Dockerfile的位置,因为已经cd到当前目录了,所以写点“.”即可

在这里插入图片描述
(3)docker images 查看所有镜像
在这里插入图片描述

5、启动镜像,构建实例

sudo docker run -d -p 8080:80 --name mymico test/mico_service

-d参数表明启动镜像作为一个守护进程,在后台一直运行,-p用来指定镜像的端口映射,如上就是将docker容器的80端口映射到主机的8080端口,–name来指定启动容器的名称,后面的第一个参数为镜像名称,最后面的参数就是实例容器仓库名/实例容器名

在这里插入图片描述

6、浏览器访问

在这里插入图片描述
能够正常访问。

### 如何使用 Docker 部署微服务 #### 什么是 Docker 及其在微服务中的作用 Docker 是一种容器化技术,允许开发者将应用程序及其依赖项打包到一个可移植的容器中运行。它简化了应用的一致性和跨平台部署过程。对于微服务架构而言,Docker 提供了一种高效的方式将每个微服务封装为独立单元,在不同环境中保持一致性[^1]。 #### 使用 DockerDocker Compose 的优势 Docker 不仅能够单独运行单个微服务实例,还支持通过 Docker Compose 定义和管理多个相互关联的服务。这使得复杂的应用程序更容易被拆分为小型、自治的部分并协同工作。例如,可以通过 `docker-compose.yml` 文件描述各个服务间的网络配置以及数据卷挂载设置等细节[^2]。 #### 实际操作步骤概述 为了实现基于 Docker 技术下的微服务部署方案,通常需要完成以下几个方面的工作: ##### 编写 Dockerfile 来定义镜像 每项具体功能都应对应有一个专属目录结构,并在此基础上创建相应的 **Dockerfile** 文本文件用于指示如何构建该特定项目的映像版本号标记等内容。 ```dockerfile # Use an official Python runtime as a parent image FROM python:3.9-slim # Set the working directory in the container WORKDIR /app # Copy the current directory contents into the container at /app COPY . /app # Install any needed packages specified in requirements.txt RUN pip install --no-cache-dir -r requirements.txt # Make port available to outside world EXPOSE 8000 # Define environment variable ENV NAME World # Run app.py when the container launches CMD ["python", "app.py"] ``` ##### 创建 docker-compose.yml 文件来组合多项服务 此 YAML 格式的文档用来声明所有必要的组件和服务间的关系链路信息等等参数选项设定情况如下所示: ```yaml version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine" ``` 在这个例子当中我们有两个部分组成整个系统:一个是名为 “web” 的前端展示层;另一个则是后台缓存数据库 Redis 。两者之间不存在直接联系但却共同构成了完整的业务逻辑流程图谱。 #### 推送至远程仓库以便于分发实施阶段 当本地测试无误之后就可以考虑把制作好的镜像上传分享出去让更多的人受益或者是在生产环境下投入使用啦!命令形式非常简单明了只需执行下面这一句即可搞定推送动作哦~ ```bash docker push my-microservice:v1 ``` --- ### 总结 综上所述可以看出利用好 Docker 这样强大的工具确实可以让我们的日常工作变得更加便捷省心不少呢~无论是从零开始搭建全新的项目还是维护现有的大型工程体系都能够游刃有余地应对各种挑战难题[^1][^2].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值