我的笔记本是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的域名)
tomcat访问结果截图:
---------------------------------------------------------------------------打完收工。
但有了疑惑,宿主机如何找到容器中的端口,或者说,宿主机和容器是如何通信的?
7.宿主机和容器是如何通信的:
给出流程图:
如有不懂,请参考:点击打开链接,此流程图便是阅读这篇知乎文章,根据自己理解所画。
如有疑惑,请评论留言。
如有错误,也请评论留言。