容器化基础

  1. 使用 linux 通过 java -jar 方式部署单体架构,war 包丢tomcat。
  2. 使用 Docker部署微服务架构。

相关文档:

简介

云原生:Java,C等开发的应用叫原生应用,部署上云。原生应用上云的整个过程,以及云上的一系列解决方案。

部署云计算资源有三种不同的方法:公共云、私有云和混合云。采用的部署方法取决于业务需求。

扩展:VPC

容器化基础

解决的问题

  • 应用构建

    • Java、C++、JavaScript
      • 打成软件包
    • .exe
      • docker build …. 镜像
  • 应用分享

    • 所有软件的镜像放到一个指定地方 docker hub
      • 安卓,应用市场
  • 应用运行

    • 统一标准的 镜像
      • docker run
  • …….

资源隔离

  • cpu、memory资源隔离与限制

  • 访问设备隔离与限制

  • 网络隔离与限制

  • 用户、用户组隔离限制

  • ……

架构

  • Docker_Host:

    • 安装Docker的主机
  • Docker Daemon:

    • 运行在Docker主机上的Docker后台进程
  • Client:

    • 操作Docker主机的客户端(命令行、UI等)
  • Registry:

    • 镜像仓库
      • Docker Hub
  • Images:

    • 镜像,带环境打包好的程序,可以直接启动运行
  • Containers:

    • 容器,由镜像启动起来正在运行中的程序

交互逻辑

装好Docker,然后去 软件市场 寻找镜像,下载并运行,查看容器状态日志等排错。

实战图

Docker hub,找到镜像。

创建&构建一个Java应用

代码地址://gitee.com/zwtgit/dockerdemo

准备工作

附带:Docker安装Redis,部署视频,//www.bilibili.com/video/BV13Q4y1C7hS?p=20

Docker hub,找到镜像,里面有详细的文档。

启动,//hub.docker.com/_/redis

docker run --help

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

#redis使用自定义配置文件启动
docker run -v /data/redis/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data \
-d --name myredis \
-p 6379:6379 \
redis:latest  redis-server /etc/redis/redis.conf

应用打包

编写Dockerfile将自己的应用打包镜像。

以前

Java为例

  • SpringBoot打包成可执行jar

  • 把jar包上传给服务

  • 服务器运行java -jar

在插件中打包后可以看到jar或者war相应的包以及位置,可以在本地使用java -jar命令测试。

现在

所有机器都安装Docker,任何应用都是镜像,所有机器都可以运行。

我这里打的war包。

FROM openjdk:8-jdk-slim
LABEL maintainer=leifengyang

COPY target/*.war   /app.war

ENTRYPOINT ["java","-jar","/app.war"]

docker构建,最后一个点表示工作在当前目录。

docker build -t java-demo:v1.0 .

启动容器

docker run -d -p 8080:8080 --name mydockerfiletest-app java-demo:v1.0 

# 登录docker hub
docker login

#给旧镜像起名
docker tag java-demo:v1.0  leifengyang/java-demo:v1.0

# 推送到docker hub
docker push leifengyang/java-demo:v1.0

# 别的机器
docker pull leifengyang/java-demo:v1.0

# 别的机器运行
docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0 
Tags: