docker介绍, 优势, 核心概念, 安装, 镜像管理, 通过容器创建镜像, 导出导入

docker介绍

  • 官网 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和传统的虚拟化比较

在这里插入图片描述

在这里插入图片描述

Docker的优势

  • 启动非常快,秒级实现
  • 资源利用率高,一台高配置服务器可以跑上千个docker容器
  • 更快的交付和部署,一次创建和配置后,可以在任意地方运行
  • 内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率
  • 易迁移,平台依赖性不强
    在这里插入图片描述

Docker核心概念

  • 镜像,是一个只读的模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。
  • 容器,镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。
  • 仓库,存放镜像的一个场所,仓库分为公开仓库和私有仓库。 最大的公开仓库是Docker hub(hub.docker.com),国内公开仓库(dockerpool.com)

Docker安装

<root@linux0 ~>$ 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  2424  100  2424    0     0    994      0  0:00:02  0:00:02 --:--:--   995
<root@linux0 ~>$ yum list |grep docker-ce
containerd.io.x86_64                        1.2.10-3.2.el7             docker-ce-stable
docker-ce.x86_64                            3:19.03.5-3.el7            docker-ce-stable
docker-ce-cli.x86_64                        1:19.03.5-3.el7            docker-ce-stable
docker-ce-selinux.noarch                    17.03.3.ce-1.el7           docker-ce-stable
<root@linux0 ~>$ yum install -y docker-ce   #安装docker;
<root@linux0 ~>$ systemctl start docker   #启动docker;
<root@linux0 ~>$ ps aux |grep docker
root     102285  1.6  6.2 571808 61968 ?        Ssl  21:57   0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root     102428  0.0  0.0 112728   976 pts/1    S+   21:57   0:00 grep --color=auto docker

