Docker 文档

目录       

⒈ 简介... 2

1.1什么是容器?... 2

1.2 什么是Docker?... 3

1.3 Doceker的目标... 3

1.4 Docker 的使用场景... 3

⒉ Docker 的基本组成... 3

2.1 Docker 客户端/守护进程... 3

2.2 Docker 镜像... 4

2.3 Doceker Container容器... 4

2.4 Docker Registry 仓库... 4

⒊ Docker容器相关技术简介... 5

3.1 Namespaces 命名空间... 5

3.2 Control groups 控制组... 5

3.3 Docker容器的能力... 5

⒉安装和部署... 6

2.1 在red-hat安装Docker. 6

2.2 在windows安装Docker. 7

4.Docker容器... 8

4.1容器的基本操作... 8

3.2守护式容器... 9

3.3部署静态网站... 9

5.Docker镜像与仓库... 11

5.1 查看和删除镜像... 11

5.2 获取和推送镜像... 11

5.3 构建镜像... 12

6.Docker客户端和守护进程... 14

6.1 docker的c/s 模式(客户端支持远程访问sercer). 14

6.2守护进程的配置和操作... 14

6.3 docker的远程访问... 16

7.      dockerfile. 17

7.1 dockerfile指令... 17

7.2  dockerfile构建镜像过程... 18

8.      网络连接... 18

8.1docker容器的网络基础... 18

8.2 容器的互联... 19

8.3  docker容器与外部网络的链接... 21

9.docker容器的数据管理... 21

9.1容器的数据卷... 22

9.2 卷容器... 23

9.3 数据卷的备份和还原... 23

10.跨主机链接... 23

10.1 网桥实现跨主机链接... 24

10.2 使用open switch实现跨主机链接... 24

10.3 使用weave实现跨主机链接... 26

 

 

简介

1.1什么是容器?

一种虚拟化的方案

操作系统级别的虚拟化

只能运行相同或相似内核的操作系统

依赖于Linux内核特性:Namespace 和Cgrops(control group)

1.2 什么是Docker?

将应用程序自动部署到容器

Go语言开源引擎

2013年初发布

基于Apache 2.0 开源授权协议发行

1.3 Doceker的目标

提供简单轻量的建模方式

职责的逻辑分离

快速高效的开发生命周期

鼓励使用面向服务的架构

1.4 Docker 的使用场景

使用Docker容器开发、测试、部署服务

创建隔离的运行环境

搭建测试环境

构建多用户的平台即服务(paas)基础设施

提供软件即服务(saas)应用程序

高性能、超大规模的宿主机部署

Docker 的基本组成

2.1 Docker 客户端/守护进程

C/S 架构

本地/远程

 

2.2 Docker 镜像

容器的基石 

层叠的只读文件系统

联合加载

 

2.3 Doceker Container容器

通过镜像启动

启动和执行阶段

写时复制(copy on write)

 

2.4 Docker Registry 仓库

公有

私有

Docker Hub

 

 

Docker容器相关技术简介

3.1 Namespaces 命名空间
 

编程语言

封装———代码隔离

操作系统

  系统资源的隔离

  进程、网络、文件系统、资源…….

3.2 Control groups 控制组

用来资源分配

来源于google

提供的功能

       资源限制

       优先级设定

       资源计量

       资源控制

3.3 Docker容器的能力

文件系统隔离:每个容器都有自己的root文件系统

进程隔离:每个容器都运行在自己的进程环境中

网络隔离:容器间的虚拟网络接口和IP地址都是分开的

资源隔离和分组:使用cgroups将cpu和内存之类的资源独立分配给每个docker容器

 

 

安装和部署

http://www.docker.org.cn/     参考文档 Docker中文社区

https://docs.docker.com/      下载

2.1 在red-hat安装Docker

Docker目前可以在红帽企业版7(Red Hat Enterprise Linux 7)版本下面安装

依赖性检查

Docker需要一个64位系统的红帽系统,内核的版本必须大于3.10。可以用下面的命令来检查是否满足docker的要求。

$ uname -r 3.10.0-229.el7.x86_64 

如果上述的依赖满足的话,还是推荐您全面地更新红帽系统,以保证内核相应的bug都得到修复。

 

目前红帽RHEL系统下面安装docker可以有两种方式:一种是使用curl获得docker的安装脚本进行安装,还有一种是使用yum包管理器来安装docker。

一、使用安装脚本安装。

备注:你可以按照同样的步骤在CentOS系统下面安装docker。

  1. 使用一个有sudo权限的帐号登录红帽系统。
  2. 更新现有的yum包。
$ sudo yum update 
  1. 执行docker安装脚本。
