1 Docker简介

docker近几年非常火,因为它是容器虚拟化,更能够充分提高硬件资源的使用率。其实利用率高不算什么,它最大的优势是能给让运维人员或者开发人员快速部署和交付资源,大大提高了工作效率。几乎所有的大企业都在使用docker,所以我们没有理由不去了解它,不去学习它。https://yeasy.gitbooks.io/docker_practice/content/introduction/what.html (感觉还不错的docker电子书)

- 官网 www.docker.com

- 容器虚拟化,比传统的虚拟化轻量

- 使用go语言开发,基于apache2.0协议。

- 开源软件,项目代码在github维护。github  https://github.com/docker/docker.github.io

- docker从1.13x开始,版本分为社区版ce和企业版ee,并且基于年月的时间线形式。

- https://yeasy.gitbooks.io/docker_practice/content/introduction/why.html 

- docker和传统的虚拟化比较 

1. docker虚拟化

doker介绍与操作Ⅰ_第1张图片

2. 传统的虚拟化

doker介绍与操作Ⅰ_第2张图片

也就是说,让我们创建一个新的虚拟机的时候,如果使用Vmware,首先我们需要分配一定的硬件资源去运行虚拟出来的系统,如果一台电脑例如我的win7 配置一般,也就顶多可以跑10个centos,但是如果使用Docker就可以创建成千上百个centos系统,且每个系统都是独立的,隔离开来的,硬件资源也是隔离开来的。这就是根本区别!

- docker优势

doker介绍与操作Ⅰ_第3张图片

1. 启动非常快,秒级实现

2. 资源利用率高,一台高配置服务器可以跑上千个docker容器

3. 更快的交付和部署,一次创建和配置后,可以在任意地方运行

4. 内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率

5. 易迁移,平台依赖性不强

- Docker核心概念

1. 镜像,是一个只读的模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。

2. 容器,镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。

3. 仓库,存放镜像的一个场所,仓库分为公开仓库和私有仓库。 最大的公开仓库是Docker hub(hub.docker.com),国内公开仓库(dockerpool.com)

2安装Docker

[root@chy ~]#  curl https://download.docker.com/linux/centos/docker-ce.repo -o  /etc/yum.repos.d/docker.repo //下载docker的yum源
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1802  100  1802    0     0    772      0  0:00:02  0:00:02 --:--:--   772
[root@chy ~]# yum install -y docker-ce //用yum源的版本安装docker,其实本机也是有的,但是本机的yum自带的源版本比较低,我们需要最新的稳定版来安装
[root@chy ~]# systemctl start docker //启动docker
[root@chy ~]# ps aux |grep docker
root      20090  0.4  1.7 428548 26808 ?        Ssl  01:39   0:00 /usr/bin/dockerd
root      20093  0.0  0.5 264032  7776 ?        Ssl  01:39   0:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docke-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
root      20414  0.0  0.0 112664   976 pts/0    R+   01:39   0:00 grep --color=auto docker
[root@chy ~]# docker version //查看版本
Client:
 Version:      17.09.0-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:41:23 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.09.0-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:42:49 2017
 OS/Arch:      linux/amd64
 Experimental: false
