Docker的优势:

1、启动非常快,秒级实现。

2、资源利用率高,在机器中以进程的方式存在,一台机器可以跑上百个docker容器。

3、创建和配置后可以在任意地方运行docker,只需将其上传到docker仓库,用到时拉下来就可以

4、易迁移,平台依赖性不强。


Docker的主要概念:

1、镜像:只读模板,类似于安装系统用到的iso文件,对于镜像我们可以自定义,比如在一台机器上安装好lnmp环境,然后打包成为一个镜像,那么后期只需要从仓库中把这个镜像拉下来就可以直接使用lnmp环境了,非常方便。

2、容器:镜像类似于操作系统,而容器类似于虚拟机本身。可以进行启动、开始、停止、删除等等操作,容器之间相互隔离。

3、仓库:存放镜像的一个场所,仓库分为共有仓库和私有仓库。公开的最大仓库为Docker Hub。


Docker安装:

CentOS6:yum install -y epel-release ; yum install -y docker-io

CentOS7:yum install -y docker


Docker镜像管理:

docker pull centos  //从DockerHub拉取centos的镜像

docker images   //查看本地镜像

docker tag centos raffaele:1   //给本地存在的镜像打tag,并且还可以指定版本

docker search centos   //搜索仓库中的镜像

docker run -i -t centos /bin/bash  //指定下载到的镜像开启容器,-i表示让容器的标准输入打开,-t表示分配一个伪终端

docker ps -a  //查看所有容器

docker rmi centos:tag  //指定版本删除容器,也可以指定ID来删除,不推荐

docker exec -i -t 已创建的容器名  //进入到已经创建过的容器中


Docker镜像使用容器生成新的镜像:

运行docker run命令之后,我们进入到容器中,做了一些变更之后,可以针对这个改过的容器创建一个新的镜像,使用以下命令可以跟据原来的镜像创建一个新的镜像并提交到本地仓库中。

docker commit -m "install net-tools" -a "raffaele" 461b3a566657 centos_with_nettools

-m表示注释,-a指定作者,后面紧接着 原镜像的ID 和 新的镜像名,还可以指定版本号,默认为last。


Docker基于本地模板导入创建镜像:

1、模块获取,可以直接在网上下载一个模块https://openvz.org/Download/template/precreated

2、我们下载好一个模块之后,可以使用命令将其导入为镜像:

  cat debian-7.0-x86-minimal.tar.gz |docker import - debian-7-x86_64

3、将现有镜像导出为一个文件:

  docker save -o raffaele-debian.tar +现有镜像的名字或者ID

4、用文件恢复本地镜像:

  docker load --input raffaele-debian.tar 或者 docker load < raffaele-debian.tar

5、将自己的镜像上传到dockerhub上:

  docker push image_name


Docker容器管理:

docker create -i -t +镜像名  //创建一个容器,但是该容器并没有启动

docker start +容器ID  //启动已经停止的容器

docker run -d  //让容器在后台运行

docker run -d +镜像名 bash -c "while:;do echo "raffaele";sleep 1;done"

docker run --name web -i -t -d +镜像名 bash  //--name给容器指定名字

docker run --rm -i -t +镜像名 bash -c "sleep 30"  //--rm让容器退出后直接删除,不能和-d一起 使用,在这里命令执行完容器就会退出。

docker rm +镜像ID  //删除镜像

docker rm -f +镜像ID  //强制删除正在运行的容器

docker logs +容器ID //获取容器的运行历史信息

docker attach +容器ID  //附着到已经运行的容器中,但是退出后容器随之停止

docker exec -i -t +镜像ID bash  //进入已经运行的容器中,退出后容器依然运行


docker export +容器ID > file.tar  //导出容器,可以将容器迁移到其它机器上

cat file.tar |docker import - +自定义镜像ID  //可以将其它机器的容器文件在本台机器上重新导出为镜像


Docker仓库管理:

docker pull registry  //下载registry镜像,registry为docker官方提供的镜像,我们可以用它来创建本地的docker私有仓库

docker run -d -p 5000:5000 registry  //以registry镜像启动容器,监听5000端口

curl localhost:5000  //可以访问

docker tag +本地镜像名 192.168.145.132(宿主机ip):5000/centos(自定义tag名)  //标记tag,必须带私有仓库的ip:port

docker push +本地镜像名  //将指定的镜像上传到本地镜像仓库中


但是注意,这里会出错,因为docker默认是与https通信的,我们只有http,因此,修改启动脚本:

vim /etc/init.d/docker

将$exec -d $other_args 改为$exec -d --insecure-registry 192.168.145.132:5000 $other_args

之后重启docker:/etc/init.d/docker restart

再次启动docker容器:docker start registry_container_id

curl http://192.168.145.132:5000/v1/search  //查看私有仓库里面的所有镜像