$ curl -sSL https://get.docker.com/ | sh 
  1. 启动docker服务。
$ sudo service docker start
  1. 确认docker安装成功。
  2. $ sudo docker run hello-world

二、使用yum包安装

1. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.yum makecache fast

3.yum -y install docker-ce

 

 

  1. 启动docker服务。
service docker start
  1. 确认docker是否安装成功。
docker run hello-world

 2.2 在windows安装Docker

方法一、下载Docker for windows (需要运行Microsoft Hyper-V);Docker Community Edition(社区版)和Docker Enterprise Edition(企业版)Docker CE仅支持win10,而Docker EE仅支持WIN SERVER 2016.

方法二、下载Docker Toolbox(需要运行Oracle Virtual Box);Docker 给旧版本的WIN系统提供的是Docker Toolbox下载

Docker ToolBox共包含5个docker工具:

  • Docker Machine:包含了docker-machine命令。
  • 运行Docker命令所需要的引擎。
  • Kitematic,Docker GUI界面。
  • 事先为docker 命令行环境配置好的shell。
  • Oracle公司的VM VirtualBox包。

因为Docker守候进程依赖于linux内核,所以无法直接在windows环境中直接运行Docker。解决方案就是使用docker-machine命令创建一个Docker虚拟机并附加到它上面。这个Docker虚拟机来为你的windows系统提供Docker服务。

这个Docker虚拟机专门为windows运行环境优化过,轻量级,完全在内存中运行,很小,下载不超过24M,5秒那可以启动。

安装完成后桌面会生成三个快捷方式,分别为

(1) Docker Quickstart Terminal: 提供Docker的命令行操

(2) Oracle VM VirtualBox: 虚拟机软件

(3) Kitematic (Alpha):图形化的docker

 

 

4.Docker容器

4.1容器的基本操作

 启动容器:

$ docker run IMAGE [COMMAND][ARG…]

     RUN 在新容器在中执行命令

启动交互式容器:

 $ docker run –I –t IMAGE /bin/bash

       -I  --interactive=ture  |   false   默认是false         -------告诉守护进程始终打开标准输入 交互式

       -t   --tty=ture | false  默认是false                          -------打开命令终端

查看容器:

$ docker ps [-a][-l]

$ docker inspect  (id/name)  查看容器详细信息

$ docker run --name自定义 –I – t ubutun /bin/bash    ----  自定义容器名称

$ docker start [-i]  容器名  -----重新启动

$ docker rm [容器名]   -----删除一个停止的容器

3.2守护式容器

$ docker run -i –t  IMAGE /bin/bash   退出时用 ctrl + P   ctrl +Q;

$ docker attach  (id/name)     重新进入退出时的容器

启动守护式容器

$ docker run –d 镜像名 [COMMAND][ARG…]

$ docker logs [-f][-t][-tail] 容器名

        -f    --follows=ture | false  默认为false   ---跟踪日志变化并返回结果

        -t    --timestamps=true | false   ---加上时间戳

      --tail = “all”    ---返回行数

在运行中的容器内启动新的进程

