网站首页 文章专栏 Docker的安装以及搭建nginx和Tomcat的web环境
Docker的安装以及搭建nginx和Tomcat的web环境

一,Docker是什么?

Docker 属于 Linux 容器的一种封装,它是目前最流行的 Linux 容器解决方案

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心 "在我机子上跑是好的啊!" 这种问题了。docker是基于Go语言实现的云开源项目,诞生于2013年初,最初是dotCloud公司发起,由镜像(Image)、容器(Container)、仓库(Repository) 三大核心组成。


二,Docker的好处与用途

更快速的交付和部署:使用docker,开发人员可以构建一个标准环境镜像跑代码,开发完成后测试与运维可以直接使用相同的环境来运行。

更轻松的迁移与拓展:docker基本可以任意平台上运行,带来了极大的方便。

更简单的管理:使用Dockerfile,只需要修改小小的配置,就可以替代以往大量的更新工作。


由于docker可以运行多个容器,通过多个容器,一台机器就可以跑多个服务,因此在本机就可以模拟出微服务架构。


三,Docker的安装

1. 安装时我使用的是Linux的centOS 7.1版本服务器,首先检查下内核版本,大于3.10即可,如果小于的话,先提升内核,这里不做介绍。

uname -r

2. 使用sudo或root权限登录终端。

3. 如果以前安装过的话,先卸载掉。

yum remove docker \ docker-common \ docker-selinux \ docker-engine

4. 安装需要的依赖包。

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --enable extras

5. 设置yum源。

sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

