>  기사  >  Java  >  Docker는 Java 웹 실행 환경 예제 분석을 구축합니다.

Docker는 Java 웹 실행 환경 예제 분석을 구축합니다.

王林
王林앞으로
2023-04-25 08:49:061071검색

먼저 기존 가상화 기술의 아키텍처를 살펴보겠습니다.
Docker搭建Java Web运行环境实例分析

호스트 운영체제에 여러 개의 가상 머신을 설치할 수 있으며, 각 가상 머신에는 가상화 기술을 통해 가상 운영체제가 구현된 후, 그런 다음 가상 운영 체제에 필요한 애플리케이션을 설치할 수 있습니다. 이 모든 것은 매우 간단해 보이지만, 기술적인 세부 사항은 매우 신비롭고, 심지어 훌륭한 사람들조차도 명확하게 설명하지 못할 수도 있습니다.

가상 머신을 사용해 본 사람이라면 누구나 가상 머신을 시작하는 것이 컴퓨터를 시작하는 것과 같다는 점을 알아야 합니다. 로그인 인터페이스를 보려면 초기화 프로세스가 상당히 느립니다. 가상 머신이 시작되면 호스트와의 네트워크 연결을 설정하여 가상 머신과 호스트가 상호 연결되도록 할 수 있습니다. 서로 다른 가상 머신은 서로 격리되어 있습니다. 즉, 각 가상 머신은 서로의 존재를 알지 못하지만 각 가상 머신은 호스트 머신의 하드웨어와 네트워크 리소스를 점유합니다.

도커 기술의 아키텍처를 다시 비교해 보겠습니다.
Docker搭建Java Web运行环境实例分析

호스트 운영 체제에는 실행 중인 도커 서비스(또는 "도커 엔진"이라고 함)가 있음을 알 수 있습니다. 이 서비스에서는 여러 도커를 열 수 있습니다. 컨테이너와 각 Docker 컨테이너는 자체 필수 애플리케이션을 실행할 수 있습니다. 마찬가지로 Docker 컨테이너도 모두 호스트의 하드웨어 및 네트워크 리소스를 차지합니다.

도커 컨테이너는 가상 머신과 비교하여 기술 구현 측면에서 완전히 다릅니다. 컨테이너를 시작하는 데는 눈 깜짝할 사이에 시작 속도가 크게 향상됩니다. 가상 머신이든 도커 컨테이너이든 애플리케이션의 실행 환경을 격리하고 하드웨어 리소스를 절약하며 개발자에게 이점을 제공하도록 설계되었습니다.

사전조건

먼저 Centos 운영체제나 가상머신을 준비해야 합니다. 즉, Linux 클라이언트 도구를 통해 centos 운영 체제에 액세스할 수 있습니다.

Docker는 우분투나 다른 Linux 운영 체제에서도 재생할 수 있다는 점에 유의해야 합니다. 하지만 이 기사에서는 Centos를 예로 선택하고 그게 전부입니다.

centos 특정 요구 사항은 다음과 같습니다.

  • 64비트 운영 체제여야 합니다.

  • 커널은 3.8 이상을 권장합니다

다음 명령을 통해 centos 커널을 확인하세요.

uname -r

위 명령을 실행한 후 커널 버전 번호가 3.8보다 낮다고 출력되는 경우 다음 방법을 참조하여 Linux 커널을 업그레이드하세요.

centos 6.5의 경우 기본 커널 버전은 2.6입니다. 먼저 다음 명령을 통해 최신 커널을 설치합니다.

rpm --import https://www.elrepo.org/rpm-gpg-key-elrepo.org
rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
yum -y --enablerepo=elrepo-kernel install kernel-lt

그런 다음 다음 구성 파일을 편집합니다.

vi /etc/grub.conf

default=1을 default=0으로 변경합니다.

마지막으로 재부팅 명령을 통해 운영 체제를 다시 시작합니다.

다시 시작한 후에도 문제가 없으면 커널을 다시 확인하세요. centos 커널이 3.10으로 표시됩니다.

