我的笔记本是window7系统,为了模拟服务器的环境,安装了虚拟机centOS7。

前戏准备

  • sudo su
  • service docker start
  • Cannot connect to the Docker daemon. Is the docker daemon running on this host?)
  • docker images
  • docker ps
  • docker ps -a
  • docker start 容器ID
  • docker attach 容器ID

1.首先在宿主机(虚拟机centOS7)上安装docker:

参考菜鸟教程:http://www.runoob.com/docker/centos-docker-install.html

2.之后拉取Ubuntu镜像:

3.下载jdk/tomcat安装包,并且从宿主机(虚拟机)挂载到容器中:

3.1 centOS把源文件夹(/home/xiaoxie/javawebTool/)下的安装包复制到-->目标文件夹(/opt/soft/)下:

cp -Rf /home/xiaoxie/javawebTool/* /opt/soft/

(cp   -Rf     源文件夹下的所有文件     目标文件夹)

3.2 运行镜像(镜像id),并将宿主机/opt/soft目录挂载到容器的/opt/soft上 :

    docker run -i -t -v /opt/soft/:/opt/soft/ 9b9cb95443b5 /bin/bash

(docker run -i -t -v 宿主机文件目录 : 容器文件目录  镜像id  /bin/bash)

4.在容器内安装jdk和tomcat:

4.1 安装jdk到/opt/jdk:

    创建文件夹jdk:mkdir /opt/jdk

(mkdir  创建的文件夹)

    解压jdk安装包到/opt/jdk文件下:tar -zxvf jdk-8u161-linux-x64.tar.gz -C  /opt/jdk

(tar -zxvf      要解压文件的全路径        -C   安装路径)  

    centOS在docker中配置jdk的环境变量:

echo -e "\n\nexport JAVA_HOME=/opt/jdk/jdk1.8.0_161" | tee -a /etc/profile


    第二步:echo -e "\nexport PATH=\$PATH:\$JAVA_HOME/bin" | tee -a /etc/profile

 

source /etc/profile 

java -version

 

4.2 安装tomcat到/opt/tomcat:

mkdir tomcat

tar -zxvf apache-tomcat-7.0.85.tar.gz -C /opt/tomcat/

 

5.把配置好jdk、tomcat的容器commit成镜像,方便以后使用:

docker commit -m "first ubuntu" -a "xiaoxie" efa4ec8b663c docker.javaweb
(docker commit  -m "提示信息"      -a"作者"          容器id             镜像名称)

6.启动新生成的镜像,把宿主机器的80端口映射到容器的8080端口

(这一步导致,访问ip+端口号(8080)变成了直接访问域名,因为宿主机器的80端口是访问web的默认端口。)

    docker run -it  --name  tomcat  -p  80:8080  docker.javaweb  /bin/bash

(docker run -it  --name 容器名称 -p 宿主机端口  :  容器的端口  镜像名称   /bin/bash)

启动tomcat:

source /etc/profile

cd /opt/tomcat/apache-tomcat-7.0.85/bin/

./startup.sh

访问tomcat:
    在宿主机器上访问查询IP端口:ip addr

    (用来查找访问tomcat的域名)

docker容器内获取宿主机ip docker获取宿主机权限_docker安装jdk和tomcat

tomcat访问结果截图:

docker容器内获取宿主机ip docker获取宿主机权限_docker命令_02

---------------------------------------------------------------------------打完收工。

但有了疑惑,宿主机如何找到容器中的端口,或者说,宿主机和容器是如何通信的?

7.宿主机和容器是如何通信的:

给出流程图:

docker容器内获取宿主机ip docker获取宿主机权限_docker搭建web环境_03

如有不懂,请参考:点击打开链接,此流程图便是阅读这篇知乎文章,根据自己理解所画。


如有疑惑,请评论留言。

如有错误,也请评论留言。