一、Docker 概述 

        Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker 自开源后受到广泛的关注和讨论, 以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

 docker简介和基础命令_docker

左边传统的虚拟化技术,底层是服务器硬件,硬件上运行宿主机的操作系统,在宿主机

的操作系统之上,虚拟化出虚拟硬件设备,在虚拟硬件之上运行虚拟化操作系统,再在虚拟

的操作系统之上运行应用服务。而中间这段,虚拟化出来的操作系统大大占用了服务器的硬

件资源。而容器虚拟化技术就不同了,我们看一下右边这张图。在底层硬件上运行宿主机操作系

统,在宿主机上运行docker 引擎,无需虚拟化硬件,也不用操作系统,而是直接运行容器,

提供所需的应用服务,大大减降低了服务器资源的占用。

二、Docker 的优点 

1、快速的交付和部署

2、更高效的虚拟化

3、更轻松的迁移和扩展

4、简单的管理

docker简介和基础命令_docker_02

三、Docker 的基本概念

1、镜像(Image) Docker 镜像就是一个只读的模板。例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。 镜像可以用来创建 Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

2、容器(Container) Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。 *注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

3、仓库(Repository)

仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private) 两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool 等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。 *注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。

四、Docker 基础命令

1、docker search //从Docker Hub 搜索镜像

用法: docker search TERM

参数:

--automated=false 仅显示自动创建的镜像

--no-trunc=false 输出信息不截断显示

-s, --stars=0 指定仅显示评价为指定星级以上的镜像

docker简介和基础命令_docker_03

[root@docker ~]# docker search -s 500 nginx //搜索星级为500 以上的镜像

 

 docker简介和基础命令_docker_04

2、docker info //查看当前信息

[root@docker ~]# docker info 

 docker简介和基础命令_docker_05

3、docker pull //下载镜像

  [root@docker ~]# docker pull amber/nginx 

4、docker push //上传镜像  

[root@docker ~]# docker push amber/nginx  

5、cat 本地容器快照名 |docker import - 自定义容器名:自定义标记名 //导入本地容器快照  

6、docker run //运行一个容器,-i 交互式,-t 获得一个终端,-d 守护进程形式运行 

 [root@docker ~]# docker run -it centos:1 /bin/bash 

[root@fcbe47db440d /]# 

[root@docker ~]# docker run -d centos:1 /bin/bash -c "while :; do echo hello; sleep 2; done" 

b21e687d0719cb36c89a4325808bc03d42918ef51176235e9dfc50c57094236b 

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES 

b21e687d0719        centos:1            "/bin/bash -c 'while "   About a minute ago   Up About a minute                       high_brahmagupta 

7、退出容器  

exit 或 ctrl + d //退出并停止容器  

(2)先按ctrl + p 再按 ctrl + q //退出伪终端,容器后台运行  

[root@docker ~]# docker run -it centos:1 /bin/bash 

[root@353fc6f27cb7 /]#ctrl +p ; ctrl+q [root@docker ~]#  

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES 

353fc6f27cb7        centos:1            "/bin/bash"              49 seconds ago      Up 48 seconds                           berserk_einstein 

b21e687d0719        centos:1            "/bin/bash -c 'while "   5 minutes ago       Up 5 minutes                            high_brahmagupta 

[root@docker ~]# docker attach 353   //输入容器ID,若没有重名的,输入第一个字母即 

[root@353fc6f27cb7 /]#  

8、docker ps  //查看容器,-a 查看所有容器,-q 只查看容器ID 

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES 

b21e687d0719        centos:1            "/bin/bash -c 'while "   11 minutes ago      Up 11 minutes                           high_brahmagupta 

