赞
踩
我们使用docker的初衷无外乎这么几个:
1、简化部署,开发环境通过镜像打包到服务器上,加载即可运行,免去很多的环境配置,缩短部署时长,减少部署差错;
2、快速复制,实现分布式部署,一个应用可以快速拷贝到N台服务器,也可以搭建镜像管理服务器自动维护;
3、增强沟通,开发人员、测试人员、业务人员之间可以更好的交流。
今天,使用最原始的方式,从零开始带您一步步搭建自己的基于java和tomcat的web服务器。总体步骤如下:
1、拉取ubuntu操作系统;
2、在ubuntu上安装和配置java的jdk,用的1.8版本,商业免费的哦
3、在ubuntu上安装和配置tomcat,用的9版
4、测试服务器是否正常,并把自己的web应用拷贝的容器中
5、把配置好的web服务器和自己的web应用打包成镜像
6、把镜像复制到其它机器上运行
======================================
步骤1:拉取ubuntu操作系统
qkm@qkm-X61:~/软件/AutoBrowser$ sudo docker pull ubuntu:20.04
20.04: Pulling from library/ubuntu
7b1a6ab2e44d: Pull complete
Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
Status: Downloaded newer image for ubuntu:20.04
docker.io/library/ubuntu:20.04
qkm@qkm-X61:~/软件/AutoBrowser$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 20.04 ba6acccedd29 2 months ago 72.8MB
hello-world latest feb5d9fea6a5 2 months ago 13.3kB
qkm@qkm-X61:/$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
==============================================
qkm@qkm-X61:/$ sudo docker run -dit ubuntu:20.04
bc4374e42e58d33862e71bfc4dd01ec7dfcc1319912a2e2c92cb07f3ed5f2c2a
qkm@qkm-X61:/$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc4374e42e58 ubuntu:20.04 "bash" 5 seconds ago Up 4 seconds gallant_carver
qkm@qkm-X61:/$ docker attach bc4374e42e58
//指令执行后进入了容器,是一个ubuntu linux操作系统,相当于虚拟机
root@bc4374e42e58:/# ls
bin dev home lib32 libx32 mnt proc run srv tmp var
boot etc lib lib64 media opt root sbin sys usr
root@bc4374e42e58:/# pwd
/
root@bc4374e42e58:/# cd usr
root@bc4374e42e58:/usr# ls
bin games include lib lib32 lib64 libx32 local sbin share src
root@bc4374e42e58:/usr# cd ..
root@bc4374e42e58:/# cd home
root@bc4374e42e58:/home# ls
root@bc4374e42e58:/home# exit
//使用attach方式进入容器,退出时发现运行中的容器也被关闭了
=========================
qkm@qkm-X61:/home$ sudo docker run -dit ubuntu:20.04
0bf158ef0c6aad1ea17016b79839dd914ffe649dcce90f924093c0ad56d8503e
//
qkm@qkm-X61:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0bf158ef0c6a ubuntu:20.04 "bash" About a minute ago Up About a minute hungry_shtern
qkm@qkm-X61:~$ docker exec -i -t 0bf158ef0c6a /bin/bash
root@0bf158ef0c6a:/# ls
bin dev home lib32 libx32 mnt proc run srv tmp var
boot etc lib lib64 media opt root sbin sys usr
root@0bf158ef0c6a:/# cd home
root@0bf158ef0c6a:/home# ls
jdk-8u202-linux-x64.tar.gz
root@0bf158ef0c6a:/home# exit
exit
qkm@qkm-X61:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0bf158ef0c6a ubuntu:20.04 "bash" 4 minutes ago Up 4 minutes hungry_shtern
//使用exec方式进入容器,退出时可以看出运行中的容器仍在运行
==========================================================
步骤2:在ubuntu上安装和配置java的jdk
qkm@qkm-X61:/home$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0bf158ef0c6a ubuntu:20.04 "bash" 9 seconds ago Up 8 seconds hungry_shtern
//把java的jdk拷贝到容器中
qkm@qkm-X61:/home$ docker cp /home/qkm/下载/java/jdk/jdk-8u202-linux-x64.tar.gz 0bf158ef0c6a:/home
//新开一个终端
qkm@qkm-X61:~$ docker exec -i -t 0bf158ef0c6a /bin/bash
root@0bf158ef0c6a:/# cd home
root@0bf158ef0c6a:/home# ls
jdk-8u202-linux-x64.tar.gz
root@0bf158ef0c6a:/home# cd /usr/local
root@0bf158ef0c6a:/usr/local# ls
bin etc games include lib man sbin share src
root@0bf158ef0c6a:/usr/local# mkdir java
root@0bf158ef0c6a:/usr/local# ls
bin etc games include java lib man sbin share src
root@0bf158ef0c6a:/usr/local# cd /home
root@0bf158ef0c6a:/home# ls
jdk-8u202-linux-x64.tar.gz
root@0bf158ef0c6a:/home# tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/java
jdk1.8.0_202/
jdk1.8.0_202/javafx-src.zip
..............
root@0bf158ef0c6a:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Get:2 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB]
.....................
//不做更新,装不了vim编辑器
root@0bf158ef0c6a:/# apt-get install vim
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
.....................
root@0bf158ef0c6a:/# vim /etc/profile
按i进入编辑模式,拷贝以下内容到文件中
export JAVA_HOME=/usr/local/java/jdk1.8.0_202 #这里与自己的jdk路经一致
export JRE_HOME=${JAVA_HOME}/jre #jdk路经里的jre文件夹
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib #jdk路经里的lib文件夹
export PATH=${JAVA_HOME}/bin:$PATH #jdk里的bin文件夹
按照顺序按键ESC,:,wq(x也可以)保存退出
输入下面命令使得变量生效
root@0bf158ef0c6a:/# source /etc/profile
root@0bf158ef0c6a:/# java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
root@0bf158ef0c6a:/#
安装和配置jdk可参考我之前发的文章:
Linux,Ubuntu20.04 LTS环境下安装JDK1.8和IDEA2021_乱世刀疤-CSDN博客
==============================
步骤3:在ubuntu上安装和配置tomcat
在宿主机器终端窗口,把已下载好的tomcat9压缩包复制到运行的容器中
qkm@qkm-X61:/home$ docker cp /home/qkm/下载/apache-tomcat-9.0.54.tar.gz 0bf158ef0c6a:/home
在容器中的终端窗口
root@0bf158ef0c6a:/# cd /usr/local
root@0bf158ef0c6a:/usr/local# mkdir tomcat
root@0bf158ef0c6a:/usr/local# cd /home
root@0bf158ef0c6a:/home# tar -zxvf apache-tomcat-9.0.54.tar.gz -C /usr/local/tomcat
apache-tomcat-9.0.54/conf/
apache-tomcat-9.0.54/conf/catalina.policy
.............
root@0bf158ef0c6a:/home# cd /usr/local/tomcat
root@0bf158ef0c6a:/usr/local/tomcat# chmod 777 -R apache-tomcat-9.0.54
root@0bf158ef0c6a:/usr/local/tomcat# cd apache-tomcat-9.0.54
root@0bf158ef0c6a:/usr/local/tomcat/apache-tomcat-9.0.54# chmod +x ./bin/startup.sh
root@0bf158ef0c6a:/usr/local/tomcat/apache-tomcat-9.0.54# vim /etc/profile
//添加以下内容
export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-9.0.54
root@0bf158ef0c6a:/usr/local/tomcat/apache-tomcat-9.0.54# source /etc/profile
root@0bf158ef0c6a:/usr/local/tomcat/apache-tomcat-9.0.54# ./bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-9.0.54
Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-9.0.54
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-9.0.54/temp
Using JRE_HOME: /usr/local/java/jdk1.8.0_202/jre
Using CLASSPATH: /usr/local/tomcat/apache-tomcat-9.0.54/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-9.0.54/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
//下面步骤把服务加到自启动。经实测,还是需要在启动容器时运行一个启动脚本sh。
root@0bf158ef0c6a:/usr/local/tomcat/apache-tomcat-9.0.54# cp /usr/local/tomcat/apache-tomcat-9.0.54/bin/catalina.sh /etc/init.d/
root@0bf158ef0c6a:/usr/local/tomcat/apache-tomcat-9.0.54# cd /etc/init.d
root@0bf158ef0c6a:/etc/init.d# mv catalina.sh tomcat
root@0bf158ef0c6a:/etc/init.d# service tomcat start
Cannot find /etc/bin/setclasspath.sh
This file is needed to run this program
root@0bf158ef0c6a:/etc/init.d# chmod +x tomcat
root@0bf158ef0c6a:/etc/init.d# vim tomcat
root@0bf158ef0c6a:/etc/init.d# systemctl daemon-reload
bash: systemctl: command not found
root@0bf158ef0c6a:/etc/init.d# sudo systemctl daemon-reload
bash: sudo: command not found
root@0bf158ef0c6a:/etc/init.d# service tomcat start
Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-9.0.54
Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-9.0.54
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-9.0.54/temp
Using JRE_HOME: /usr/local/java/jdk1.8.0_202
Using CLASSPATH: /usr/local/tomcat/apache-tomcat-9.0.54/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-9.0.54/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
root@0bf158ef0c6a:/etc/init.d# cd ..
root@0bf158ef0c6a:/etc# ls
adduser.conf dpkg inputrc lsb-release opt rc3.d skel
alternatives e2scrub.conf issue machine-id os-release rc4.d subgid
apt environment issue.net magic pam.conf rc5.d subuid
bash.bashrc fstab kernel magic.mime pam.d rc6.d sysctl.conf
bindresvport.blacklist gai.conf ld.so.cache mailcap passwd rcS.d sysctl.d
cron.d group ld.so.conf mailcap.order profile resolv.conf systemd
cron.daily gshadow ld.so.conf.d mime.types profile.d rmt terminfo
debconf.conf host.conf legal mke2fs.conf python3.8 security update-motd.d
debian_version hostname libaudit.conf mtab rc0.d selinux vim
default hosts login.defs networks rc1.d shadow xattr.conf
deluser.conf init.d logrotate.d nsswitch.conf rc2.d shells
root@0bf158ef0c6a:/etc# cd rc2.d
root@0bf158ef0c6a:/etc/rc2.d# ln -s /etc/init.d/tomcat /etc/rc2.d/S01tomcat
//编写启动服务脚本
root@0bf158ef0c6a:/# vim /root/start_web_server.sh
#!/bin/bash
#上面一行很重要,如果不设置会出现运行脚本文件错误
#下面刷新环境变量
source /etc/profile
#启动tomcat服务
service tomcat start
#下面一行特别重要,保留一个终端,防止容器启动后即退出,相当于保留住init 1号进程
/bin/bash
按ESC,:,wq保存sh文件并退出编辑vim模式
安装和配置tomcat9可以参考我之前发的文章:
Linux,Ubuntu20.04 LTS环境下安装tomcat9_乱世刀疤-CSDN博客
同理,还可以在容器上安装mysql等服务器必备的服务。
================================
步骤4:测试web服务器是否正常
tomcat服务启动后,即可到web浏览器输入网址测试,因本容器开始时未做端口映像,所以这步到后面进一步验证。
================================
步骤5:把配置好的web服务器和自己的web应用打包成镜像
到宿主机器终端窗口:
复制自己的web应用到容器中
qkm@qkm-X61:/usr/local/tomcat/apache-tomcat-9.0.54/webapps$ docker cp /usr/local/tomcat/apache-tomcat-9.0.54/webapps/servlet 0bf158ef0c6a:/usr/local/tomcat/apache-tomcat-9.0.54/webapps/
把容器打包成镜像
docker commit -a "qkm" -m "qkm's web server" 0bf158ef0c6a qkm-web-server:1.0
-a 表示作者
-m 表示镜像描述
0bf158ef0c6a 是在运行的容器id,可在宿主机器使用docker ps查询
qkm-web-server 是镜像名称
1.0 是镜像tag编号
qkm@qkm-X61:/$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
qkm-web-server 1.0 a9fefcc170d5 4 minutes ago 798MB
ubuntu 20.04 ba6acccedd29 2 months ago 72.8MB
hello-world latest feb5d9fea6a5 2 months ago 13.3kB
===================================
步骤6:使用新生成的镜像启动容器,测试服务器是否正常,验证镜像是否可用。
docker run -dit -p 9000:8080 qkm-web-server:1.0 bash /root/start_web_server.sh
-p 此参数实现映射端口,9000是宿主机器端口,8080是容器端口
其他参数请自行查询含义,下面看看容器运行情况:
qkm@qkm-X61:/$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea59f973c6a0 qkm-web-server:1.0 "bash /root/start_we…" 8 seconds ago Up 7 seconds 0.0.0.0:9000->8080/tcp, :::9000->8080/tcp admiring_spence
//上面指令也可以加个--restart可以让容器在遇到故障停止时自动重新启动,--name为容器起个名字
docker run -dit -p 9000:8080 qkm-web-server:1.0 --restart=always --name web_server bash /root/start_web_server.sh
在浏览器中打开http://127.0.0.1:9000/servlet/test1.html,可以看到自己的应用已经跑起来了。
================================
最后:
分布式部署过程时,可以把上面生成的镜像,通过多种方式在不同的机器上启动服务,再用nginx等来实现负载均衡。
本篇重在介绍如何通过容器组建自己的服务器环境并打包成镜像,怎么使用的不再详细介绍。只说下面的方式二。
方式一:push到镜像仓库,别的机器使用pull下载
docker push xxxxxx
方式二:打包成tar压缩包,拷贝到别的机器使用
qkm@qkm-X61:/$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
qkm-web-server 1.0 a9fefcc170d5 21 minutes ago 798MB
ubuntu 20.04 ba6acccedd29 2 months ago 72.8MB
hello-world latest feb5d9fea6a5 2 months ago 13.3kB
qkm@qkm-X61:/$ pwd
/
qkm@qkm-X61:/$ cd home
qkm@qkm-X61:/home$ ls
lost+found qkm
qkm@qkm-X61:/home$ cd qkm
qkm@qkm-X61:~$ ls
公共的 模板 软件 视频 图片 文档 下载 音乐 账号 桌面 program snap
qkm@qkm-X61:~$ mkdir docker
qkm@qkm-X61:~$ docker save -o /home/qkm/docker/qkm-web-server_1.0.tar qkm-web-server:1.0
qkm@qkm-X61:~$ cd docker
qkm@qkm-X61:~/docker$ ls
qkm-web-server_1.0.tar
//在目标机器,拿到镜像文件后可以使用下面指令加载
[qkm@localhost ~]$ sudo docker load -i /home/qkm/docker/qkm-web-server_1.0.tar
f56d923ffc55: Loading layer [==================================================>] 729.1MB/729.1MB
Loaded image: qkm-web-server:1.0
[qkm@localhost ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
qkm-web-server 1.0 a9fefcc170d5 8 hours ago 798MB
ubuntu 20.04 ba6acccedd29 2 months ago 72.8MB
hello-world latest feb5d9fea6a5 2 months ago 13.3kB
[qkm@localhost ~]$ sudo docker run -dit -p 9000:8080 qkm-web-server:1.0 bash /root/start_web_server.sh
7b435c564e9b841bd4f4c2aa486761fe1df3fbaa0e7969a2558445853d4e2f52
[qkm@localhost ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b435c564e9b qkm-web-server:1.0 "bash /root/start_we…" 8 seconds ago Up 5 seconds 0.0.0.0:9000->8080/tcp, :::9000->8080/tcp agitated_lamarr
方式三:scp导入目标机器
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。