当前位置:   article > 正文

用docker从零开始部署web服务器并打包成镜像(方案1),讲解过程超级详细_20.04: pulling from library/ubuntu 96d54c3075c9: p

20.04: pulling from library/ubuntu 96d54c3075c9: pulling fs layer error pull

      我们使用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导入目标机器









 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/80755
推荐阅读
相关标签
  

闽ICP备14008679号