여기까지 오시면 여러분이 기대하는 결과가 우리와 일치합니다. 축하해요! 도커를 함께 설치해보자.

Install 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를 사용할 수 있습니다.

다음 명령을 통해 도커 서비스를 시작할 수 있습니다:

service docker start

방법

소프트웨어 설치와 마찬가지로 가상 CD-ROM을 사용하는 경우 먼저 소프트웨어가 구운 CD가 있어야 합니다. 드라이브를 사용하려면 소프트웨어가 설치되는 "미러" 파일이라는 프로그램을 실행해야 합니다. 도커의 세계에는 "미러"라는 것이 있습니다. 우리에게 필요한 운영 체제가 설치되어 있습니다. 일반적으로 이를 "도커 이미지"라고 부르며, 이 기사에서는 이를 "미러"라고 합니다.

그럼 질문은, 이미지를 어디서 다운로드하나요?

Docker 공식 웹사이트에서는 실제로 모든 이미지 다운로드 주소를 제공하고 있지만, 아쉽게도 중국에서는 접속이 불가능합니다. 다행스럽게도 중국의 친절한 사람들이 우리가 필요한 도커 이미지를 다운로드할 수 있는 도커 중국어 웹사이트를 제공했습니다.

이미지 다운로드

centos를 예로 들어 다음 단계에 따라 centos 이미지를 다운로드할 수도 있습니다.

먼저 docker Chinese 홈페이지에 접속하셔서 홈페이지에서 "centos"라는 이미지를 검색하시면 검색결과에 우리에게 필요한 "official image"가 있습니다.

그런 다음 centos 공식 이미지 페이지에 들어가십시오. "pull this repository" 입력 상자에 이를 복사하고 자신의 명령줄에서 명령을 실행하면 이미지가 즉시 다운로드됩니다.

마지막으로 다음 명령을 사용하여 모든 로컬 미러를 확인하세요.

docker images

다운로드가 완료되면 다음이 표시됩니다.

repository                tag                 image id            created             virtual size
docker.cn/docker/centos   centos6             25c5298b1a36        7 weeks ago         215.8 mb

如果看到以上输出,说明您可以使用“docker.cn/docker/centos”这个镜像了,或将其称为仓库(repository),该镜像有一个名为“centos6”的标签(tag),此外还有一个名为“25c5298b1a36 ”的镜像 id(可能您所看到的镜像 id 与此处的不一致,那是正常现象,因为这个数字是随机生成的)。此外,我们可以看到该镜像只有 215.8 mb,非常小巧,而不像虚拟机的镜像文件那样庞大。

现在镜像已经有了,我们下面就需要使用该镜像,来启动容器。

启动容器

容器是在镜像的基础上来运行的,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序。既然镜像已经下载到本地,那么如何才能启动容器呢?

只需使用以下命令即可启动容器:

docker run -i -t -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash

这条命令比较长,我们稍微分解一下,其实包含以下三个部分:

docker run d19f8014cc3f15ade43d257ddea0656b f3dfa9fefe3bae6ff36b7b06d3e8f83d 3d4cf205922e720f1300c6fabbc54968

其中,相关参数包括:

  • -i:表示以“交互模式”运行容器

  • -t:表示容器启动后会进入其命令行

  • -v:表示需要将本地哪个目录挂载到容器中,格式:-v 8ce10f688b9fc68001d4d76abd8c096f:e9b05d94fa020ff91f624b5ff5a7f4db

假设我们的所有安装程序都放在了宿主机的/root/software/目录下,现在需要将其挂载到容器的/mnt/software/目录下。

需要说明的是,不一定要使用“镜像 id”,也可以使用“仓库名:标签名”,例如:docker.cn/docker/centos:centos6。

初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。

安装相关软件

为了搭建 java web 运行环境,我们需要安装 jdk 与 tomcat,下面的过程均在容器内部进行。我们不妨选择/opt/目录作为安装目录,首先需要通过cd /opt/命令进入该目录。

安装 jdk()

首先,解压 jdk 程序包:

tar -zxf /mnt/software/jdk-7u67-linux-x64.tar.gz -c .

然后,重命名 jdk 目录:

