一、什么是docker?
1.Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上。容器是完全使用沙箱机制,相互之间不会有任何接口;
2.Docker的思想来源于集装箱,集装箱(docker容器)可以放在任何吨位的轮船上(linux系统),轮船也不会在意集装箱里放的是什么东西。
二、使用docker的好处?
1.比如我们安装一个docker的tomcat容器,这个容器不需要考虑系统的环境、版本,也不需要配置JAVA环境,它作为一个独立的容器可以发布在不同的linux系统上(前提是这个linux系统支持docker),和系统内其他软件也不会产生任何影响;
2.docker的安装非常容易,解决了大部分软件在linux系统安装需要安装大量依赖包的问题;
3.容器的复用(实际上是镜像),A机器的tomcat容器里的web项目可以一起打包到B机器发布,不用另外配置任何参数。每一个docker容器的安装、打包、发布都是轻量级的。
三、docker的常用名词解释和概念
1.什么是docker镜像、容器?它们的关系?
我们可以把镜像当做一个docker容器的实体,我们去安装一个docker容器,首先也是安装的镜像。但是我们并不使用镜像,我们使用的是容器,容器是镜像的实例化。每一个容器都会有自己对应的镜像,将镜像‘实例化’后就是我们需要的容器。所以,镜像才是我们需要关心和维护的docker文件,而容器可以随时用镜像实例化,随时抛弃,有问题的容器就删除掉。镜像和容器是一对多的关系,也就是说一个镜像可以实例化成多个容器
2.容器到底是怎样的存在?
容器可以是一个虚拟机,也可以是一个中间件。比如我在最开始安装tomcat容器的时候,是安装了一个centos的容器,我将我们平时使用的tar包上传到这个centos容器内解压发布。但是因为后来在迁移容器的时候,这种虚拟机容器出现了问题没有解决,我才重新安装tomcat的容器,并且在centos容器内安装mysql也会出现缺少文件的问题。而且在linux系统内安装一个centos的容器也没有任何意义,因为centos的容器看起来像是一个轮船,而不是集装箱。所以最后放弃了这种方式,只安装中间件的容器;
3.端口映射
容器和操作系统唯一的连接通道就是端口,比如我们安装一个tomcat容器时映射的是8080端口,那么这台linux服务器的8080端口就被这个tomcat容器占用了,我们访问这台机器的8080端口,也就是访问了tomcat容器;
4.一个容器的配置文件如何修改?
我们平时安装一个tomcat,有可能要改它的端口号或者其他一些参数。目前知道容器修改配置文件的参数有三种方式。第一种是在实例化容器的时候就配置参数,比如tomcat的端口配置;第二种是进入容器内部修改;第三种是将这个配置文件从本机挂载到容器内部,让这个容器启动时就执行这个配置文件,那么我们在本机或者容器内部(其实也是第二种)都可以修改配置文件,比如nginx的nginx.conf文件,我在安装的时候就是用的这种方式。当然这三种参数的配置对于一个容器来说都是可以使用的,我们依容器安装的方便程度来决定;
5.war包如何发布?
当一个容器需要我们从外部上传文件时,比如tomcat需要war包。在实例化容器的时候一定要从本机挂载一个文件夹到容器内部,这样我们的war包拷贝到本机的文件夹就可以,我们再登录容器就可以移动这些文件,当然将本机的文件夹直接挂载到tomcat的webapps文件夹内也是很好的选择,因为容器会自动帮我们解压war包。
四、docker的安装
1.目前依照项目的集群方案搭建了一套docker容器,有tomcat、nginx、redis、mysql、mongdb,其中keepalived不能安装docker容器,原因是它没有端口,并且需要配置防火墙规则,也没有找到相应的解决方案
2.安装docker使用阿里提供的脚本,因为国外的官方脚本因为网络或者墙了的关系无法安装
脚本:curl -sSLhttp://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet |sh
3.docker镜像的拉取也是使用国内官方镜像
执行:docker pullregistry.docker-cn.com/library/tomcat:8.0.54
docker pullregistry.docker-cn.com/library/ :不管拉取什么镜像,前面都是这样写
tomcat: 8.5.4:分号前的tomcat是要拉取tomcat容器;分号后的8.5.4是tomcat的版本
4.镜像的迁移
迁移docker的时候,并不迁移它的镜像,而是将启动的容器生成一个镜像,将这个镜像打包用文件的方式迁移
5.安装步骤
所有容器的安装步骤,问题,方案,都可以参考文档‘docker安装笔记.doc’
6.tomcat的安装和迁移实例(有网络的情况):
a.更新yum仓库。执行:yum upgrade
b.执行阿里docker脚本,安装docker。执行:curl –sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet| sh
c.启动docker服务。执行:service docker start
d.安装tomcat容器
# 拉取tomcat镜像。执行:docker pull registry.docker-cn.com/library/tomcat:8.5.3
# 查看刚刚拉取的镜像:
# 启动tomcat容器。执行:docker run -p 8083:8080 -v /docker/tomcat/webapps:/docker/tomcat/webapps--name tomcat8_1 tomcat:8.5.4
docker run:根据镜像启动容器
-p 8083:8080:将宿主机的8083端口映射到容器里的8080端口
-v /docker/tomcat/webapps:/docker/tomcat/webapps:将本机下的目录挂载到容器内的目录
--name tomcat8_1:容器的名字
tomcat:8.5.4:执行的镜像
# 因为是第一次启动,tomcat进程不是后台运行,CTRL+C停止进程。执行docker ps –a查看所有容器:
#然后根据容器名称/Id启动容器并查看运行的容器:
#然后访问tomcat:http://ip:8083
e.迁移tomcat容器
# 先将需要备份的容器运行起来:docker ps 查看正在运行的容器:
# 创建该容器的快照。执行:docker commit -p 32d91c90fd3e docker-mytomcat-backup
# 查看产生的镜像。执行docker images
# 将镜像打成tar包:docker save -o/docker/tomcat/docker-mytomcat-backup.tardocker-mytomcat-backup
# 将tar包拷贝到另一台机器scp [email protected]:/docker/tomcat/
# 在新机器上下载镜像:docker load -i /docker/tomcat/docker-mytomcat-backup.tar
# 然后查看镜像是否存在:docker images
# 用镜像启动容器(跟最开始拉取镜像启动容器一样)
# dockerrun -p 8084:8080 -v /docker/tomcat/webapps:/docker/tomcat/webapps
五、docker常用命令
查看docker版本:docker version
服务启动docker:servicedocker start
正在运行的容器:dockerps
所有容器:docker ps -a
查看镜像:dockerimages
所有镜像:docker images-a
Centos版本:lsb_release –a
删除容器:docker rmcontainerid
停止容器:docker stopcontainerid
删除镜像 :docker rmi imageid
先停止容器,先删容器,再删除镜像
查看所有容器ID:docker ps -a -q
停止所有容器:docker stop$(docker ps -a -q)
杀死所有正在运行的容器:docker kill$(docker ps -a -q)
删除所有已经停止的容器:docker rm$(docker ps -a -q)
删除所有镜像:docker rmi $(docker images -q)
删除所有容器:docker rm $(docker ps -a -q)
容器内添加vi命令:apt-get update && apt-get install vim
检查容器状态:docker inspect容器ID
登录容器:docker exec
-it 容器名/容器ID /bin/bash
查看linux磁盘大小:df –lh
查看每个目录使用的磁盘大小:du -hx--max-depth=1 / | sort –h
链接容器(进入容器内部操作):docker exec -it 容器名/容器id /bin/bash