一、什么是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的安装配置
(注:本篇文档采用centOS6.9版本)
目前,CentOS 仅发行版本中的内核支持 Docker。
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统64位、系统内核版本为 2.6.32-431 或者更高版本。
1.在安装之前先通过uname –r来查看你的内核版本。
如果内核版本不符合要求,可以先更新系统为最新,此过程较慢,请耐心等待,命令如下:
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的镜像
docker pull centos #拉取centos镜像
由于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决。在这里配置阿里云加速器。
- 登录阿里开发者平台:https://dev.aliyun.com/search.html
- 点击“创建我的容器镜像”
- 注册/登录后,进入Docker 镜像仓库,选中左侧的加速器tab,这时候系统已经生成一个专属的加速器地址,
- 根据个人需要选择运行在docker中的镜像,按照要求改配置文件即可。
配置完成之后重启docker,再次拉取镜像即可。
docker images #查看所有本地镜像
docker rmi [image id] #删除指定镜像
说明:
- REPOSITORY 仓库
- TAG 标签,相当于给这个镜像标上一个版本,用于区分这是新版本还是旧版本,或者用于区分这是什么环境的版本,总是就是作为一个标识符的存在
- IMAGE ID是这个镜像的唯一标识,用于区分系统中不同的镜像
- CREATED ,什么时候创建的
SIZE,这个镜像的大小
4.镜像的使用
因为docker是容器,所以下载完镜像之后,需要启动镜像为容器。
docker run -itd centos #启动镜像
docker ps #查看所有运行中的容器
docker ps –a #查看所有容器,包括未运行的
docker stop [容器id] #停止运行容器 只需要输入id的前三位即可
四、docker中使用Dockerfile部署tomcat
1.在宿主机中war包所在的目录下创建Dockerfile文件
touch Dockerfile; #创建Dockerfile文件
vi Dockerfile #对Dockerfile进行编辑
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