容器化基础
- 使用 linux 通过 java -jar 方式部署单体架构,war 包丢tomcat。
- 使用 Docker部署微服务架构。
相关文档:
简介
云原生:Java,C等开发的应用叫原生应用,部署上云。原生应用上云的整个过程,以及云上的一系列解决方案。
部署云计算资源有三种不同的方法:公共云、私有云和混合云。采用的部署方法取决于业务需求。
扩展:VPC
容器化基础
解决的问题
-
应用构建
-
- Java、C++、JavaScript
- 打成软件包
- Java、C++、JavaScript
-
- .exe
- docker build .... 镜像
- .exe
-
应用分享
-
- 所有软件的镜像放到一个指定地方 docker hub
- 安卓,应用市场
- 所有软件的镜像放到一个指定地方 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应用
代码地址:https://gitee.com/zwtgit/dockerdemo
准备工作
附带:Docker安装Redis,部署视频,https://www.bilibili.com/video/BV13Q4y1C7hS?p=20
去Docker hub,找到镜像,里面有详细的文档。
启动,https://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