[root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES 

353fc6f27cb7        centos:1            "/bin/bash"              18 minutes ago      Exited (127) 11 minutes ago                       berserk_einstein 

b21e687d0719        centos:1            "/bin/bash -c 'while "   23 minutes ago      Up 23 minutes                                     high_brahmagupta 

fcbe47db440d        centos:1            "/bin/bash"              26 minutes ago      Exited (127) 23 minutes ago                       nauseous_franklin 

9、docker rm //删除一个容器

 [root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES 

353fc6f27cb7        centos:1            "/bin/bash"              20 minutes ago      Exited (127) 12 minutes ago                       berserk_einstein 

b21e687d0719        centos:1            "/bin/bash -c 'while "   24 minutes ago      Up 24 minutes                                     high_brahmagupta 

fcbe47db440d        centos:1            "/bin/bash"              27 minutes ago      Exited (127) 24 minutes ago                       nauseous_franklin 

[root@docker ~]# docker rm -f b21 

b21 

[root@docker ~]# docker rm -f f 

f 

[root@docker ~]# docker rm -f 353 

353 

[root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 

10、docker rmi //删除一个或多个镜像,-f 强制删除  

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

centos              1                   51f7df51ca40        30 minutes ago      196.7 MB 

docker.io/nginx     latest              db079554b4d2        32 hours ago        181.8 MB 

[root@docker ~]# docker rmi docker.io/nginx 

Untagged: docker.io/nginx:latest 

Untagged: docker.io/nginx@sha256:4296639ebdf92f035abf95fee1330449e65990223c899838283c9844b1aaac4c 

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

centos              1                   51f7df51ca40        32 minutes ago      196.7 MB 

11、docker create //创建一个容器,但不运行  

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

centos              1                   385c6554f48e        19 seconds ago      196.7 MB 

[root@docker ~]# docker create -it centos:1 /bin/bash 

9bace61c06b5c4539e4d8668a04ff2762cf5aaad13731d3c2ac6b99d1e3cb517 

[root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 

9bace61c06b5        centos:1            "/bin/bash"         12 seconds ago      Created                                 drunk_payne 

12、docker start|stop|restart|kill //运行已停止的容器|停止一个正在运行的容器|重启 

一个容器|杀死一个正在运行的容器 

[root@docker ~]# docker start 9ba 

9ba 

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES 

9bace61c06b5        centos:1            "/bin/bash"         About a minute ago   Up 9 seconds                            drunk_payne 

[root@docker ~]# docker stop 9ba 

9ba 

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 

[root@docker ~]# docker start 9ba 

9ba 

[root@docker ~]# docker kill 9ba 

9ba 

[root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES 

9bace61c06b5        centos:1            "/bin/bash"         4 minutes ago       Exited (137) 8 seconds ago                       drunk_payne 

13、docker save |load //存储镜像|载入镜像  

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

centos              1                   385c6554f48e        6 minutes ago       196.7 MB 

[root@docker ~]# docker save -o centos.tar centos:1 

[root@docker ~]# ls 

anaconda-ks.cfg  centos.tar  mysql5.tar  nginx.tar  tomcat.tar 

[root@docker ~]# docker rmi -f centos:1 

Untagged: centos:1 

Deleted: sha256:385c6554f48e0aaa488fd905e2f70b579ba47c98a9d4d44bf0235e0a8e3141ff 

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

[root@docker ~]# docker load < centos.tar  

Loaded p_w_picpath: centos:1 

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

centos              1                   385c6554f48e        15 minutes ago      196.7 MB 

[root@docker ~]#  

14、docker export //导出容器快照  

[root@docker ~]# docker run -it centos:1 /bin/bash 

[root@42a1ab757ffd /]# touch aaa 

[root@42a1ab757ffd /]# ls 

aaa                bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var 

anaconda-post.log  dev  home  lib64  media       opt  root  sbin  sys  usr 

[root@42a1ab757ffd /]# exit 

exit 

[root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES 

42a1ab757ffd        centos:1            "/bin/bash"         45 seconds ago      Exited (0) 29 seconds ago                         nauseous_varahamihira 

9bace61c06b5        centos:1            "/bin/bash"         17 minutes ago      Exited (137) 13 minutes ago                       drunk_payne 

[root@docker ~]# docker export -o centos-aaa.tar 42a 

[root@docker ~]# ls 

anaconda-ks.cfg  centos-aaa.tar  centos.tar  mysql5.tar  nginx.tar  tomcat.tar 

[root@docker ~]# cat centos-aaa.tar |docker import - centos-aaa 

sha256:99e1653378ed127eaeb8dd531fc7b4b5fc17b8bf095d9deeec5246f368dc4dcf 

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

centos-aaa          latest              99e1653378ed        13 seconds ago      196.7 MB 

centos              1                   385c6554f48e        21 minutes ago      196.7 MB 

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

[root@0dcb3999062c /]# ls 

aaa                bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var 

anaconda-post.log  dev  home  lib64  media       opt  root  sbin  sys  usr 

 五、创建私有仓库 

仓库(Repository)是集中存放镜像的地方。 

注册服务器才是存放仓库具体的服务器(Registry),每个服务器上都可以放置多个仓库, 

而每个仓库下可以放置多个镜像,每个镜像上可以运行多个容器,每个容器上可以跑一个应 

用或应用组。 

仓库自身可以分为:公共仓库和私有仓库 

比如共有仓库: http://hub.docker.com 或国内的: dl.dockerpool.com 

安装docker 后,可以通过官方提供的registry 镜像来简单搭建一套本地仓库环境  

[root@docker ~]# vi /etc/sysconfig/docker 

# INSECURE_REGISTRY='--insecure-registry' 

INSECURE_REGISTRY='--insecure-registry 192.168.10.130:5000' 

[root@docker ~]# systemctl restart docker.service 

方法一:

docker简介和基础命令_docker_06

方法二:  

[root@docker ~]# mkdir -pv /opt/data/registry  

mkdir: 已创建目录 "/opt/data" mkdir:  

已创建目录 "/opt/data/registry"  

[root@docker ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry 通过这种方式可以将上传的镜像放到本地的: /opt/data/registry  

 

[root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES 

bb09700272a6        registry            "/entrypoint.sh /etc/"   5 minutes ago       Exited (2) 25 seconds ago                       jovial_poitras 

[root@docker ~]# docker start bb0 

bb0 

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES 

bb09700272a6        registry            "/entrypoint.sh /etc/"   3 minutes ago       Up 3 minutes        0.0.0.0:5000->5000/tcp   jovial_poitras 

 docker简介和基础命令_docker_07

 root@19bd142b0566:/# 192.168.10.160 - - [17/Feb/2017:10:22:06 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)" "-" 

 

按ctrl+p 再按ctrl+q,使服务保持后台运行  

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES 

19bd142b0566        nginx               "/bin/bash"              12 minutes ago      Up 12 minutes       443/tcp, 0.0.0.0:5500->80/tcp   adoring_ardinghelli 

bb09700272a6        registry            "/entrypoint.sh /etc/"   23 minutes ago      Up 18 minutes       0.0.0.0:5000->5000/tcp          jovial_poitras 

 

[root@docker ~]# docker tag nginx 192.168.10.130:5000/nginx-test   //将修改过的nginx 镜 

像做标记封装,准备上传到私有仓库 

[root@docker ~]# docker p_w_picpaths 

REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE 

centos-aaa                       latest              99e1653378ed        31 minutes ago      196.7 MB 

centos                           1                   385c6554f48e        53 minutes ago      196.7 MB 

docker.io/nginx                  latest              db079554b4d2        33 hours ago        181.8 MB 

192.168.10.130:5000/nginx-test   latest              db079554b4d2        33 hours ago        181.8 MB 

docker.io/registry               latest              d1e32b95d8e8        4 weeks ago         33.17 MB 

[root@docker ~]# docker push 192.168.10.130:5000/nginx-test   //上传到私有仓库  

The push refers to a repository [192.168.10.130:5000/nginx-test] 

a82b6c66a6d4: Pushed  

1941ca4a7a84: Pushed  

a2ae92ffcd29: Pushed  

latest: digest: sha256:9e81e4ce4899448e5e7aea69a72dfd1df989a7a0fe7365ad63be1133f05acf10 size: 948 

另外打开一台机器装好docker  

[root@docker-2 ~]# docker pull 192.168.10.131:5000/nginx-test //从私有仓库下载镜像  

略。。。