#################Docker###############

Docker:Linux容器,Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
特性:
文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。
网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。
日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多
的容器。无需使用模板或手动配置。
交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次×××互shell
Docker的内部构建,必须知道以下三种部件:
Docker镜像 (Docker p_w_picpaths)。
Docker注册处(Docker registeries)。
Docker容器(Docker containers)。
Docker镜像:是一个只读的模板。
举个例子,一个镜像可以包含一个运行在Apache上的Web应用和其使用的redhat操作系统。
镜像是用来创建容器的。Docker提供了简单的用来建立新的镜像或者升级现有的镜像,
你也可以下载别人已经创建好的镜像。Docker镜像是Docker的构造部分。
Docker注册处:用来保存镜像。
可以理解为代码控制中的代码仓库。同样的,Docker仓库也有公有和私有的概念。
公有的Docker仓库名字是Docker Hub。Docker Hub提供了庞大
的镜像集合供使用。这些镜像可以是你自己创建的,或者你也可以在别人的镜像基础
上创建。
Docker容器:和文件夹很类似。
一个Docker容器包含了所有的某个应用运行所需要的环
境。每一个Docker容器都是从Docker镜像创建的。Docker容器可以运行、开始、停止、
移动和删除。每一个Docker容器都是独立和安全的应用平台。Docker容器是Docker的运
行部分。
############docker的安装和启动###############
添加本地docker安装源:(/etc/yum.repos.d/redhat.repo  #rehat.repo在后面会用到)
[docker]
name=docker
baseurl=http://content.example.com/rhel7.0/x86_64/rht
gpgcheck=0
安装docker:
# yum install -y docker
关闭火墙:(docker需要在启动前关闭系统防火墙)
# systemctl stop firewalld
# systemctl disable firewalld
启动docker:
# systemctl start docker ; systemctl enable docker
################查看docker信息################
# docker version    ##查看docker版本
Client version: 0.11.1-dev
Client API version: 1.12
Go version (client): go1.2.1
Git commit (client): 02d20af/0.11.1
# docker info    ##显示docker系统的信息
Containers: 0
Images: 1
Storage Driver: devicemapper
Pool Name: docker-253:1-33577528-pool
##################加载平台镜像################
下载镜像:
# wget http://172.25.254.254/content/courses/rhce/rhel7.0/materials/rhel-server-docker-
7.0-21.4-x86_64.tar.gz
加载镜像:
# docker load -i rhel-server-docker-7.0-21.4-x86_64.tar.gz
列出镜像:
# docker p_w_picpaths
redhat/rhel7 0
redhat/rhel7 0-21
e1f5733f050b
e1f5733f050b
7 months ago
7 months ago
140.2 MB
140.2 MB
...
检索镜像
# docker search p_w_picpath_name
拉取镜像
# docker pull p_w_picpath_name
删除镜像
# docker rm p_w_picpath_name
显示一个镜像的历史
# docker history p_w_picpath_name
####################运行docker容器###################
非交互式在容器中运行命令:(docker run ##创建一个新容器并运行)
# docker run --rm rhel7 cat /etc/hosts    ##--rm
172.17.0.9
e6f3be8f709d
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
交互式运行容器:
# docker run -i -t rhel7 bash    ##-i标准输入给容器 -t分配一个虚拟终端
bash-4.2# echo hello > /tmp/testfile
bash-4.2# exit
# docker ps -a    ##列出所有系统容器
CONTAINER ID    IMAGE        COMMAND        CREATED        STATUS            PORTS        NAMES
508eef63bd67    redhat/rhel7:0    bash        4 minutes ago    Exited (0) 25 seconds     ago         agitated_ritchie6
77ff9abff3735     redhat/rhel7:0     bash        minutes ag    silly_thompson8
# docker ps    ##列出当前正在运行的容器
# docker ps -l  ##列出最近一次启动的容器
重启停止的容器:
# docker start agitated_ritchie6
bash-4.2# cat /tmp/testfile
hello
bash-4.2# exit
删除所有容器
# 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
列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的
# docker diff Name/ID
显示一个运行的容器里面的进程信息
# 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
提交一个新的p_w_picpath
# docker commit ID new_p_w_picpath_name