Docker镜像管理

  • docker pull centos//可以下载centos镜像,速度很慢
  • 配置docker加速器(参考 http://blog.csdn.net/xlemonok/article/details/71403534)
    vi /etc/docker/daemon.json//加入如下内容
    {
    “registry-mirrors”: [“https://dhq9bx4f.mirror.aliyuncs.com”]
    }
    说明:这个url为加速器地址,需要同学们自行到阿里云申请
  • 配置完加速器,重启docker服务,再次docker pull centos会快很多
    docker images 查看本地的镜像
    docker search xxx //搜索镜像,其中xxx是关键词
    docker tag centos aming123 //给镜像打标签
    docker run -itd centos //把镜像启动为容器,-i表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启
    动,要把-i -t -d 放到镜像名字前面
    docker ps //查看运行的容器,加上-a选项后可以查看所有容器,包括未运行的
    docker rmi centos //用来删除指定镜像, 其中后面的参数可以是tag,如果是tag时,实际上是删除该tag。当后面的>参数为镜像ID时,则会彻底删除整个镜像,所有标签也会一同删除
    Docker通过容器创建镜像
    docker run启动容器后,可以通过下面命令进入容器
    docker exec -it xxxxx bash//其中xxxxx为容器id,这个id可以用docker ps查看,最后面的bash为进入容器后我们要
    执行的命令,这样就可以打开一个终端
<root@linux0 ~>$ docker pull centos   #尝试下载centos镜像;
Using default tag: latest
latest: Pulling from library/centos
729ec3a6ada3: Downloading  6.429MB/71.52MB   #速度很慢;
^C
<root@linux0 ~>$ vi /etc/docker/daemon.json   #配置加速器;加入以下内容;
{
  "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}
<root@linux0 ~>$ systemctl restart docker  #重启;
<root@linux0 ~>$ docker pull centos   #再次下载;
Using default tag: latest
latest: Pulling from library/centos
729ec3a6ada3: Pull complete 
Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
<root@linux0 ~>$ docker images   #查看可用镜像;
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              0f3e07c0138f        3 months ago        220MB
<root@linux0 ~>$ docker pull ubuntu  #下载ubuntu镜像;
Using default tag: latest
latest: Pulling from library/ubuntu
2746a4a261c9: Pull complete 
4c1d20cdee96: Pull complete 
0d3160e1d0de: Pull complete 
c8e37668deea: Pull complete 
Digest: sha256:250cc6f3f3ffc5cdaa9d8f4946ac79821aafb4d3afc93928f0de9336eba21aa4
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
<root@linux0 ~>$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              549b9b86cb8d        2 weeks ago         64.2MB
centos              latest              0f3e07c0138f        3 months ago        220MB
  • 打标签
<root@linux0 ~>$ docker tag centos tany1   #类似创建了一个镜像的链接,image ID是一样的,可针对不同名字的镜像做不同的修改;
<root@linux0 ~>$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              549b9b86cb8d        2 weeks ago         64.2MB
centos              latest              0f3e07c0138f        3 months ago        220MB
tany1               latest              0f3e07c0138f        3 months ago        220MB
<root@linux0 ~>$ docker tag centos tany1:1234  #打上标签;
<root@linux0 ~>$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              549b9b86cb8d        2 weeks ago         64.2MB
centos              latest              0f3e07c0138f        3 months ago        220MB
tany1               1234                0f3e07c0138f        3 months ago        220MB
tany1               latest              0f3e07c0138f        3 months ago        220MB
<root@linux0 ~>$ docker run -itd centos  #启动镜像,大概是在容器里打开镜像,打开后才可以使用;每次加载容器ID不一样;
-i, --interactive                    Keep STDIN open even if not attached
-t, --tty                            Allocate a pseudo-TTY
-d, --detach                         Run container in background and print container ID
153b59d67dde12157b1e99efc85b2a3dfe10162a130fe8681175b8c9afe137b6
<root@linux0 ~>$ docker ps    #查看运行中的容器;
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
153b59d67dde        centos              "/bin/bash"         48 seconds ago      Up 40 seconds 
<root@linux0 ~>$ docker rmi tany1   #删除一个镜像,默认删除标签latest那个;
Untagged: tany1:latest
<root@linux0 ~>$  docker exec -it 153b59 bash   #进入一个容器;
[root@153b59d67dde /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@153b59d67dde /]# df -h   #容器使用的资源是虚拟机的资源;这个容器使用的是一个删减版的系统;
Filesystem      Size  Used Avail Use% Mounted on
overlay          18G   14G  4.8G  74% /
tmpfs            64M     0   64M   0% /dev
tmpfs           487M     0  487M   0% /sys/fs/cgroup
shm              64M     0   64M   0% /dev/shm
/dev/sda3        18G   14G  4.8G  74% /etc/hosts
tmpfs           487M     0  487M   0% /proc/asound
tmpfs           487M     0  487M   0% /proc/acpi
tmpfs           487M     0  487M   0% /proc/scsi
tmpfs           487M     0  487M   0% /sys/firmware
[root@153b59d67dde /]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0   #容器使用另外一套IP地址,类似我们使用虚拟机的NAT模式;
       valid_lft forever preferred_lft forever
<root@linux0 ~>$ ifconfig  #主机上多了两个网卡,让主机跟容器通信;每次启动容器主机的iptables自动添加一些规则,请自行查看;
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:f4ff:fe8f:7972  prefixlen 64  scopeid 0x20<link>
        ether 02:42:f4:8f:79:72  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 656 (656.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth7a9d16d: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::34fd:d4ff:fef1:1dbe  prefixlen 64  scopeid 0x20<link>
        ether 36:fd:d4:f1:1d:be  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 1312 (1.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Docker通过容器创建镜像

  • docker run启动容器后,可以通过下面命令进入容器
  • docker exec -it xxxxx bash//其中xxxxx为容器id,这个id可以用docker ps查看,最后面的bash为进入容器后我们要执行的命令,这样就可以打开一个终端
  • 进入到该容器中,我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像
    在容器中执行 yum install -y net-tools,然后ctrl d退出容器
  • docker commit -m “change somth” -a “somebody info” container_id new_image_name //container_id通过docker ps -a获取,后面的new_image_name为新镜像名字
    例如: docker commit -m “install net-tools” -a “Aming” 2c74d574293f centos_with_nettool 这个命令有点像svn的提交,-m 加一些改动信息,-a 指定作者相关信息 2c74d这一串为容器id,再后面为新镜像的名字
[root@153b59d67dde /]# yum install -y bash-completion   #修改镜像,安装一个包;
<root@linux0 ~>$ docker commit -m "install bash -completion" -a "tany" 153b59d centos-with-completion  #以这个版本创建镜像;另存为的意思,如不保存,关闭容器后只能导入一开始的镜像,所有改动消失;
sha256:3ab3454f2f082a3afe6e08f0e0e2bf1950c8f423bcb0730e49277cf40af705c4
<root@linux0 ~>$ docker images   #增加了镜像;
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
centos-with-completion   latest              3ab3454f2f08        25 seconds ago      261MB
ubuntu                   latest              549b9b86cb8d        2 weeks ago         64.2MB
centos                   latest              0f3e07c0138f        3 months ago        220MB
tany1                    1234                0f3e07c0138f        3 months ago        220MB
<root@linux0 ~>$ docker run -itd centos-with-completion bash
313bbb42af3d33ea41f53097964b921a8c396bca912f57abd1b8771781e4ee4b
<root@linux0 ~>$  docker exec -it 313bbb4  bash

Docker使用模板创建镜像

  • 首先去下载一个模板
    http://openvz.org/Download/templates/precreated //下载速度不快,阿铭下载了一个centos6的模板centos-6-x86-minimal.tar.gz
  • 导入该镜像的命令为:
    cat centos-6-x86-minimal.tar.gz|docker import - centos6
  • docker images查看导入的镜像
  • 把现有镜像,导出为一个文件:
    docker save -o aming-centos.tar aming
  • 我们还可以用该文件恢复本地镜像:
    docker load --input aming-centos.tar 或者
    docker load < aming-centos.tar
  • docker push image_name //可以把自己的镜像传到dockerhub官方网站上去,但前提是需要先注册一个用户,后续如果有需求再研究吧
<root@linux0 ~>$ wget -c https://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz   #下载一个打包好的镜像;
<root@linux0 ~>$ cat centos-6-x86-minimal.tar.gz|docker import - centos6  #载入压缩的镜像;
sha256:5ecaf3b1ff05c6f30af292868e360f2d8f89371a81805b155a675f34c0f72704
<root@linux0 ~>$ docker images   #增加了镜像,再启动成容器,即可使用;
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
centos6                  latest              5ecaf3b1ff05        2 hours ago         512MB
centos-with-completion   latest              3ab3454f2f08        34 hours ago        261MB
ubuntu                   latest              549b9b86cb8d        2 weeks ago         64.2MB
centos                   latest              0f3e07c0138f        3 months ago        220MB
tany1                    1234                0f3e07c0138f        3 months ago        220MB
<root@linux0 ~>$ docker save -o centos-with-completion.tar centos-with-completion  #保存一个镜像成为文件;
<root@linux0 ~>$ ls *.tar  #查看新建镜像文件;
centos-with-completion.tar  
<root@linux0 ~>$ docker rmi centos-with-completion:latest -f   #删除一个镜像;
Untagged: centos-with-completion:latest
Deleted: sha256:3ab3454f2f082a3afe6e08f0e0e2bf1950c8f423bcb0730e49277cf40af705c4
<root@linux0 ~>$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos6             latest              5ecaf3b1ff05        3 hours ago         512MB
ubuntu              latest              549b9b86cb8d        2 weeks ago         64.2MB
centos              latest              0f3e07c0138f        3 months ago        220MB
tany1               1234                0f3e07c0138f        3 months ago        220MB
<root@linux0 ~>$ docker load < centos-with-completion.tar   #便用文件重新加载成镜像;
Loaded image: centos-with-completion:latest
<root@linux0 ~>$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
centos6                  latest              5ecaf3b1ff05        3 hours ago         512MB
centos-with-completion   latest              3ab3454f2f08        35 hours ago        261MB
ubuntu                   latest              549b9b86cb8d        2 weeks ago         64.2MB
centos                   latest              0f3e07c0138f        3 months ago        220MB
tany1                    1234                0f3e07c0138f        3 months ago        220MB

导出导入加压缩

https://www.jianshu.com/p/0e57a43a4adf
效果显著,还是要使用一下

  • 导出
docker save <myimage>:<tag> | gzip > <myimage>_<tag>.tar.gz
  • 导入
gunzip -c <myimage>_<tag>.tar.gz | docker load
发布了125 篇原创文章 · 获赞 5 · 访问量 4603

猜你喜欢

转载自blog.csdn.net/tanyyinyu/article/details/103857513