1、Docker是什么?

       Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 Docker官网

2、Docker出现的背景?

  • 环境管理复杂 - 各种OS各种中间件的依赖,导致程序部署相当复杂 。

  • 云计算时代的到来 - 云服务器的成功, 引导开发者将应用转移到云上, 解决了硬件管理的问题,然而中间件相关的问题依然存在 。

  • 虚拟化手段的变化 - 对于用户而言需要的是运行环境而非系统,KVM或者Vmware对于Docker来说就是浪费资源还不容易管理。

  • LXC的移动性 - docker可以快速备份生产环境和还原,可移动性非常好。

      下图展示了 Docker 技术的基本组成,主要包括 Client、Deamon、Container、Images 和 Registry。

    

  • Docker Client:Docker 客户端,提供给用户一个终端,用户输入 Docker 提供的命令来管理本地或远程的服务器。

  • Docker Daemon:服务端守护进程,接收 Client 发送的命令并执行相应的操作。

  • Docker Images:Docker 镜像,一个特殊的文件系统,封装了运行时需要的库、资源、应用等。

  • Docker Container:Docker 容器,提供了运行环境,通过 Docker Images 启动,在 Docker Images 基础上运行应用。

  • Docker Registry:Docker 仓库,用来管理镜像,实现镜像的上传、下载、浏览。

3、Docker安装

  • 前提条件

     Docker 要求 Ubuntu 系统的内核版本高于 3.10

    Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。

    Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

     查看系统版本

uname -r

  安装Docker

安装Docker命令

yum -y install docker-io  --适用于CentOS方式
wget -qO- https://get.docker.com/ | sh   --获取最新脚本并安装,适用于Ubuntu

 

启动 Docker 后台服务

service docker start

 

  • Docker镜像使用

    查找镜像地址1,Docker;2,Aliyun

docker images  --查看本地镜像(REPOSITORY:表示镜像的仓库源;TAG:镜像的标签;IMAGE ID:镜像ID;CREATED:镜像创建时间;SIZE:镜像大小)
docker search httpd --查找DockerHub上面的镜像;使用命令 docker pull 来下载镜像
docker pull httpd --拉取镜像
docker save -o httpd.tar docker.io/httpd --保存镜像,例如将httpd这个镜像保存到本地,httpd.tar(名字),docker.io/httpd是镜像的仓库源
docker rmi -f name|imageId   --删除镜像,imageId是镜像ID
docker tag IMAGEID REPOSITORY  --修改IMAGEID的REPOSITORY ,IMAGEID 需要需要指定的id,REPOSITORY需要修改的名称
docker run docker.io/httpd --下载并运行镜像
docker inspect docker.io/httpd --查看镜像的详细信息

    本地镜像加速,在该文件中添加镜像地址如,{"registry-mirrors":["https://yourhost.mirror.aliyuncs.com"]}

阿里云需要授权分配才可以;授权地址:阿里云镜像加速

vi /etc/docker/daemon.json
  • Docker容器使用

  运行镜像

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

 

   -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--name="nginx-lb": 为容器指定一个名称;

--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

-h "mars": 指定容器的hostname;

-e username="ritchie": 设置环境变量;

--env-file=[]: 从指定文件读入环境变量;

--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

-m :设置容器使用内存最大值;

--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:    四种类型;  

--link=[]: 添加链接到另一个容器;

--expose=[]: 开放一个端口或一组端口;

  使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。

docker run --name mynginx -d nginx:latest

   使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。

docker run -P -d nginx:latest

   使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data。

docker run -p 80:80 -v /data:/data -d nginx:latest

   使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

docker run -it nginx:latest /bin/bash

   进入容器

docker exec -it nginx:latest /bin/bash        --使用exit退出,退出不影响docker运行
docker attach eureka1        --使用exit退出时,docker会退出
  • Docker仓库使用

一、 部署私有仓库

a、下载registry镜像

docker pull registry:2.5

 b、生成 用户名/密码 访问密钥 (这里设置用户名 swenty , 密码 swenty)

mkdir -p /opt/registry-var/auth/
docker run --entrypoint htpasswd registry:2.5 -Bbn swenty swenty  >> /opt/registry-var/auth/htpasswd

 c、设置配置文件,启用删除镜像功能(也可以不启用,看业务,修改 storage - delete - enable 为 false 即可)

mkdir -p /opt/registry-var/config
vim /opt/registry-var/config/config.yml

 配置文件如下

version: 0.1
log:
 fields:
   service: registry
storage:
 delete:
   enabled: true
 cache:
   blobdescriptor: inmemory
 filesystem:
   rootdirectory: /var/lib/registry
http:
 addr: :5000
 headers:
   X-Content-Type-Options: [nosniff]
health:
 storagedriver:
   enabled: true
   interval: 10s
threshold: 3

  d、启动服务(这里将镜像路径映射到宿主机的 /opt/registry-var/ 文件夹下,可以根据需要修改)

docker run -d -p 5000:5000 --restart=always  --name=registry\
 -v /opt/registry-var/config/:/etc/docker/registry/ \
 -v /opt/registry-var/auth/:/auth/ \
 -e "REGISTRY_AUTH=htpasswd" \
 -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
 -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
 -v /opt/registry-var/:/var/lib/registry/ \
registry:2.5

 二、客户端使用

   a、 开启 http 式访问私有仓库模式,添加 "insecure-registries":["123.207.12.196:5000"]

vim /etc/docker/daemon.json

    b、重启服务

systemctl daemon-reload
systemctl restart docker

 

  c、上传镜像到私有仓库(例如:将registry:2.5上传)

docker tag registry:2.5 123.207.12.196:5000/registry:2.5 --重命名
docker login 123.207.12.196:5000 -uswenty -pswenty  --登陆
docker push 123.207.12.196:5000/registry:2.5 --上传

d、载镜像

docker pull 192.9.100.127:5000/ubuntu:14.04

三、额外操作

a、查找私有仓库镜像

curl -u swenty:swenty  http://123.207.12.196:5000/v2/_catalog
curl -u swenty:swenty  http://123.207.12.196:5000/v2/registry/tags/list

b、删除私有仓库镜像