百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

镜像制作(三)

wptr33 2025-02-10 14:37 21 浏览


3.1 容器反打镜像

#将java服务制作成镜像
#java服务依赖于动态库
#动态库对底层linux信号量参数有要求,不能用默认信号量参数,docker启动容器时配置文件按默认信号量运行,信号量参数需要在容器启动的时候进行加载,加载后demo服务才能运行起来
#从一个已经存在的容器创建一个新的镜像
#以上是前提条件,相关资源如下

demo-1.0.jar
libdemo_jni.so
application.yml
gcc_rpm.tar
setuptools-41.1.0.zip
supervisor-4.2.5.tar.gz
jdk-8u152-linux-x64.tar.gz
start.sh

3.1.1 运行基础镜像容器centos:7

#拉centos基础镜像
docker pull centos:7
#运行centos基础镜像,容器id为d4886e085be8
docker run -it centos:7 /bin/bash

3.1.2 从宿主机复制文件至容器

#容器内在home下创建demo目录
cd home
mkdir demo
#创建lib目录
cd  demo
mkdir lib

#退出容器
在容器内exec 回车

#从宿主机复制文件至容器 d4886e085be8 可取容器id前两位d4
docker cp  libdemo_jni.so d4:/home/demo/lib
docker cp  demo-1.0.jar d4:/home/demo/
docker cp  application.yml d4:/home/demo/
docker cp  jdk-8u152-linux-x64.tar.gz d4:/home/demo/
docker cp  start.sh d4:/home/demo/

3.1.3 基础镜像容器中安装jdk

tar -xvf jdk-8u152-linux-x64.tar.gz
vi /etc/profile

#set java environment
JAVA_HOME=/home/demo/jdk1.8.0_152
JRE_HOME=/home/demo/jdk1.8.0_152/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
LD_LIBRARY_PATH=/home/demo/lib
export JAVA_HOME JRE_HOME CLASS_PATH PATH LD_LIBRARY_PATH

3.1.4 基础镜像容器中修改信号量

#修改信号量
vi /etc/sysctl.conf
kernel.sem = 2000 125000 32 500
#加载信号量生效,当打为镜像时,启动容器后信号量加载会失效
sysctl -p
#查看信号量
cat /proc/sys/kernel/sem
ipcs -l

3.1.5 基础镜像容器中gcc安装

tar-xvf gcc_rpm.tar
#强制安装
rpm -ivh *.rpm --nodeps --force

3.1.6 基础镜像容器中setuptools工具安装

安装包:https://pypi.org/project/setuptools/41.1.0/#files
解压安装:unzip setuptools-41.1.0.zip解压到本地 ,
进入解压后的文件夹中,执行python setup.py install即可。

3.1.7 基础镜像容器中Supervisor二进制版本安装

#解压
tar -xvf supervisor-4.2.5.tar.gz
cd supervisor-4.2.5/
#安装
./setup_supervisor.sh
#启动脚本
/home/demo/supervisor-4.2.5/start_supervisor.sh

3.1.8 start.sh脚本内容

#!/bin/bash
#启动容器时使信号量生效
sysctl -p
/home/demo/supervisor-4.2.5/start_supervisor.sh
echo "================start====================="
java -jar /home/demo/demo-1.0.jar
echo "=================end====================="

3.1.9 将修改后的基础镜像容器打镜像

docker commit d4 demo:v1

3.2 dockerfile直接制作镜像

3.2.1 Dockerfile编写

# 使用官方 CentOS 基础镜像,假如时普通的java服务,基础镜像可以直接使用jdk,不用单独安装
FROM centos:7
# 复制 JDK 和其他文件到容器中
COPY jdk-8u152-linux-x64.tar.gz /home/mg/
COPY start.sh /home/demo/
COPY demo-1.0.jar /home/demo/
COPY application.yml /home/demo/
COPY libdemo_jni.so /home/demo/lib/
COPY gcc_rpm.tar.gz /home/demo/
COPY setuptools-41.1.0/ /home/demo/setuptools-41.1.0
COPY supervisor-4.2.5.tar.gz /home/demo/
  #根据情况加入java服务需要验证网卡地址和cpu序列号及有普通用户执行的服务时需要将以下包安装
#COPY net-tools-deprecated-2.0+git20170221.479bb4a-3.11.x86_64.rpm /home/demo/
#COPY dmidecode-3.2-5.el7.x86_64.rpm /home/demo/
#COPY sudo-1.8.23-10.el7.x86_64.rpm /home/demo/
#设置环境变量
ENV TZ=Asia/Shanghai
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ENV JAVA_HOME=/usr/lib/jdk1.8.0_152
ENV PATH=${PATH}:${JAVA_HOME}/bin
ENV LD_LIBRARY_PATH=/home/demo/lib
# 解压JDK包使环境变量生效
RUN tar -xvf /home/demo/jdk-8u152-linux-x64.tar.gz -C /usr/lib/ \
  && rm -f /home/demo/jdk-8u152-linux-x64.tar.gz \
    && echo "kernel.sem = 2000 125000 32 500" > /etc/sysctl.conf \
    && tar -zxf /home/demo/gcc_rpm.tar.gz -C /home/demo/ \
    && rm -f  /home/demo/gcc_rpm.tar.gz \
    && rpm -ivh /home/demo/gcc_rpm/*.rpm --nodeps --force \
# 设置工作目录
WORKDIR /app
# 暴露端口(假设你的应用运行在8080端口)
EXPOSE 18089
# 定义容器启动时执行的命令,运行你的 JAR 包
CMD ["/home/demo/start.sh"]

3.2.2 Dockerfile制作镜像

#在Dockerfile同级目录下制作镜像
docker build -t demo:v1.0 .

相关推荐

redis的八种使用场景

前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...

基于Redis的3种分布式ID生成策略

在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...

基于OpenWrt系统路由器的模式切换与网页设计

摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...

这篇文章教你看明白 nginx-ingress 控制器

主机nginx一般nginx做主机反向代理(网关)有以下配置...

如何用redis实现注册中心

一句话总结使用Redis实现注册中心:服务注册...

爱可可老师24小时热门分享(2020.5.10)

No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...

Apportable:拯救程序员,IOS一秒变安卓

摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...

JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透

以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...

3月26日更新 快速施法自动施法可独立设置

2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...

Redis 是如何提供服务的

在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...

lua _G、_VERSION使用

到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...

China's top diplomat to chair third China-Pacific Island countries foreign ministers' meeting

BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...

移动工作交流工具Lua推出Insights数据分析产品

Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...

Redis 7新武器:用Redis Stack实现向量搜索的极限压测

当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...

Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求

重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...