$ docker exex [-d][-it[-t]

$docker stop  容器名  

$ docker kill 容器名

3.3部署静态网站

设置容器的端口映射

run [-P]  [-p]

NGINX 部署流程

docker run --name web1 -p 8080 -i -t centos /bin/bash  创建docker

正常部署并启动tomcat

Ctrl p   ctrl q  返回宿主机

[root@QiYong-APP-T01 ~]# docker port web1

8080/tcp -> 0.0.0.0:32769

显示宿主机的32769端口映射docker的8080端口

访问宿主机的32769端口正常显示页面

Docker top web1  显示docker的进程

Docker exec web1 nginx 启动容器相关服务

5.Docker镜像与仓库

5.1 查看和删除镜像

存储位置:/var/lib/docker

Docker info  ----查看信息

列出镜像

 

 

 

 

删除镜像

 

 

5.2 获取和推送镜像

查找镜像

获取和推送镜像——拉取镜像

                                                                                      

 

使用国内仓库镜像服务器

登录https://www.daocloud.io注册

在dashboard中申请链接xxx

修改启动配置文件 Vi /etc/default/docker 

添加DOCKER_OPTS=”.XXX”

重启

上传镜像到dockerhup中

Docker push image

5.3 构建镜像

手动构建镜像

实例:
1.运行一个docker容器并做修改

docker run -i -t --name test centos /bin/bash   ---运行了一个test的容器

安装一个nginx  然后退出

 [root@QiYong-APP-T01 ~]# docker ps –l      列出docker信息

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

72a9de314e75        centos              "/bin/bash"         2 minutes ago       Up 2 minutes                            test

2.将容器转化为镜像作者齐勇镜像名image_test

docker commit -a  qiyong  test image_test

[root@QiYong-APP-T01 ~]# docker images     列出镜像

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

image_test          latest              9cf7917b729d        15 seconds ago      298MB 

使用Dockerfile构建镜像

  1. 创建doclerfile文件
  2. 使用docker build 命令

创建一个目录创建dokerfile文件并将以上内容放入,使用build构建镜像

6.Docker客户端和守护进程

6.1 docker的c/s 模式(客户端支持远程访问sercer)

Remote API

链接方式

6.2守护进程的配置和操作

启动关闭重启守护进程

systemctl [commod] docker   start stop  restart

docker –d  --以守护方式运行

   

以上选项在配置文件中配置

6.3 docker的远程访问

修改服务端启动配置文件

修改客户端

  1. dockerfile

7.1 dockerfile指令

指令格式(两部分:注释 指令)

四种指令

    FROM

 

 

   MAINTAINER<NAME>--指定镜像的作者信息,包含镜像的所有者和联系信息

   RUN    ----指定镜像中运行的命令

   RUN<COMMAND>  (shell模式)    RUN [“excutable”,”param1”,”param2”] (exec模式)

   EXPOSE  ----指定运行改镜像的容器使用的端口

其他指令

   CMD  <COMMAND> --- RUN类似 区别是容器运行过程中执行命令

   ENTRYPOINT <COMMAND> --CMD相像,区别是不会被run命令替换

ADD<src>   ---将文件和目录复制到镜像中  包含了tar的解压功能

COPY <src> ---将文件和目录复制到镜像中

VOLUME [“/DATA”]

WORKDIR /PATH/TO/WORKDIR   ----指定工作目录 默认使用绝对路径

ENV <key><value>   --设置环境变量

USER daemon  ----指定

ONBUILD   [intruc] 创建触发器

7.2  dockerfile构建镜像过程

1.从基础镜像运行一个容器

2.执行一条指令,对容器进行修改

3.执行类似docker commit的操作,提交一个新的镜像层

4.再基于刚提交的镜像运行一个新容器

5.执行dockerfile的下一条指令,直至所有指令执行完毕

Docker history <images>  查看镜像构建过程

Dockerfile镜像缓存,再次构建更高效

  1. 网络连接

8.1docker容器的网络基础

 

 

 

 

 

 

Brctl show   --显示网桥信息

8.2 容器的互联

                                                                                       

 

 

 

1)允许容器互联

默认(-icc=ture)情况下同一宿主机之间的容器没有网络限制,都是通过虚拟网桥进行链接的

容器在重启后ip地址会发生改变,这样我们就无法链接到指定的服务器了,这是我们不希望的,所以docker给我们提供了下面的选项:为容器间创建链接和别名,设置link选项后容器在重启时,系统会自动修改ip地址和别名的映射 具体可以 /etc/hosts  实验

2)拒绝容器的互联

-icc=false

Vi /etc/default/docker

添加:DOCKER_OPTS=” –icc=false”

3)允许特定的容器间链接

1.Vi /etc/default/docker

添加:DOCKER_OPTS=” --icc=false  --iptables=true”

Webtest为别名

2.iptables –F  清空配置

3.重启docker   docker  restart

4.重启容器

5.进入容器查看 iptables –L

Docker链变成了第一位,而且设置link的两个容器之间是通的规则

 

8.3  docker容器与外部网络的链接

Ip_forward   linux中的变量:决定了系统是否会转发流量  默认值 ture

查看命令 :systectl  net4.conf.all.forwarding

Iptables(包过滤)

主要

Iptables  -I DOCKER  -s 10.3.3.3 –d 10.3.3.2 –p TCP  --dport 80 –j DROP    (阻止10.3.3.3  访问10.3.3.2)

 

9.docker容器的数据管理

 

9.1容器的数据卷

 

不能指定本地映射的路径

9.2 卷容器

--volumes-from  指定数据卷容器

Docker  run –it  --name dvt5  --volumes-from  dvt4  ubutun /bin/bash

 

9.3 数据卷的备份和还原

 10.跨主机链接

 

10.1 网桥实现跨主机链接

 

10.2 使用open switch实现跨主机链接

10.3 使用weave实现跨主机链接

Chmod +x /usr/bin/weave

Weace launch  启动

启动命令时 会在主机上创建一个weave的docker容器

Weave launch 192.168.59.103  分配一个ip(第二台也传入这个ip

用weave命令创建一个容器

C2=$(Weave  run  192.168.1.2/24  -it  centos /bin/bash)

Echo $c2   返回docker的id

Docker  attrch  $c2   进入容器

 

第二台一致的动作

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