Centos下docker安装及部署javaweb+tomcat+mysql

一、什么是Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker 包括三个基本概念

镜像(Image)镜像可以用来创建 Docker 容器。

容器(Container)容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

仓库(Repository)仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

Docker的优势

1.启动非常快,秒级实现

2.资源利用率高,一台高配置服务器可以跑上千个docker容器

3.更快的交付和部署,一次创建和配置后,可以在任意地方运行

4.内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率

5.易迁移,平台依赖性不强

二、Docker应用实例

例如我的服务器中已经安装了JDK,Redis和 Mysql,然而它们又出新版本了我想体验一下,但是如果都装到我一台机器上,会出现难以维护或者各种莫名其妙的问题,很难维护,这时候就可以在Docker容器中安装,他们各自独立,不会互相影响

Centos下docker安装及部署javaweb+tomcat+mysql

三、CentOS下Docker的安装配置

(注:本篇文档采用centOS6.9版本)

目前,CentOS 仅发行版本中的内核支持 Docker。

Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。

Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统64位、系统内核版本为 2.6.32-431 或者更高版本。

 

1.在安装之前先通过uname  r来查看你的内核版本。

Centos下docker安装及部署javaweb+tomcat+mysql 

如果内核版本不符合要求,可以先更新系统为最新,此过程较慢,请耐心等待,命令如下:

yum update

2.安装docker

Docker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,命令如下:

yum -y install docker-io  # 安装docker

service docker start  # 启动docker服务

chkconfig docker on  # 加入开机启动

 

基本信息的查看:

docker version # 查看docker的版本号,包括客户端、服务端、依赖的Go等

docker info # 查看 docker信息,包括管理的images, containers数等

docker images [ centos ] 查看镜像

需要注意,安装结束之后,查看服务是否为开启状态,否则先start,再继续后续操作。到这里docker的安装就完成了。

Docker安装有多种方法,这里只列出了其中的一种

3.docker内镜像的获取

首先需要启动docker服务,从docker上拉取一个镜像,例如拉取一个centos的镜像

Centos下docker安装及部署javaweb+tomcat+mysql

docker pull centos  #拉取centos镜像

 

由于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决。在这里配置阿里云加速器。

  1. 登录阿里开发者平台:https://dev.aliyun.com/search.html
  2. 点击“创建我的容器镜像”
  3. 注册/登录后,进入Docker 镜像仓库,选中左侧的加速器tab,这时候系统已经生成一个专属的加速器地址,
  4. 根据个人需要选择运行在docker中的镜像,按照要求改配置文件即可。

配置完成之后重启docker,再次拉取镜像即可。

docker images   #查看所有本地镜像

docker rmi [image id]  #删除指定镜像

Centos下docker安装及部署javaweb+tomcat+mysql

说明:

  • REPOSITORY 仓库
  • TAG 标签,相当于给这个镜像标上一个版本,用于区分这是新版本还是旧版本,或者用于区分这是什么环境的版本,总是就是作为一个标识符的存在
  • IMAGE ID是这个镜像的唯一标识,用于区分系统中不同的镜像
  • CREATED ,什么时候创建的

SIZE,这个镜像的大小

4.镜像的使用

因为docker是容器,所以下载完镜像之后,需要启动镜像为容器。

docker run -itd centos   #启动镜像

docker ps #查看所有运行中的容器

docker ps –a   #查看所有容器,包括未运行的

docker stop [容器id]  #停止运行容器 只需要输入id的前三位即可

Centos下docker安装及部署javaweb+tomcat+mysql

 

 

Centos下docker安装及部署javaweb+tomcat+mysql 

四、docker中使用Dockerfile部署tomcat

1.在宿主机中war包所在的目录下创建Dockerfile文件

touch Dockerfile; #创建Dockerfile文件

vi Dockerfile      #对Dockerfile进行编辑

Centos下docker安装及部署javaweb+tomcat+mysql 

From 基于哪个镜像

MAINTAINER 镜像创建者

ADD 把Dockerfile所在目录下的war包部署到webapps中

CMD container启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD.

 

2.构建镜像

docker build -t dockertest/tomcat .  #构建镜像

 

-t:表示为当前镜像命名。

.(最后的点):表示当前目录

3.运行镜像

docker run -p 8081:8080 dockertest/tomcat  #运行tomcat镜像

-p:表示宿主机的8080端口对外映射暴露为8081端口

docker ps   #查看当前运行的容器,

4.在外部访问该web项目

Ip:8081/dockertest

五、docker中安装mysql

1.下载mysql镜像

docker pull mysql

 

2.运行mysql容器(挂载数据库数据到宿主机(持久化))

docker run --name dockermysql -e MYSQL_ROOT_PASSWORD=qwe123 -p 3306:3306 -d mysql

 

3.进入容器

docker exec -it dockermysql  /bin/bash

 

4.登录mysql

mysql –uroot -p

进入以后use mysql数据库:

mysql> use mysql;

5.在容器中执行以下sql即可用navicat登录数据库

mysql> update user set authentication_string = password('root') where user = 'root';

将root的密码改为root。

接着,由于mysql中root执行绑定在了localhost,因此需要对root进行授权,代码如下

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

最后,使用navitecat测试mysql连接

 

六、附一些容器内基本命令

容器基本命令:

# 使用镜像创建容器

docker run -i -t dockertest/centos

docker run -i -t dockertest/centos /bin/bash # 创建一个容器,让其中运行 bash 应用,退出后容器关闭

 

# 查看容器

    docker ps :列出当前所有正在运行的container

    docker ps -l :列出最近一次启动的container

    docker ps -a :列出所有的container(包含历史,即运行过的container

    docker ps -q :列出最近一次运行的container ID

# 再次启动容器

    docker start/stop/restart <container> #:开启/停止/重启container

    docker start [container_id] #:再次运行某个container (包括历史container)

#进入正在运行的docker容器

    docker exec -it [container_id] /bin/bash

    docker run -i -t -p <host_port:contain_port> #:映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。

 

# 删除容器

    docker rm <container...> #:删除一个或多个container

    docker rm `docker ps -a -q` #:删除所有的container

    docker ps -a -q | xargs docker rm #:同上, 删除所有的container