[root@chy ~]# iptables -nvL
Chain INPUT (policy ACCEPT 150 packets, 10819 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DOCKER-USER  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 DOCKER-ISOLATION  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0          
当我们配置完毕后,会自动帮我们创建如上的一些IPtables 规则,其目的就是不影响docker虚拟机的正常运行。(每次重启docker服务会自动把iptables规则添加上,所以不用担心删除)

3 镜像管理

- docker 由于在国外,国内限制比较大,所以我们一般会使用阿里云的加速器去下载一个镜像

- 配置docker加速器

[root@chy ~]# vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}
说明:这个url为加速器地址,我们也可以直接到阿里云去申请也可以拿来这个使用。
[root@chy ~]# systemctl restart docker  //加速配置完成后需要重启
[root@chy ~]# docker pull centos //从docker.com获取centos镜像(这时用了加速器的速度会很快)

- docker镜像管理的基本操作

[root@chy ~]# docker p_w_picpaths //查看本地镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              d123f4e55e12        9 days ago          197MB
[root@chy ~]# docker search jumpserver//搜索镜像,其中jumpserver是关键词
[root@chy ~]# docker tag centos chylinux//为镜像设置标签chylinux
[root@chy ~]# docker p_w_picpaths
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              d123f4e55e12        9 days ago          197MB
chylinux            latest              d123f4e55e12        9 days ago          197MB
查看设置的标签会发现改行的p_w_picpath id和centos的一样,类似于更换一个新名字再次展现出来
[root@chy ~]# docker tag centos chylinux:chy //或者一步到位:(直接修改容器为chylinux,tag为chy)
[root@chy ~]# docker p_w_picpaths
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              d123f4e55e12        9 days ago          197MB
chylinux            chy                 d123f4e55e12        9 days ago          197MB
chylinux            latest              d123f4e55e12        9 days ago          197MB
[root@chy ~]# docker run -itd centos //启动centos的容器(-i表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动,要把-i -t -d 放到镜像名字前面)
6605c26e980579af355bd38cb1e45fa61d44e0a472f649be2e7bf8a322a1ac68
[root@chy ~]# docker ps -a //查看运行的容器,加上-a选项后可以查看所有容器,包括未运行的(不加-a是查看启动的容器)
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
6605c26e9805        centos              "/bin/bash"         About a minute ago   Up About a minute                       sad_brahmagupta
[root@chy ~]# docker rmi chylinux //用来删除指定镜像其中后面的参数可以是tag,如果是tag时,实际上是删除该tag(这里需要注意一下如果删除时用的默认tag latest时用如上的方式可以删除但是如果删除时用的不是默认的tag必须要加tag的名称,如下所示的删除例子)。当后面的参数为镜像ID时,则会彻底删除整个镜像,所有标签也会一同删除
Untagged: chylinux:latest
[root@chy ~]# docker rmi chylinux:chy 
Untagged: chylinux:chy

4 通过容器创建镜像

- 刚刚只是说到了如何删除修改一些基础的操作,一旦镜像搭建好了,如何才能通过命令行进入系统呢?

[root@chy ~]# docker exec -it 6605c2 bash//其中6605c2为容器id,这个id可以用docker ps查看,最后面的bash为进入容器后我们要执行的命令,这样就可以打开一个终端

- 进入到该容器中,我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像

[root@6605c26e9805 /]# yum install -y net-tools//在镜像中安装net-tools
[root@6605c26e9805 /]# ifconfig //查看虚拟ip 而且在外部的虚拟主机我们也是可以看到这个网卡的!
eth0: flags=4163  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 3184  bytes 10678749 (10.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2838  bytes 156894 (153.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
退出是ctrl+d

- 把我们刚刚制作的镜像保存成一个新的镜像,下次我们再次需要的时候就可以直接使用(不需要再次安装我们已经安装过的服务!)

[root@chy ~]# docker commit -m "install net-tools" -a "chenhaiying" 6605c26e9805 centos_with_net //这个命令有点像svn的提交,-m 加一些改动信息,-a 指定作者相关信息  6605c26e9805这一串为容器id,再后面为新镜像的名字
sha256:87dde0ff7187ea314deed8b1b934c0d3e4a75e24ad2a94ee9bdcf11acd0e8b41
[root@chy ~]# docker p_w_picpaths
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos_with_net     latest              87dde0ff7187        17 seconds ago      277MB
centos              latest              d123f4e55e12        9 days ago          197MB
[root@chy ~]# docker run -itd centos_with_net bash //运行docker
8b1dc20b6c75c85e29145e667ff96ccf93cdf9587d4584872b3c072392c1796d
[root@chy ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
8b1dc20b6c75        centos_with_net     "bash"              3 seconds ago       Up 1 second                             compassionate_mestorf
6605c26e9805        centos              "/bin/bash"         28 minutes ago      Up 28 minutes                           sad_brahmagupta

希望看过的童鞋多多指教,谢谢!j_0063.gifj_0063.gif