Docker学习之搭建JavaWeb环境进阶篇
时间:2022-05-06
本文章向大家介绍Docker学习之搭建JavaWeb环境进阶篇,主要内容包括打包镜像、上传镜像、运行容器、负载均衡、资源配置小知识、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
上一篇文章中,简单了学习了一下在Docker环境中搭建JavaWeb环境,其实这时候已经是一个全新的镜像了,就是我们的Ghost系统一样,装配了各式各样的软件一样,以后使用的时候直接安装镜像即可。这时候我们需要做的就是把配置完成JavaWeb环境Docker打包一下,封装成一个更新的镜像环境。
打包镜像
首先我们进入之前启动的容器:
[root@iZ2ze74fkxrls31tr2ia2fZ ~]# docker attach centos
[root@b5a21b26c111 ROOT]
b5a21b26c111是产生的容器ID,然后我们执行以下命令:
docker commit b5a21b26c111 centos-java
配置完成以后执行命令docker images,就可以看到REPOSITORY名为centos-java的镜像了。
上传镜像
阿里云官方网站链接(进入后自行创建用户):https://dev.aliyun.com/search.html
然后依次创建命名空间-镜像仓库。
登录阿里云docker registry:
docker login --username=admin@52itstyle.com registry.cn-hangzhou.aliyuncs.com
将镜像推送到registry:
docker tag <IMAGE ID> registry.cn-hangzhou.aliyuncs.com/itstyle/images:centos-java
docker push registry.cn-hangzhou.aliyuncs.com/itstyle/images:centos-java
Push成功以后如下显示:
运行容器
查看镜像:
docker images
创建并启动容器:
docker run -i -t -v /root/software/:/mnt/software/ <IMAGE ID> /bin/bash
如果想启动的时候设置内存:
docker run -i -t -m 100m --memory-swap=100m -v /root/software/:/mnt/software/ <IMAGE ID> /bin/bash
创建时指定容器名字:
docker run -i -t --name test -m 100m --memory-swap=100m -v /root/software/:/mnt/software/ <IMAGE ID> /bin/bash
Docker 1.10提供了对容器资源限制的动态修改能力。例如,我们可以通过下面命令把容器内存限制调整到1GB
docker update -m 1024m test
docker restart test
查看运行容器:
docker ps
重命名容器:
docker rename <原容器NAMES> <新容器NAMES>
配置完成以后,我们启动容器中的Tomcat。
负载均衡
openresty配置:
server {
listen 80;
server_name docker.52itstyle.com;
charset utf-8;
location / {
default_type text/html;
proxy_pass http://docker;
}
}
upstream docker {
server 172.18.0.2:8080 weight=1 max_fails=2 fail_timeout=30s;
server 172.18.0.3:8080 weight=1 max_fails=2 fail_timeout=30s;
}
最终访问地址(见标题变化):http://docker.52itstyle.com/
资源配置小知识
内存限制
Docker 提供的内存限制功能有以下几点:
- 容器能使用的内存和交换分区大小。
- 容器的核心内存大小。
- 容器虚拟内存的交换行为。
- 容器内存的软性限制。
- 是否杀死占用过多内存的容器。
- 容器被杀死的优先级
内存限制相关的参数:
执行docker run命令时能使用的和内存限制相关的所有选项如下。
- -m,--memory 内存限制,格式是数字加单位,单位可以为 b,k,m,g。最小为 4M
- --memory-swap 内存+交换分区大小总限制。格式同上。必须必-m设置的大
- --memory-reservation 内存的软性限制。格式同上
- --oom-kill-disable 是否阻止 OOM killer 杀死容器,默认没设置
- --oom-score-adj 容器被 OOM killer 杀死的优先级,范围是-1000, 1000,默认为 0
- --memory-swappiness 用于设置容器的虚拟内存控制行为。值为 0~100 之间的整数
- --kernel-memory 核心内存限制。格式同上,最小为 4M
- React第三方组件6(状态管理之Mobx的使用④TodoList下)
- HDU 1536 S-Nim
- 洛谷P2723 丑数 Humble Numbers
- Python黑帽编程2.5 函数
- 洛谷P1317 低洼地
- ZOJ 3594 Sexagenary Cycle
- React第三方组件6(状态管理之Mobx的使用③TodoList中)
- P1554 梦中的统计
- Word2Vec教程-Skip-Gram模型模型“伪”任务关于模型的更多细节隐藏层输出层
- React第三方组件6(状态管理之Mobx的使用②TodoList上)
- The 9th Zhejiang Provincial Collegiate Programming Contest
- P1789 【Mc生存】插火把
- FOJFOJ有奖月赛-2012年4月(校赛热身赛)-解题报告总结
- poj 1316 Self Numbers
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux From Scratch
- 介绍一款 API 敏捷开发工具
- java线程池(五):ForkJoinPool源码分析之一(外部提交及worker执行过程)
- JavaScript中的匿名函数、闭包和BOM
- 【Vue.js】Vue.js中的事件处理、过滤器、过渡和动画、组件的生命周期及组件之间的通信
- 树莓派基础实验18:声音传感器实验
- 树莓派基础实验19:光敏传感器实验
- 逻辑式编程还有用吗?--“三维度”逻辑编程语言的设计(2)
- git 报错解决Validate branches Cannot Create: This merge request already exists
- 树莓派基础实验20:火焰报警传感器实验
- (译)SDL编程入门(8)几何图形渲染
- Java8 dubbo 调用 Collectors.toMap代码片发生的异常(IllegalStateException: Duplicate key)
- 树莓派基础实验21:烟雾报警传感器实验
- 树莓派基础实验22:红外遥控传感器实验
- Spring的BeanUtil的copyProperties方法 慎用!!