docker搭建 java web服务

news/2024/11/8 13:22:44/

安装 Docker

只需通过以下命令即可安装 Docker 软件:

>> rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
>> yum -y install docker-io

可使用以下命令,查看 Docker 是否安装成功:

docker version

若输出了 Docker 的版本号,则说明安装成功,我们下面就可以开始使用 Docker 了。

可通过以下命令启动 Docker 服务:

service docker start

下载镜像

docker中文网

  • 下载centOS镜像
    此处拉取的仓库为centos7.9.2009版本
docker pull centos:7.9.2009

在这里插入图片描述

  • 查看本地所有镜像
docker images

在这里插入图片描述

启动容器

docker run -i -t -v /www/server/box/docker/repository/boo/:/mnt/software/ eeb6ee3f44bd /bin/bash
  • docker run <相关参数> <镜像 ID> <初始命令>
    初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。
参数解释
-i表示以“交互模式”运行容器
-t表示容器启动后会进入其命令行
-v表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>

在这里插入图片描述
此时容器已经启动并进入了容器的命令行

安装相关软件

以下操作均在容器内进行

安装tomcat

可以将tomcat文件放到宿主机的*/www/server/box/docker/repository/boo/目录下:
在这里插入图片描述
对应的,容器中
/mnt/software/tomcat/* 目录下就会有这个文件(挂载关系):

在这里插入图片描述
然后解压tomcat文件… 不再赘述

安装jdk

这里从官网下载的8版本的解压版
下载地址: https://www.oracle.com/java/technologies/downloads/

下载解压后配置环境变量

配置环境变量
  • 修改系统配置文件:
vi /etc/profile

将以下内容加入profile文件末尾:

# jdk环境变量路径
export JAVA_HOME=/data/read_business_world/jdk/jdk1.8.0_151
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
  • 保存配置成功后,使文件生效:
source /etc/profile
  • 查看jdk版本
    在这里插入图片描述

编写运行脚本

编写一个运行脚本,当启动容器时,运行该脚本,启动 Tomcat,具体过程如下:

  • 首先,创建运行脚本:
vi /root/run.sh

脚本内容如下:

sh /home/server/tomcat/bin/catalina.sh run

注意:使用 Tomcat 的运行脚本来启动 Tomcat 服务。

  • 最后,为运行脚本添加执行权限:
chmod u+x /root/run.sh

退出容器

使用 exit命令退出容器
在这里插入图片描述

  • 查看正在运行的程序
docker ps

因为刚才已经使用exit命令退出容器,此时容器处于停止状态,所以看不到

  • 查看所有容器
docker ps -a

在这里插入图片描述
记住以上CONTAINER ID(容器 ID),随后我们将通过该容器,创建一个可运行 Java Web 的镜像。

创建javaWeb镜像

docker commit 05fcf4ef548b boo/javaweb:0.1

格式为 docker commit boo/javaweb:0.1
在这里插入图片描述
创建完成后使用 docker images 命令查看当前系统中所有镜像
在这里插入图片描述

启动 Java Web 容器

与上边的启动容器相同

  • 查看所有镜像:
[root@localhost docker]# docker images
REPOSITORY       TAG    IMAGE ID       CREATED             SIZE
boo/javaweb      0.1    7fd8bf88f779   About an hour ago   594MB
  • 启动容器
    这次我们不进入容器的命令行,而是直接启动容器内部的 Tomcat 服务(运行 /root/run.sh脚本):
docker run -d -p 58080:8080 --name booWeb boo/javaweb:0.1 /root/run.sh
参数解释
-d表示以“守护模式”执行/root/run.sh脚本,此时 Tomcat 控制台不会出现在输出终端上
-p表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口,这样就向外界暴露了 58080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
–name表示容器名称,自定义一个有意义的名称即可

运行报错
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/root/run.sh": permission denied: unknown.
在这里插入图片描述
宿主机的当前运行用户和docker容器里面的运行用户不一致导致的访问权限问题
解决:
添加 --privileged=true

docker run --privileged=true -d -p 58080:8080 --name booWeb boo/javaweb:0.1 /root/run.sh
  • 查看运行中的容器
docker ps

特权模式运行

docker run --name boo-web --privileged=true -d boo/javaweb:0.1 /usr/sbin/init

在这里插入图片描述

进入容器:
docker exec -it boo-web /bin/bash

在这里插入图片描述

常用命令

操作镜像(images)

docker images : 查看本地镜像
docker rmi : 删除镜像

操作容器

docket ps : 查看运行中的容器
docket ps -a : 查看所有的容器

docker run xxx : 创建容器
docker start <NAMES / CONTAINER ID> : 运行容器
docker stop <NAMES / CONTAINER ID> : 停止容器
docker rm <NAMES / CONTAINER ID> : 删除容器


http://www.ppmy.cn/news/11385.html

相关文章

第53章 Python3 os.replace 方法教程

Python3 OS 文件/目录方法 概述 os.replace() 方法用于重命名文件或目录。 Python3.3 版中的新功能。 语法 **replace()**方法语法格式如下&#xff1a; os.replace(src, dst, *, src_dir_fdNone, dst_dir_fdNone)将文件或目录 src 重命名为 dst&#xff0c;如果 dst 是非空…

I2C上拉电阻的选择-计算公式

I2C一般为开漏结构&#xff0c;需要在外部加上拉电阻&#xff0c;常见的阻值有1k、1.5k、2.2k、4.7k、5.1k、10k等。 但是应该如何根据开发要求选择合适的阻值呢&#xff1f; 假设SDA是低电平时&#xff0c;即MOS管导通。那么&#xff0c;就可以求出上拉电阻R的阻值。 上拉…

JSP——分页查询

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;JAVA开发者…

如何利用MOS管实现双向电平转换

前面讲过的三极管和MOS管电平转换电路都是单向的&#xff0c;就是信号只能是从A输出到B输入。其实单个MOS管也能实现双向电平转换&#xff0c;即信号即能从A输出到B输入&#xff0c;也能从B输出到A输入。实际电路就是这个&#xff0c;包含一个MOS管和两个电阻&#xff0c;芯片1…

缓存穿透,缓存雪崩,缓存击穿的超详解

文章目录1、缓存穿透问题的解决思路2、缓存雪崩问题及解决思路3、缓存击穿问题及解决思路1、缓存穿透问题的解决思路 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库&#xff0c;失去了缓存的意…

推荐两个好用的虚拟机、SSH 终端开源工具(Virtual Box、WindTerm)

笔者最近因一些变故&#xff0c;加上阳了&#xff0c;停更了一段时间&#xff0c;并提前回老家过年了。因并没有带笔记本电脑回去&#xff0c;故在折腾了一番老家电脑后&#xff0c;选择拥抱开源&#xff0c;使用一些开源的工具&#xff0c;而非习惯的 VMware Workstation 和 S…

场景编程集锦 - BMI指数与健身达人

1. 场景描述 BMI指数&#xff08;身体质量指数&#xff0c;英文Body Mass Index&#xff09;是用体重公斤数除以身高米数的平方得出的数字&#xff0c;是目前国际上通用的衡量人体胖瘦程度以及是否健康的一个标准。“身体质量指数”这个概念&#xff0c;是由19世纪中期的比利时…

Linux驱动开发基础__基于GPIO子系统的LED驱动程序

目录 1 编写思路 2 在设备书中添加Pinctrl信息 3 在设备树中添加GPIO信息 4 编程示例 4.1 leddrv.c 4.2 ledtest.c 4.3 Makefile 1 编写思路 GPIO 的地位跟其他模块&#xff0c;比如 I2C、UART 的地方是一样的&#xff0c;要使用某个引脚&#xff0c;需要先把引脚配置为…