一.Docker介绍
Docker是一个相对较新且发展非常快速的项目,可用来创建非常轻量的“虚拟机”。注意,这里的引号非常重要,Docker创建的并非真正的虚拟机,而更像打了激素的chroot,嗯,是大量的激素。
Docker只能在linux上工作,暂不支持Windows或OSX,Docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于资源由于资源要求过高而无法解决的问题。Docker能处理的事情包括:
隔离应用依赖
创建应用镜像并进行复制
创建容易分发的即启即用的应用
允许实例简单、快速的扩展
测试应用并随后销毁它们
Docker背后的想法是创建软件程序可移植的轻量容器,让其可以在安装了Docker的机器上运行,而不用关心底层操作系统,就像野心勃勃的造船者们成功创建了集装箱而不需要考虑装在哪种船舶上一样。
Docker两个最重要的概念是镜像和容器。除此之外,链接和数据卷也很重要。我们先从镜像入手。
镜像
Docker的镜像类似虚拟机的快照,但更轻量,非常非常的轻量。
容器
你可以从镜像中创建容器,这等同于从快照中创建虚拟机,不过更轻量。应用是有容器运行的。
举个例子,你可以下载一个Ubuntu的镜像(有个叫Docker registry的镜像公共仓库),然后从该镜像中创建一个 容器,在它启动后运行你的应用
数据卷
数据卷让你可以不受容器生命周期影响进行数据持久化。他们表现为容器内的空间,但实际保存在容器之外, 从而允许你在不影响数据的情况下销毁、重建、修改、丢弃容器。Docker允许你定义应用部分和数据部分,
并提供工具让你可以将它们分开。使用Docker时必须做出的最大思维变化之一就是:容器应该是短暂和一次 性的。
卷是针对容器的,你可以使用同一个镜像创建多个容器并定义不同的卷。卷保存在运行Docker的宿主文件系 统上,你可以指定卷存放的目录,或让Docker保存在默认位置,保存在其他类型文件系统上的都不是同一个 卷。
链接
容器启动时,将被分配一个随机的私有ip,其他容器可以使用这个ip地址与其进行通讯。这点非常重要,原因 有二:一是它提供了容器间相互通信的渠道,二是容器将共享一个本地网络。曾经遇到一个问题,在同一台机
器上为两个客户启动两个elasticsearch容器,但保留集群名称为默认设置,结果这两台elasticsearch服务器立 马变成了一个自主集群。注:限制容器间通讯是可行的。
要开启容器间通讯,Docker允许你创建一个新容器时引用其他现存容器,在你刚创建的容器里被引用的容器将
获得一个(你指定的)别名,我们就说,这两个容器链接在了一起。
二.Docker命令
2.1. 查看docker信息(version、info)
docker info #检查Docker的安装是否正确,如果没有找到这条命令,则表示docker安装错误,如果安装正确,则会输出类似下面的内容:
docker version #查看docker版本
2.2. 对image的操作(search、pull、images、rmi、history)
docker search image_name #检索image
docker pull image_name #下载image
docker images #列出列表镜像
docker rmi image_name #删除一个或者多个镜像
docker history image_name #查看镜像的历史版本
2.3 启动容器(run)
docker run image_name echo "hello word" #在容器中运行"echo"命令,输出"hello world"
docker run -i -t image_name /bin/bash #交互式进入容器中
docker run image_name apt-get install -y app_name #在容器中安装新的程序
docker exec -i -t [容器id] #再一次进刚才进入的容器
2.4 查看容器(ps)
docker ps #列出当前所有正在运行的container
docker ps -a #列出所有的container
docker ps -l #列出最近一次启动的container
2.5 保存对容器的修改(commit)
docker commit #容器id 新的镜像名称:版本号(例如:docker commit mysqldb mysql:1.0)
2.6 对容器的操作(rm、stop、start、kill、logs、diff、top、cp、restart、attach)
#删除操作
docker rm docker ps -a -q #删除所有容器
docker rm name/id #删除单个容器
#停止、启动、杀死容器
docker stop name/id #停止容器
docker start name/id #启动容器
docker kill name/id #杀死容器
docker logs name/id #从一个容器中取日志
docker diff name/id #列出一个容器里面被改变的文件或者目录,list列表会显示三种事件,A:增加的 D:删除 的 C:被改变的
docker top name/id #显示一个运行的容器里面的进程信息
#从容器里面拷贝文件/目录到本地一个路径
docker cp name:/container_path to_path
docker cp id:/container_path to_path
docker restart name/id #重启一个正在运行的容器
docker attach id #附加到一个运行的容器上面
2.7 保存和加载镜像(save、load)
docker save image_name -o file_path #保存镜像到一个tar包
docker load -i file_path #加载一个tar包格式的镜像
docker save image_name > /home/save.tar #机器a
docker load < /home/save.tar #使用scp将save.tar拷到机器b上