mv jdk1.7.0_67/ jdk/

安装 tomcat

首先,解压 tomcat 程序包:

tar -zxf /mnt/software/apache-tomcat-7.0.55.tar.gz -c .

然后,重命名 tomcat 目录:

mv apache-tomcat-7.0.55/ tomcat/

设置环境变量

首先,编辑.bashrc文件

vi ~/.bashrc

然后,在该文件末尾添加如下配置:

export java_home=/opt/jdk
export path=$path:$java_home

最后,需要使用source命令,让环境变量生效:

source ~/.bashrc

编写运行脚本

我们需要编写一个运行脚本,当启动容器时,运行该脚本,启动 tomcat,具体过程如下:

首先,创建运行脚本:

vi /root/run.sh

然后,编辑脚本内容如下:

#!/bin/bash
source ~/.bashrc
sh /opt/tomcat/bin/catalina.sh run

注意:这里必须先加载环境变量,然后使用 tomcat 的运行脚本来启动 tomcat 服务。

最后,为运行脚本添加执行权限:

chmod u+x /root/run.sh

退出容器

当以上步骤全部完成后,可使用exit命令,退出容器。

随后,可使用如下命令查看正在运行的容器:

docker ps

此时,您应该看不到任何正在运行的程序,因为刚才已经使用exit命令退出的容器,此时容器处于停止状态,可使用如下命令查看所有容器:

docker ps -a

输出如下内容:

container id    image      command             created             status                      ports               names
57c312bbaad1  docker.cn/docker/centos:centos6   "/bin/bash"  27 minutes ago  exited (0) 19 seconds ago   naughty_goldstine

记住以上container id(容器 id),随后我们将通过该容器,创建一个可运行 java web 的镜像。

创建 java web 镜像

使用以下命令,根据某个“容器 id”来创建一个新的“镜像”:

docker commit 57c312bbaad1 huangyong/javaweb:0.1

该容器的 id 是“57c312bbaad1”,所创建的镜像名是“huangyong/javaweb:0.1”,随后可使用镜像来启动 java web 容器。

启动 java web 容器

有必要首先使用docker images命令,查看当前所有的镜像:

repository                tag                 image id            created             virtual size
huangyong/javaweb         0.1                 fc826a4706af        38 seconds ago      562.8 mb
docker.cn/docker/centos   centos6             25c5298b1a36        7 weeks ago         215.8 mb

可见,此时已经看到了最新创建的镜像“huangyong/javaweb:0.1”,其镜像 id 是“fc826a4706af”。正如上面所描述的那样,我们可以通过“镜像名”或“镜像 id”来启动容器,与上次启动容器不同的是,我们现在不再进入容器的命令行,而是直接启动容器内部的 tomcat 服务。此时,需要使用以下命令:

docker run -d -p 58080:8080 --name javaweb huangyong/javaweb:0.1 /root/run.sh

稍作解释:

  • -d:表示以“守护模式”执行/root/run.sh脚本,此时 tomcat 控制台不会出现在输出终端上。

  • -p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口,这样就向外界暴露了 58080 端口,可通过 docker 网桥来访问容器内部的 8080 端口了。

  • --name:表示容器名称,用一个有意义的名称命名即可。

关于 docker 网桥的内容,需要补充说明一下。实际上 docker 在宿主机与容器之间,搭建了一座网络通信的桥梁,我们可通过宿主机 ip 地址与端口号来映射容器内部的 ip 地址与端口号,

在一系列参数后面的是“镜像名”或“镜像 id”,怎么方便就怎么来。最后是“初始命令”,它是上面编写的运行脚本,里面封装了加载环境变量并启动 tomcat 服务的命令。

当运行以上命令后,会立即输出一长串“容器 id”,我们可通过docker ps命令来查看当前正在运行的容器。

container id        image                   command             created             status              ports                     names
82f47923f926  huangyong/javaweb:0.1   "/root/run.sh"  4 seconds ago     up 3 seconds      0.0.0.0:58080->8080/tcp   javaweb

위 내용은 Docker는 Java 웹 실행 환경 예제 분석을 구축합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제