linux 学习笔记-100-docker-docker 简介与安装,镜像管理,通过容器创建镜像

发布于 2018-05-31  184 次阅读


Docker 简介

官网:https://www.docker.com/

github:https://github.com/docker/docker.github.io

开源的容器引擎,可以让开发者打包应用以及依赖的库,然后发布到任何流行的 linux 发行版上,移植很方便

由 go 语言编写,基于 apache2.0 协议发布

基于 linux kernel,要想在 win 下运行需要借助一个 vm(虚拟机)来实现

自 2013 年开始,近些年发展迅猛

docker 从 1.13x 开始,版本分为社区版 ce 和企业版 ee,并且基于年月的时间线形式,当前最新稳定版为 17.09 参考:http://blog.csdn.net/chenhaifeng2016/article/details/68062414

Docker 和传统的虚拟化比较

linux 学习笔记-100-docker-docker 简介与安装,镜像管理,通过容器创建镜像

linux 学习笔记-100-docker-docker 简介与安装,镜像管理,通过容器创建镜像

Docker 的优势

启动非常快,秒级实现

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

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

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

易迁移,平台依赖性不强

linux 学习笔记-100-docker-docker 简介与安装,镜像管理,通过容器创建镜像

Docker 核心概念

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

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

仓库,存放镜像的一个场所,仓库分为公开仓库和私有仓库。 最大的公开仓库是 Docker hub(https://hub.docker.com/),国内公开仓库(https://hub.tenxcloud.com/  http://get.daocloud.io/  https://dev.aliyun.com/search.html

安装 Docker

[root@am-01:~#] curl https://download.docker.com/linux/centos/docker-ce.repo -o  /etc/yum.repos.d/docker.repo

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100  2424  100  2424    0     0    363      0  0:00:06  0:00:06 --:--:--   771

[root@am-01:~#] ls /etc/yum.repos.d/docker.repo

/etc/yum.repos.d/docker.repo

[root@am-01:~#] yum list | grep docker

cockpit-docker.x86_64                       165-3.el7.centos           extras  

docker.x86_64                               2:1.13.1-63.git94f4240.el7.centos

docker-ce.x86_64                            18.03.1.ce-1.el7.centos    docker-ce-stable

docker-ce-selinux.noarch                    17.03.2.ce-1.el7.centos    docker-ce-stable

[root@am-01:~#] yum -y install docker-ce

#下载官方的 yum 源,之后使用 yum 直接安装 docker-ce,其实系统自带的 yum 也有 docker,但是版本比较旧

#如果安装太慢,可以直接下载 rpm 包,然后使用 yum 指定安装这个 rpm 包

#rpm 包下载地址:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

#使用 yum 安装 rpm 包:yum localinstall 包名

启动 Docker

[root@am-01:~#] systemctl start docker.service

[root@am-01:~#] ps aux | grep docker

root       1011  5.0  3.2 664476 61344 ?        Ssl  22:49   0:00 /usr/bin/dockerd

root       1016  1.0  1.1 299652 21920 ?        Ssl  22:49   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml

[root@am-01:~#] iptables -nvL

Chain INPUT (policy ACCEPT 2926 packets, 1131K 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-STAGE-1  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          



Chain OUTPUT (policy ACCEPT 2483 packets, 1071K bytes)

 pkts bytes target     prot opt in     out     source               destination        



Chain DOCKER (1 references)

 pkts bytes target     prot opt in     out     source               destination        



Chain DOCKER-ISOLATION-STAGE-1 (1 references)

 pkts bytes target     prot opt in     out     source               destination        

    0     0 DOCKER-ISOLATION-STAGE-2  all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0          

    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0          



Chain DOCKER-ISOLATION-STAGE-2 (1 references)

 pkts bytes target     prot opt in     out     source               destination        

    0     0 DROP       all  --  *      docker0  0.0.0.0/0            0.0.0.0/0          

    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0          



Chain DOCKER-USER (1 references)

 pkts bytes target     prot opt in     out     source               destination        

    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0   

#启动 docker 后,查看一下服务,没问题,同时也能看到 docker 启动的时候会自动创建 iptables 规则,这个规则并不会保存到系统中,而是会随 docker 的启动而创建,如有必要,你可以保存一下

镜像管理

配置加速器

因为 docker 默认会从官方下载镜像,下载站点在外国,很影响速度,所以配置加速器会提升下载速度

配置方法参考地址:https://blog.csdn.net/xlemonok/article/details/71403534

[root@am-01:~#] vim /etc/docker/daemon.json

{

  "registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"]

}

[root@am-01:~#] systemctl restart docker.service

#创建 daemon.json 文件,按要求配置一下,加速器地址记得换成你的,最后还要重启一下 docker

下载镜像

[root@am-01:~#] docker pull centos

Using default tag: latest

latest: Pulling from library/centos

469cfcc7a4b3: Pull complete

Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16

Status: Downloaded newer image for centos:latest

查看本地的镜像

[root@am-01:~#] docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

centos              latest              e934aafc2206        7 weeks ago         199MB

搜索镜像

[root@am-01:~#] docker search jumpserver

NAME                             DESCRIPTION                           STARS               OFFICIAL            AUTOMATED

jiaxiangkong/jumpserver_docker   开源跳板机(堡垒机):认证,授权,审计,自动化运维             10                                     

jumpserver/jumpserver                                                  8                                      

hhding/jumpserver-docker         ssh proxy node                        3                                       [OK]

njqaaa/jumpserver                jumpserver                            1                                       [OK]

baselibrary/jumpserver           jumpserver                            1                                       [OK]

jumpserver/guacamole             guacamole for jumpserver              1                                       [OK]

jumpserver/allinone              jumpserver all in one                 1                                       [OK]

kubernetesio/sshd-jumpserver     sshd-jumpserver                       0                                       [OK]

satoms/jumpserver                                                      0                                      

zqiannnn/jumpserver-ansible      JumpServer Ansible Addon              0                                       [OK]

jumpserver/coco                                                        0                                      

zsjohny/jumpserver               bastion web ui                        0                                       [OK]

jumpserver/python                                                      0                                      

qiwihui/jumpserver               jumpserver docker                     0                                       [OK]

vikings/jumpserver                                                     0                                      

qq58945591/jumpserver            JumpServer 集成 coco 和 luna,使用 nginx 进行反向代…   0                                       [OK]

lc13579443/jumpserver            Jumpserver all in one Dockerfile      0                                       [OK]

ibuler/jumpserver                                                      0                                      

qbtrade/jumpserver                                                     0                                      

jumpserver/luna                                                        0                                      

jumpserver/core                  Jumpserver Official Docker Image      0                                       [OK]

qbtrade/jumpserver_coco                                                0                                      

jumpserver/base-env-alpine                                             0                                       

oliver891001/jumpserver                                                0                                      

henryzhang1/jumpserver  

#搜索指定名称的镜像

给镜像打标签

[root@am-01:~#] docker tag centos am-centos

[root@am-01:~#] docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

ubuntu              latest              452a96d81c30        4 weeks ago         79.6MB

am-centos           latest              e934aafc2206        7 weeks ago         199MB

centos              latest              e934aafc2206        7 weeks ago         199MB

[root@am-01:~#] docker tag centos am-centos:01

[root@am-01:~#] docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

ubuntu              latest              452a96d81c30        4 weeks ago         79.6MB

am-centos           01                  e934aafc2206        7 weeks ago         199MB

am-centos           latest              e934aafc2206        7 weeks ago         199MB

centos              latest              e934aafc2206        7 weeks ago         199MB

#一种打标签只修改 REPOSITORY 名称,一种打标签修改 REPOSITORY 名称和 TAG

启动镜像为容器

[root@am-01:~#] docker run -itd centos

7806f848bf85557eae0bb68e97aba965427a1cf4f7d3bb6be8e1756e7000eeae

#-i 表示让容器的标准输入打开,-t 表示分配一个伪终端,-d 表示后台启动,要把-i,-t,-d 放到镜像名字前面

查看启动状态的容器

[root@am-01:~#] docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES

7806f848bf85        centos              "/bin/bash"         About a minute ago   Up About a minute                       laughing_curran

#加上-a 选项后可以查看所有容器,包括未运行的

删除镜像

[root@am-01:~#] docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

ubuntu              latest              452a96d81c30        4 weeks ago         79.6MB

am-centos           01                  e934aafc2206        7 weeks ago         199MB

am-centos           latest              e934aafc2206        7 weeks ago         199MB

centos              latest              e934aafc2206        7 weeks ago         199MB

[root@am-01:~#] docker rmi am-centos:01

Untagged: am-centos:01

[root@am-01:~#] docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

ubuntu              latest              452a96d81c30        4 weeks ago         79.6MB

am-centos           latest              e934aafc2206        7 weeks ago         199MB

centos              latest              e934aafc2206        7 weeks ago         199MB

#删除指定镜像, 其中后面的参数可以是 tag,如果是 tag 时,实际上是删除该 tag。当后面的参数为镜像 ID 时,则会彻底删除整个镜像,所有标签也会一同删除

通过容器创建镜像

启动容器后,可以进入容器去做一些管理

进入容器

[root@am-01:~#] docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

7806f848bf85        centos              "/bin/bash"         11 minutes ago      Up 11 minutes                           laughing_curran

[root@am-01:~#] docker exec -it 7806f bash

[root@7806f848bf85 /]# ls

anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var

bin                etc  lib   media  opt  root  sbin  sys  usr

[root@7806f848bf85 /]# free -m

              total        used        free      shared  buff/cache   available

Mem:           1826        1454          74           7         297         171

Swap:          2047        1458         589

[root@7806f848bf85 /]#

Display all 642 possibilities? (y or n)

[root@7806f848bf85 /]# yum install -y net-tools

[root@7806f848bf85 /]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 172.19.0.2  netmask 255.255.0.0  broadcast 172.19.255.255

        ether 02:42:ac:13:00:02  txqueuelen 0  (Ethernet)

        RX packets 5534  bytes 9893960 (9.4 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 4609  bytes 359629 (351.2 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0



lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        loop  txqueuelen 0  (Local Loopback)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

#进入到启动的容器中,其中"7806f"为容器 id,这个 id 可以用 docker ps 查看,最后面的 bash 为进入容器后我们要执行的命令,这样就可以打开一个终端

#做一些检查,可以见到,跟宿主机差不多,只不过是阉割版,很多功能并没有

#IP 地址也是 docker 自行创建的一个网段,使用的是虚拟网卡

#按 ctrl+d 可以退出容器

把做了修改的容器做成镜像

[root@am-01:~#] docker commit -m "install net-tools" -a "am" 7806f am-centos

sha256:daa937030543bd17bf9d1ba3a0b60cf17909a6334d3e31295f925ef53770400e

[root@am-01:~#] docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

am-centos           latest              daa937030543        9 seconds ago       269MB

ubuntu              latest              452a96d81c30        4 weeks ago         79.6MB

centos              latest              e934aafc2206        7 weeks ago         199MB

[root@am-01:~#] docker run -itd am-centos

8f23e1d37005358dcfc5ee6183ecd442bcd42edc239f26dc6ea9aefcd1506e3a

[root@am-01:~#] docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES

8f23e1d37005        am-centos           "/bin/bash"         About a minute ago   Up About a minute                       objective_heisenberg

7806f848bf85        centos              "/bin/bash"         24 minutes ago       Up 24 minutes                           laughing_curran

[root@am-01:~#] docker exec -it 8f23e bash

[root@8f23e1d37005 /]# ls

anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var

bin                etc  lib   media  opt  root  sbin  sys  usr

#把容器做成镜像的操作跟 svn 的提交类似,-m 加一些改动信息,-a 指定作者,紧跟着容器的 id(使用 docker ps -a 查看 id),再接着是新的镜像名称

#做完新镜像后,运行新镜像,进入容器可见,是正常的