Docker部署Apache-tomcat
实验环境:
Centos 7
phpStudy(提供wget 下载以下的两个软件包到Centos)
所需软件包:
jdk-8u11-linux-x64.tar.gz
apache-tomcat-7.0.84.tar.gz
提供下载链接:https://pan.baidu.com/s/1miZh9wO 密码:8d5f
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
我们可开启多个 Docker 容器,而每个 Docker 容器中可运行自己所需的应用程序,Docker 容器之间也是相互隔离的,同样地,都是占用的宿主机的硬件与网络资源。
一、.配置好yum源
可参考:https://blog.51cto.com/12445563/2065914 配置好后进行以下代码
[root@cany ~]# setenforce 0 临时关闭selinux
[root@cany ~]# systemctl stop firewalld.service 关闭firewalld防火墙
[root@cany ~]# yum install docker -y 安装docker
[root@cany ~]# systemctl start docker.service 启动docker服务
二、.下载镜像
搜索可用的docker镜像:docker search name
会从官方搜索匹配到的镜像 也可以去配置国内源 下载相对快些
[root@cany ~]# docker pull centos:latest 下载最新Centos镜像
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
af4b0a2388c6: Pull complete
Digest: sha256:2671f7a3eea36ce43609e9fe7435ade83094291055f1c96d9d1d1d7c0b986a5d
[root@cany ~]# docker images 看本地所有的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest ff426288ea90 2 weeks ago 207.2 MB
docker的镜像并不大 这个最新的才207.2MB
三、.下载两个软件包
先把两个软件包放到phpStudy网站根目录下
[root@cany ~]# mkdir /root/cany 创建存放目录 等等可以挂载到容器里面
[root@cany ~]# cd /root/cany/ 把软件包放到这文件夹里面
[root@cany cany]# wget http://10.2.4.144/apache-tomcat-7.0.84.tar.gz
--2018-01-29 04:47:43-- http://10.2.4.144/apache-tomcat-7.0.84.tar.gz
Connecting to 10.2.4.144:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9032792 (8.6M) [application/x-gzip]
Saving to: ‘apache-tomcat-7.0.84.tar.gz’
100%[==============================================================================================================>] 9,032,792 --.-K/s in 0.07s
2018-01-29 04:47:43 (125 MB/s) - ‘apache-tomcat-7.0.84.tar.gz’ saved [9032792/9032792]
[root@cany cany]# wget http://10.2.4.144/jdk-8u11-linux-x64.tar.gz
--2018-01-29 04:47:58-- http://10.2.4.144/jdk-8u11-linux-x64.tar.gz
Connecting to 10.2.4.144:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 159019376 (152M) [application/x-gzip]
Saving to: ‘jdk-8u11-linux-x64.tar.gz’
100%[==============================================================================================================>] 159,019,376 23.2MB/s in 12s
2018-01-29 04:48:10 (12.5 MB/s) - ‘jdk-8u11-linux-x64.tar.gz’ saved [159019376/159019376]
四、.创建容器
用法:docker run <相关参数> <镜像 ID> <初始命令>
IMAGE ID
docker run -i -t -v /root/cany/:/mnt/cany/ ff426288ea90 /bin/bash
相关参数包括:
-i:表示以“交互模式”运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
此时使用/bin/bash,表示什么也不做,只需进入命令行即可
五、.安装服务相关环境和软件
搭建apache-tomcat服务需要安装jdk和tomcat (我选择 /opt/目录作为安装目录)
下面的过程均在容器内部进行:
[root@c6a61597a46d /]# cd /mnt/cany/ 进入挂载的目录
[root@c6a61597a46d cany]# tar -zxf 看到了我们下载的两个软件包
apache-tomcat-7.0.84.tar.gz jdk-8u11-linux-x64.tar.gz
[root@c6a61597a46d cany]# tar -zxf apache-tomcat-7.0.84.tar.gz 进行解压
[root@c6a61597a46d cany]# tar -zxf jdk-8u11-linux-x64.tar.gz
[root@c6a61597a46d cany]# mv apache-tomcat-7.0.84/ /opt/tomcat/ 把解压后的文件夹转移到我们选择的安装目录
[root@c6a61597a46d cany]# mv jdk1.8.0_11/ /opt/jdk/
设置环境变量
1.编辑.bashrc文件
[root@c6a61597a46d cany]# vi ~/.bashrc
然后,在该文件末尾添加如下配置:
export JAVA_HOME=/opt/jdk
export PATH=$PATH:$JAVA_HOME
[root@c6a61597a46d cany]# source ~/.bashrc 用source命令让环境变量生效
2.编写容器启动运行脚本
毕竟容器镜像比较小 原生 缺少很多环境 下面来编写脚本
当启动容器时,运行该脚本,启动 Tomcat 具体步骤如下:
[root@c6a61597a46d cany]# vi /root/cany.sh
#!/bin/bash
source ~/.bashrc 必须先加载环境变量
sh /opt/tomcat/bin/catalina.sh run 然后使用 Tomcat 的运行脚本来启动
[root@c6a61597a46d cany]# chmod u+x /root/cany.sh 对当前目录下的cany.sh文件的所有者增加可执行权限
以上步骤全部完成后,可使用exit命令,退出容器。
六、创建tomcat镜像
对于刚才的配置我们可以创建一个镜像 方便以后直接利用 或者转移到别的机器上也是可以使用的 具体操作如下:
[root@cany cany]# docker ps 查看正在运行的容器 怎么会没有呢 我们刚才不是已经创建了一个吗?
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@cany cany]# docker ps -a 查看所以容器看看究竟 发现还在
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6a61597a46d ff426288ea90 "/bin/bash" 36 minutes ago Exited (0) 41 seconds ago kickass_hopper
因为刚才使用exit命令退出的容器,此时容器处于停止状态 所以每次进入容器修改东西后出来一定要记得去开启容器
记住以上CONTAINER ID(容器 ID),等等我们通过该容器,创建一个可运行tomcat的镜像。
相关命令如下:
docker stop <容器名or ID> 停止某个容器
docker start <容器名or ID> 启动某个容器
docker kill <容器名or ID> 杀掉某个容器
docker rm <容器名or ID> 删除某个容器
docker rmi IMAGE 删除镜像
docker ps -a -q 查看所有容器ID
docker rm $(docker ps -a -q) 删除所有的容器:
docker attach <容器名or ID> attach到运行中的容器
把我们刚才配置好的做一个新的镜像
[root@cany ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6a61597a46d ff426288ea90 "/bin/bash" 58 minutes ago Exited (0) 5 minutes ago kickass_hopper
[root@cany ~]# docker commit c6a61597a46d cany/tomcat:0.1
sha256:7cbbe3742372edc2a19ba37ea5684a573c92d2e08be437a9d6028688371b5152
[root@cany ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cany/tomcat 0.1 7cbbe3742372 18 seconds ago 544.9 MB
docker.io/centos latest ff426288ea90 2 weeks ago 207.2 MB
看到了吗? 镜像名为cany/tomcat
七、启动tomcat镜像容器
与上次启动容器不同的是,我们现在不再进入容器的命令行,而是直接启动容器内部的 Tomcat 服务
[root@cany ~]# docker run -d -p 80:8080 --name web cany/tomcat:0.1 /root/cany.sh
401ddf6c97128e377df9ae8f3992ef2b065d053475387e1fac6f49e2b7390414
[root@cany ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
401ddf6c9712 cany/tomcat:0.1 "/root/cany.sh" 32 seconds ago Up 29 seconds 0.0.0.0:80->8080/tcp web
-d:表示以“守护模式”执行/root/cany.sh脚本,此时 Tomcat 控制台不会出现在输出终端上。
-p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 80 端口,这样就向外界暴露了 80 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
--name:表示容器名称,用一个有意义的名称命名即可。
Docker网桥:通过宿主机 IP 地址与端口号来映射容器内部的 IP 地址与端口号
八、测试
http://10.2.4.88/ 这里使用的是宿主机的 IP 地址 容器的8080端口映射到了80端口 因为http默认是80 所以不需要打端口 直接访问
怎么是hello cany ?
答:因为我去了/opt/tomcat/webapps/ROOT 目录 删掉了全部文件 创建了index.html 不过你们可以忽略此步 所以我就没写在上面了
总结:当我开始了解docker的时候就去网上查阅其他大神的文章 发现挺多讲的不是很全 也没有提供相关软件包 综合所查阅到的资料 终于做通了这个实验 并上传了我个人实验的软件包 希望此文章能帮助到刚入门docker的朋友们!!!
转载于:https://blog.51cto.com/12445563/2066848