1.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和传统的虚拟化比较

image.png

Docker的优势

启动非常快,秒级实现

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

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

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

 易迁移,平台依赖性不强

image.png

Docker核心概念

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

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

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


Docker安装

安装步骤

方法一:

1.下载一个repo的yum源(由官方提供)

curl https://download.docker.com/linux/centos/docker-ce.repo -o  /etc/yum.repos.d/docker.repo

2.安装社区版:

yum install -y docker-ce

方法二:

(速度比较慢,大家也可以直接下载rpm包)

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

下载完,上传到linux下,也需要用yum安装,可以自动解决依赖关系,自己指定一下

yum install -y docker-ce-xxxx.rpm

3.启动docker:

systemctl start docker


Docker镜像管理

  • 下载镜像:docker pull centos

[root@awei-01 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

配置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

[root@awei-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       latest    300e315adb2f   4 weeks ago   209MB
  • 搜索镜像:docker search xxx //搜索镜像,其中xxx是关键词

  • 镜像打标签:docker tag 镜像名 标签 //给镜像打标签TAG就是他的标签

[root@localhost ~]# docker tag centos6 centos6:v1
[root@localhost ~]# docker images
REPOSITORY                    TAG       IMAGE ID       CREATED        SIZE
centos6                       latest    fa529b27048c   28 hours ago   512MB
centos6                       v1        fa529b27048c   28 hours ago   512MB
registry                      latest    678dfa38fcfa   3 weeks ago    26.2MB
  • 镜像启动为容器:docker run -itd centos bash

[root@awei-01 ~]# docker run -itd centos bash
bce3d5c8d148fab8cebf15ea288f799b92cdae4541e9c604efab7e52ac7eb1a3

-i表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动,要把-i -t -d 放到镜像名字前面centos  注:镜像启动完之后就会变成容器

  • 查看运行的容器:docker ps //加上-a选项后可以查看所有容器,包括未运行的

[root@awei-01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
bce3d5c8d148   centos    "/bin/bash"   47 seconds ago   Up 46 seconds             nervous_black
  • 删除指定镜像:docker rmi centos

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

[root@awei-01 ~]# docker rmi 300e315adb2f
Untagged: centos:latest
Untagged: centos@sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Deleted: sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55
Deleted: sha256:2653d992f4ef2bfd27f94db643815aa567240c37732cae1405ad1c1309ee9859
  • 关闭容器:docker stop 启动的容器ID

  • docker rm -f 启动的容器ID


Docker通过容器创建镜像

docker run启动容器后,可以通过下面命令进入容器

  • 进入容器::docker exec -it xxxxx  bash//其中xxxxx为容器id,这个id可以用docker ps查看,最后面的bash为进入容器后我们要执行的命令,这样就可以打开一个终端

[root@awei-01 ~]# docker exec -it bce3d5c8d148 bash
[root@bce3d5c8d148 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@bce3d5c8d148 /]#
  • 创建镜像:docker commit -m "改动/描述"  -a "作者信息" container_id 新镜像名字 //container_id通过docker ps -a获取

例如:

进入到该容器中,我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像,在容器中执行 yum install -y net-tools,然后ctrl d退出容器

创建改动镜像:docker commit -m "install net-tools" -a "Aming" 2c74d574293f centos_with_nettool 这个命令有点像svn的提交,-m 加一些改动信息,-a 指定作者相关信息  2c74d这一串为容器id,再后面为新镜像的名字


Docker使用模板创建镜像

首先去下载一个模板

wget http://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz//下载速度不快,下载了一个centos6的模板centos-6-x86-minimal.tar.gz

  • 导入镜像的命令为:

cat centos-6-x86-minimal.tar.gz|docker import - centos6

docker images查看导入的镜像

[root@awei-01 ~]# cat centos-6-x86-minimal.tar.gz|docker import - centos6
sha256:730dac82b660ad9037c2f3cad6b6f6512424ea5431a05de5a20a4704bd446841
[root@awei-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
centos6      latest    730dac82b660   58 seconds ago   512MB
centos       latest    300e315adb2f   4 weeks ago      209MB
ubuntu       latest    f643c72bc252   6 weeks ago      72.9MB
  • 把现有镜像,导出为一个文件

docker save -o 导出名 镜像名

[root@awei-01 ~]# docker save -o centos.tar.gz centos
[root@awei-01 ~]# ls
1.php            centos-6-x86-minimal.tar.gz  data.txt            rpmbuild
anaconda-ks.cfg  centos.tar.gz                memcache-2.2.3.tgz  yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
  • 用该文件恢复本地镜像

docker load --input aming-centos.tar  或者  docker load < aming-centos.tar

[root@awei-01 ~]# docker load --input centos.tar.gz 
2653d992f4ef: Loading layer [==================================================>]  216.5MB/216.5MB
Loaded image: centos:latest

  • docker push image_name  //可以把自己的镜像传到dockerhub官方网站上去,但前提是需要先注册一个用户,后续如果有需求再研究吧


猜你喜欢

转载自blog.51cto.com/12922638/2591037