一、准备一台linux系统,本次为centos-6.8(64位),并且配置好网络,将虚拟机配置为NAT方式共享windows网络;
二、简单了解一下Docker:
Docker出现的原因?
因开发与运维之间会因为环境和配置导致程序无法运行。(从OS,到运行环境,再到应用配置....)
docker使得软件可以带环境安装,安装时,把原始环境完全复制(由下而上打包)。开发人员利用Docker可以消除协作编码时“在自己机器可正常工作”问题。(一次封装,到处运行) 实现跨平台,跨服务器,简化了操作。
三、 Docker是什么?
Docker解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
一次构建、随处运行,可以:更快速的应用交付和部署;更便捷的升级和扩缩容;更简单的系统运维;更高效的计算资源利用。
Docker的优势:
1,轻量,秒级的快速启动速度;2,简单、易用,活跃的社区;3,标准统一的打包/部署/运行方案;4,镜像支持增量分发,易于部署;
5,易于构建,良好的REST API, 也很适合自动化测试和持续集成; 6,性能,尤其是内存和IO的开销。
四: 虚拟机缺点:资源占用多,冗余步骤多,启动慢。
Docker提供另一种虚拟化技术:Linux容器(LXC),不需要捆绑一整套系统,只需要软件工作所需的库资源和设置。
----------------------------------
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。
容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
----------------------------------
比较,Docker和传统虚拟化方式的不同之处:
.传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
.而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
五、Docker 安装:
Docker支持以下的CentOS版本:
CentOS 7 (64-bit)
CentOS 6.5 (64-bit)或更高的版本
前提条件:
目前,CentOS仅发行版本中的内核支持Docker。
Docker运行在CentOS 7上,要求系统为64位、系统内核版本为3 10以上
Docker运行在CentOS-6.5或更高的版本的CentOS上,要求系统为64位、系境内核版本为2.6.32-431或更高版本
查看系统的内核:
uname命令川于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。
[root@promote ~]# uname -r
2.6.32-642.el6.x86_64
[root@promote ~]# cat /etc/redhat-release
-----------------------------------
六、 docker_centos6 的安装: (本次在node04上(192.168.89.10)---这是本人自己机器的配置,学者可对照改为自己的)
1,yum install -y epel-release (依赖库)
2, yum install -y docker-io
------------------------------------------------
出现问题:Another App is currently holding the yum lock; waiting for it to exit.
处理:可能是系统自动升级正在运行,yum在锁定状态中。
已经有一个yum进程在运行了,使用kill干掉它:
# kill -s 9 25960
# ps aux|grep yum
root 6744 0.0 0.0 103260 900 pts/1 S+ 14:59 0:00 grep yum
root 25960 0.0 0.0 0 0 ? Z Sep19 0:01 [yumBackend.py] <defunct>
很遗憾,kill对付不了它,那怎么办呢?
可以通过强制关掉yum进程:
#rm -f /var/run/yum.pid
然后就可以使用yum了。
----------------------------------------------------
-------如果出现以下错误-----
No package docker-io available.
Error: Nothing to do:
原因:直接使用命令: yum install docker-io 是会报错的!!! 提示:No package docker-io available.
解决办法:需要先安装yum 源 正确版:
yum install https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
----OK ******************(安装成功)
3,安装后的配置文件:/etc/sysconfig/docker (在命令行下用ls /etc/sysconfig/docker 查看)
4, 启动Docker后如服务:service docker start.
5, docker version验证:出现如下信息表示成功安装:
[root@promote ~]# docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d
OS/Arch (server): linux/amd64
[root@promote ~]#
------------------------------------------------------以上安装完成,以下为操作:------------------------------------
七:操作Helloworld.
理论上应该从https://hub.docker.com上拉镜像,但速度太慢,所以用国内的镜像加速版。
阿里云镜像加速器步骤:
1, 是什么 https://dev.aliyun.com/search.html(转到:https://promotion.aliyun.com/ntms/act/kubernetes.html)
a,注册一个属于自己的阿里云账户(可复用淘宝账号)
b, 获得加速器地址连接 (登陆阿里云开发者平台后获取加速器地址)
在容器镜像服务-->快速入门-->官方镜像加速---> 点击“容器镜像服务控制台”-->前往开通。
(容器镜像服务控制台后左侧的加速器帮助页面就会显示为您独立分配的加速地址):
到了“容器镜像服务”后,右边会有一个“设置Registry登录密码”,(设置为:admin****(需要自定义))
找到镜像中心---> 镜像加速器-->CentOS, 看到我的加速器地址为:https://z2jkh8aj.mirror.aliyuncs.com
c,配置本机Docker运行镜像加速器
cat /etc/sysconfig/docker
vi /etc/sysconfig/docker 在other_args="" 上修改,内容如下:
------------------------
# /etc/sysconfig/docker
#
# Other arguments to pass to the docker daemon process
# These will be parsed by the sysv initscript and appended
# to the arguments list passed to docker -d
other_args="--registry-mirror=https://z2jkh8aj.mirror.aliyuncs.com"
DOCKER_CERT_PATH=/etc/docker
# Resolves:
DOCKER_NOWARN_KERNEL_VERSION=1
---------------------
wq保存,重启docker.
d,重新启动Docker后台服务:service docker restart
e, Linux系统下配置完加速器需要检查是否生效,
命令为: ps -ef|grep docker
[root@promote ~]# ps -ef|grep docker
root 27217 1 4 06:44 pts/0 00:00:03 /usr/bin/docker -d --registry-mirror=https://z2jkh8aj.mirror.aliyuncs.com
root 27267 26600 0 06:45 pts/0 00:00:00 grep docker
八、演示HelloWorld:
1, docker run hello-world:
[root@promote ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally ---- 表示本地没有,要从阿里云上下载一个hello-world的镜像,并在容器内运行
latest: Pulling from hello-world
65b27d3bd74d: Pull complete
9f5834b25059: Pull complete
Digest: sha256:fb158b7ad66f4d58aa66c4455858230cd2eab4cdf29b13e5c3628a6bfc2e9f05 (ID号)
Status: Downloaded newer image for hello-world:latest
Hello from Docker! ------表示拉取成功。
This message shows that your installation appears to be working correctly.
...............
输出以上提示后,hello world 就会停止运行,容器自动终止。
如果云上也没有所需的镜像,会给出错误提示。
九、 Docker常用命令:
1,帮助命令:
docker version, docker info , docker --help(查看各种命令)*****
2, 镜像命令:
(1) docker images: 列出本地主机上的镜像
REPOSITORY :表示镜像的仓库源 TAG: 镜像的标签
IMAGE ID: 镜像ID CREATED:镜像的创建时间 VIRTUAL SIZE: 镜像大小
同一仓库源可以有多个TAG,代表这个仓库源的不同个版本,我们使用REPOSITORY:TAG来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用ubuntu,docker将默认使用ubuntu:latest镜像
options说明:
-a :列出本地所有的镜像(含中间映像层(如里面的none等....));
-q: 只显示镜像ID; (或-qa)
--digests: 显示镜像的摘要信息; --no-trunc: 显示完整的镜像信息。
(2) docker search [OPTIONS] 某个镜像的名字,(http://hub.docker.com)查询的时候,是从hub.docker.com上查,拉取的时候可以从上面配置的阿里云上下。 例: 命令:docker search Tomcat
OPTIONS说明: --no-trunc: 显示完整的镜像描述; -s: 列出收藏数不小于指定值的镜像;(***** 一般用点赞数多的)
--automated: 只列出automated build 类型的镜像
docker search -s 30 tomcat : 查询出点赞数超过30的tomcat. ( docker search -s 30 --no-trunc tomcat )
(3) docker pull: 下载镜像
例: docker pull tomcat 等价于 docker pull tomcat:lastest (:lastest 可省略) (docker pull tomcat:5.9 ---表示拉取tomcat 5.9版本)
完成后查看:
[root@promote ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
tomcat latest 7658501bf516 5 days ago 506.8 MB
hello-world latest 9f5834b25059 11 months ago 1.84 kB
(4) docker rmi 镜像ID: 删除某个镜像
docker rmi hello-world (=docker rmi hello-world:lastest)
[root@promote ~]# docker rmi hello-world
Error response from daemon: Conflict, cannot delete 9f5834b25059 because the container 2084769ea199 is using it, use -f to force
Error: failed to remove images: [hello-world]
出现以上信息是因为前面运行了hello-world, 所以无法删除,可以用-f强制删除。 (docker rmi -f hello-world)
[root@promote ~]# docker rmi -f hello-world
Untagged: hello-world:latest
Deleted: 9f5834b25059239faef06a9ba681db7b7c572fc0d87d2b140b10e90e50902b53
Deleted: 65b27d3bd74d2cf4ea3aa9e250be6c632f0a347e8abd5485345c55fa6eed0258
(可以发现删除了两层, 说明镜像是分层的)