什么是Docker

开源

诞生于2013年初,基于Go语言的开源项目。

容器(沙盒)

基于Liunx的容器技术,Docker进一步优化容器。 让应用运行在容器中,不同的容器互相隔离又可以建立通信机制。 容器自身对自由的要求很低,远低于以往的虚拟机。

核心概念

  1. 镜像(Image)
  2. 容器(Container)
  3. 仓库(Repository)

镜像(Image)

类似虚拟机的镜像,镜像是创建Docker容器的基础,用户可以从仓库下载一个已经做好的应用镜像。 例如一个镜像包含了完整的Ubuntu操作系统,可以叫做Ubuntu镜像。

注意镜像是只读的

容器(Container)

容器类似于一个沙箱,Docker 利用容器来运行和隔离应用。可以理解成一个集装箱。

仓库(Repository)

仓库类似于我们存放代码的仓库,就是Docker几种存放镜像的场所。
官方仓库:Docker store。也可以自己搭建私人仓库,例如Harbor。

Docker 安装

https://docs.docker.com/engine/installation/

Docker 分两大版本 社区版Community Edition(CE)和企业版Enterprise Edition(EE)。

CE版本还分稳定版和每月发型版本。 稳定版每季度发型一版。

关于版本号,以前版本例如v1.12 。现在版本直接以发型月份命名,例如v17.09

常用指令

以下以CentOS 系统为例

启动docker 服务

$ sudo systemctl start docker

关闭docker服务

$ sudo systemctl stop docker

重启docker服务

$ sudo systemctl restart docker

查看docker运行状态

$ sudo systemctl status docker

开机自动启动docker服务

$ sudo systemctl enable docker

查看docker 详细信息

$ sudo docker info

获取镜像

$ sudo docker pull xxx
xxx 代表镜像名

查看镜像

$ sudo docker images

查看某镜像详细信息

$ sudo docker inspect xxxx
xxxx 代表 image id

查找镜像

$ sudo docker search xxx
用于查找远程仓库中的共享镜像,默认是docker hub

删除镜像

$ sudo docker rmi xxxx
xxx 可以为标签也可以为ID

创建并启动容器

$ sudo docker run -d —name xxx -p xxx:xxx imagesName

-d:不打印日志
—name :给容器命名
-p:设置主机端口和映射端口

停止容器

$ sudo docker stop imagesid

删除容器

$ sudo docker rm imagesid

查看运行中的容器

$ sudo docker ps

查看所有状态的容器

$ sudo docker ps -a

登录仓库

$ sudo docker login

登录私人仓库:

$ sudo docker login host

Rancher 介绍

官方文档:https://rancher.com/docs/rancher/v1.6/zh/

Harbor 介绍

GitHub地址:https://github.com/vmware/harbor
搭建过程:http://www.jianshu.com/p/7218e66440f9

创建镜像并上传私人仓:

创建镜像有三种方式:

  1. 基于已有的镜像的容器创建
  2. 基于本地模板导入
  3. 基于Dockerfile创建

居于已有的镜像的容器创建

$ docker commit -m “注释” -a “作者” -p 容器ID 新镜像名
-p 表示提交暂停容器运行

居于本地模板导入

$ sudo cat ubuntu-14.04-x86-minimal.tar.gz | docker import -ubuntu:14.04

居于Dockerfile创建

https://docs.docker.com/get-started/part2/

上传镜像到私人仓库

  1. 登录仓库:
    $ docker login xx.xx.xx.xx
  2. 标记Images
    $ docker tag friendlyhello xx.xx.xx.xx/firstimage/friendlyhello
  3. 上传:
    $docker push xx.xx.xx.xx/项目/IMAGE[:TAG]