菜鸟笔记
提升您的技术认知

Docker 详细文档

Docker 中文文档

⒈ 简介

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   进入容器

 

第二台一致的动作