前言

Docker是一个用于开发、发布和运行应用程序的开放平台。使用Docker能够将应用程序与基础设施分离,可以像管理应用程序一样管理基础设施。Docker容器平台使用CS架构,Docker客户端与守护进程(Dockerdaemon)进行交互,后者负责构建、运行和发布Docker容器。Docker客户端和守护进程可以在同一系统上运行,也可以将Docker客户端连接到远程的Docker守护进程。Docker客户端和守护进程通过UNIX套接字或网络接口,使用REST API进行通信。
Docker 主要由以下五个部分组成:
◆ Docker Client:客户端;
◆ Docker Daemon:守护进程
◆ Docker Images:镜像;
◆ Docker Container:容器;
◆ Docker Registry:镜像仓库。
Docker是目前使用最广泛的开源容器引擎,它是一种操作系统级的虚拟化技术,它依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制),提供了一个便捷的应用程序打包工具。

commit封装固化已有功能的docker镜像

在一个裸的centos的docker容器上面,安装vim编辑器,并且把这个功能保存下来,封装成一个能执行vim命令的centos镜像,
需要去拉最新centos镜像:

docker pull centos

run进入镜像内部: 

[root@202 ~]# docker run -it centos /bin/bash
[root@afcaf46e8305 /]#

afcaf46e8305是产生的容器ID,run运行的时候,不要加-d(后台)运行了,不然,就会进入容器内部。

[root@afcaf46e8305 /]# yum update
[root@afcaf46e8305 /]# yum install -y vim

安装完了后:exit退出容器
然后把容器打包成镜像:

[root@202 ~]# docker commit afcaf46e8305 centos-vim

完成后docker images查看镜像就会发现centos-vim这个镜像了
 

[root@202 ~]# docker run -it 7f2d42f3e0a3 /bin/bash
[root@7f2d42f3e0a3 /]# vim --version

就可以看到vim的信息了。

删除容器与镜像

删除所有的容器

docker rm -f $(docker ps -aq)

删除所有的镜像

docker rmi $(docker images |awk '{print $3}')

管理Exited的容器

批量停止及删除Exited的容器

docker ps -a|grep "Exited" |awk '{ print $1 }'|xargs docker stop
docker ps -a|grep "Exited" |awk '{ print $1 }'|xargs docker rm

批量重启Exited的容器

docker ps -a|grep "Exited" |awk '{ print $1 }'|xargs docker restart

对所有的容器,进行重启

docker restart $(docker ps -a | awk '{ print $1}' | tail -n +2)
docker restart $(docker ps -a -q)

批量删除none名称的镜像

docker images |grep none|awk '{print $3 }'|xargs docker rmi

为docker批量配置IP

for i in `docker ps -a|awk 'NR>1 {print $NF}'`;do IP=`echo $i|awk -F_ '{print "192.168."$2"."$3}'`;pipework br0 $i $IP/24@192.168.0.110 ;done

导出docker镜像和还原

docker gogs 恢复_docker导出信息excel

基于Docker commit将容器提交成镜像列表;

docker commit as-nginx as-nginx:1.0

docker中save和load的镜像导出与还原

基于Docker save将镜像列表ID导出备份为tar包

  • docker save方法,会保存该镜像的所有历史记录
  • docker save保存的是镜像(image)
#方法1
docker save imageID >centos68.tar
#方法2
docker save -o centos68.tar imageID

基于Docker load 将镜像文件导入镜像列表

docker load 用来载入镜像包,不能对载入的镜像重命名

docker load <centos68.tar

docker中export和import的容器导出与还原

通过Docker export导出容器

docker export导出容器,是一个容器的快照,不是镜像本身, 也就是说没有layer。快照文件,将丢弃所有的历史记录元数据信息(即仅保存容器当时的快照状态)。

  • docker export 方法,不会保留历史记录,即没有commit历史
  • docker export保存的是容器(container)
docker export containerID >centos68.tar

通过Docker import 导入容器成为镜像

docker import 用来载入容器包,可以恢复为镜像,可以为镜像指定新名称

cat centos68.tar|docker import - centos68
docker import - centos68 < centos68.tar

格式化docker容器列表

docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Status}}"

配置IP地址

docker inspect wenle1 |grep -i address |awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/ {print $NF}'|sed 's/"//g;s/,//g'|tail -1

docker gogs 恢复_docker 备份还原_02

获取容器ID

docker ps -a|grep "centos68"|awk '{print $1}'

获取ID容器容器IP,并且打印ID和IP信息

for  ID in `docker ps -a|grep  "centos68"|awk '{print $1}'`;do 
docker inspect $ID|grep -i ipaddress|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/ {print $NF}' |sed 's/"//g;s/,//g'|tail -1|awk '{print " '$ID' " $0}';done

docker gogs 恢复_docker gogs 恢复_03

 将容器信息导入csv或者xlsx

#增加行号,并将空格替换成
[root@localhost ~]# for ID in `docker ps -a|grep "centos68"|awk '{print $1}'`;do docker inspect $ID |grep -i address |awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/ {print $NF}'|sed 's/"//g;s/,//g'|tail -1|awk '{print "'$ID' " $0}';done|awk '{print NR,$0}'|sed 's/ /,/g'

[root@localhost ~]# for ID in `docker ps -a|grep "centos68"|awk '{print $1}'`;do docker inspect $ID |grep -i address |awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/ {print $NF}'|sed 's/"//g;s/,//g'|tail -1|awk '{print "'$ID' " $0}';done|awk '{print NR,$0}'|sed 's/ /,/g'>docker_list.csv #导出到docker_list.csv

docker gogs 恢复_docker gogs 恢复_04

批量启动多台docker LAMP服务

for i in `docker ps -a|grep "centos68"|awk '{print $1}'` ;do for j in `echo sshd httpd  mysqld ` ;do  docker exec $i service $j restart ;done  ;done
for i in `docker ps -a|grep "centos68"|awk '{print $1}'`;do docker exec $i service sshd restart;docker exec $i service  httpd restart;docker exec $i service  mysqld restart;done