6. 安装docker版本。(敲黑板,划重点

    (1)安装最新版:

yum install -y docker-ce

    一般这个命令就行了,然而我怎么都安装失败,说是缺少依赖包,后来参考另一篇教程使用一下命令安装成功了,这里后一种方式仅供参考,安装过程中遇到停顿按y就行了。

sudo yum install docker

    

    (2)安装指定版本:

#查询版本列表
yum list docker-ce --showduplicates | sort -r

...(列表)

yum install -y docker-ce-17.09.0.ce

7. 启动docker

systemctl start docker.service

8. 验证是否安装成功

docker version

如果出现以下则证明安装成功。

X4EELKB(K}(B{%R0%ZI{WMR.png


四,docker安装nginx,tomcat镜像搭建web环境

由于Docker官方服务器在海外,因此不推荐使用,这里建议使用网易蜂巢镜像中心:

https://c.163.com/hub#/m/home/

       

1. 下载镜像。

docker pull hub.c.163.com/library/tomcat:latest
docker pull hub.c.163.com/library/nginx:latest

`C}2C7UO_HO%2N@ZPVC4BFR.png

2. 查看下载好的镜像有哪些。

docker images

$V(WYIPLQQ8@}T7)I}%69TP.png

3. 创建nginx容器。

docker run -ti -d -p 8777:80 hub.c.163.com/library/nginx /bin/bash       创建nginx容器

以上 run是创建容器命令, 加-ti 后docker命令会为容器分配一个伪终端,并接管其stdin/stdout支持交互操作,这时候bash命令不会自动退出, -d是以守护进程运行, -p 80:80是将宿主端口的8777(前一个)映射到容器内端口80(后一个),hub.c.163.com/library/nginx 为镜像名称。

4. 查看已创建的容器。

docker ps (-a)

加-a则是把没启动的容器也列出来,不加则只列出已启动的容器。


5. 进入nginx容器内部。

docker exec -ti a62119e032b3 /bin/bash      进入后台容器并提供bash
 /usr/sbin/nginx       启动nginx服务

如果运行ps, vim等命令提示command not found,

apt-get install procps 
或 
apt-get update        
apt-get install vim        安装vim

6. 在宿主机上创建两个tomcat的发布目录,等会挂载到tomcat镜像用。

cd /
mkdir tomcat1 tomcat2

7. 创建两个tomcat容器。

docker run -ti -d -p 8778:8080 -h tomcat1 -v /tomcat1:/usr/local/tomcat/webapps/ROOT hub.c.163.com/library/tomcat /bin/bash
docker run -ti -d -p 8779:8080  -h tomcat2 -v /tomcat2:/usr/local/tomcat/webapps/ROOT hub.c.163.com/library/tomcat /bin/bash

-v 将宿主机上的 /tomcat1 挂载到 tomcat容器的 /usr/local/tomcat/webapps/ROOT 下,8778:8080,是将宿主机的8778端口映射到docker容器的8080端口。

docker ps

W@`24UKCMUBWLWHUEULS}B5.png

如上图所示已经开了三个容器,分别是一个nginx,两个tomcat,接下来进入tomcat容器启动tomcat。

docker exec -ti 1845a9f60006 /bin/bash    #进入容器

L`2U2KMI]}9VL{HRKF1VCCX.png

进入后发现和普通的tomcat内部结构一样,我们进入bin下输入 ./startup.sh即可启动,启动后输入exit退出容器,返回到宿主机,同样操作启动第二个tomcat容器。

返回到宿主机,进入之前创建的tomcat1,tomcat2文件夹内,编写测试页面。

cd /tomcat1
vim index.jsp
cd /tomcat2
vim index.jsp

此时通过ip加上我们自定义的8778,和8779端口来访问测试下。

)5X0GAN0@NWNUC05`864NY8.png

W}HUI]XSKS~VF4)3{6I7I4E.png

已经可以访问了。

8. 在nginx容器中进行负载均衡配置

进入nginx容器后,配置负载均衡。

vim /etc/nginx/nginx.conf
# 添加如下
upstream my_nginx{
    server 47.96.0.218:8778;
    server 47.96.0.218:8779;
}
vim /etc/nginx/conf.d/default.conf
   #   修改成如下
   # location / {
   #     root   /usr/share/nginx/html;
   #     index  index.html index.htm;
   # }
    
   location ~ {
      proxy_pass http://my_nginx;
   }

重启nginx服务

pkill nginx
/usr/sbin/nginx

在浏览器测试下。

HGA@[I6`XOSSVA3AG2I_RXQ.png

%57ST%~M9~8)$0E3W2~~AQU.png

我们没有设权重,所以两个tomcat是轮询访问,我们不停刷新,两个tomcat服务便交替运行,至于访问两个tomcat服务器的session一致性问题,有很多种方式,采用ip哈希,广播,或者redis缓存session都可,各有优缺点,我一般使用redis缓存。


注意:以上对nginx,tomcat容器的修改在容器停止后并不会保存下来,也就是说下次启动容器则相当于启动一个崭新的容器,如果要保存,则需要把容器打包成镜像 docker commit 容器的id  新镜像名称  成后docker images查看镜像,进入这个镜像里面修改后的内容则还在。


五,常用的docker 命令

docker run  在一个新的容器执行一个命令

docker start 开一个或者更多已经停止的容器

docker stop 停止一个运行的容器

docker restart 重新开始一个运行的容器

docker kill 杀死一个运行的容器

docker rm 删除一个或更多的容器

docker pause 暂停一个容器的所有进程

docker unpaunse 恢复一个容器的所有进程

docker容器操作运维

docker ps 列出容器

docker inspect 列出关于容器或镜像的底层信息

docker top 显示一个容器运行的进程

docker attach 附上一个运行的容器

docker events 得到实时的来自服务的事件

docker log 获得一个容器的日志

docker wait 阻塞直到一个容器停止,然后打印它的退出代码

docker export 导出一个容器的文件系统作为一个tar文件

docker port 列出容器映射的端口

docker版本管理

docker commit 创建一个新的镜像从一个容器

docker cp 从容器复制一个文件或目录到本地目录或标准输出

docker diff 展示一个容器文件系统的变化

docker镜像仓库

docker login 登入仓库

docker pull 拉取镜像

docker push 推送镜像

docker search 搜索镜像

docker本地镜像管理

docker images 列出本地的镜像

docker rmi 删除本地的镜像

docker tag 打标签本地的镜像

docker build 通过Dockerfile构建本地的镜像

docker histroy 列出镜像的历史

docker save 保存本地的镜像为一个tar文件

docker import 通过tar导入镜像

docker load 加载tar镜像

docker其它命令

docker info

docker version





版权声明:本文由星尘阁原创出品,转载请注明出处!

本文链接:http://www.52xingchen.cn/detail/36




赞助本站,网站的发展离不开你们的支持!
来说两句吧
最新评论