Docker技术

Docker简介

  • 什么是容器

    一种虚拟化的方案

    操作系统级别的虚拟化

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

  • 什么是Docker

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

  • Docker的目标

    提供简单轻量的建模方式

    职责的逻辑分离

    快速高效的开发生命周期

    鼓励面向服务的架构

  • Docker的使用场景

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

    创建隔离的运行环境

    搭建测试环境

    PaaS

    SaaS

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

Docker的基本组成

  • Docker客户端/守护进程

  • Docker Image镜像

    容器的基石

    层叠的只读文件系统

    联合加载

  • Docker Container容器

    通过镜像启动

    启动和执行阶段

    写时复制

  • Docker Registry仓库

    公有

    私有

    Docker Hub

Docker安装与配置

  • 安装Docker维护的版本

    sudo apt-get install -y curl
    curl -sSL https://get.docker.com/ubuntu/ | sudo sh
    
  • 使用非root用户

    sudo groupadd docker
    sudo gpasswd -a 用户名 docker
    sudo service docker restart
    
  • 在Windows中安装Docker

    Boot2Docker for Windows

    • Boot2Docker Linux ISO
    • Virtualbox
    • MSYS-git
    • 管理工具

容器的基本操作

  • 启动容器

    docker run IMAGE [COMMAND][ARG...] run 在新容器中执行命令
    
  • 启动交互式容器

    docker run -i -t IMAGE /bin/bash
    
  • 查看容器

    docker ps -a 显示所有容器
    docker ps -l 显示最近创建的容器
    docker inspect [ID/Name] 显示容器详细信息
    
  • 自定义容器名

    docker run --name=自定义名 -i -t IMAGE /bin/bash
    
  • 重新启动停止的容器

    docker start [-i] 容器名
    
  • 删除停止的容器

    docker rm 容器名
    

守护式容器

  • 什么是守护式容器

    能够长期运行

    没有交互式会话

    适合运行应用程序和服务

  • 以守护形式运行容器

    docker run -i -t IMAGE /bin/bash
    Ctrl+P Ctrl+Q
    
  • 附加到运行中的容器

    docker attach 容器名
    
  • 启动守护式容器

    docker run -d 镜像名 [COMMAND][ARG...]
    
  • 查看容器日志

    docker logs [-f] [-t] [--tail]
    
  • 查看容器内进程

    docker top 容器名
    
  • 在运行的容器内启动新进程

    docker exec [-d][-i][-t] 容器名 [COMMAND][ARG...]
    
  • 停止守护式容器

    docker stop 容器名 等待停止
    docker kill 容器名 立刻停止
    

在容器中部署静态网站

  • 设置容器端口映射

    run [-P] [-p]

  • Nginx部署流程

    1. 创建映射80端口的交互式容器
    2. 安装Nginx
    3. 安装文本编辑器Vim
    4. 创建静态页面
    5. 修改Nginx配置文件
    6. 运行Nginx
    7. 验证网站访问
    docker run -p 80 --name web -i -t ubuntu /bin/bash
    apt-get update
    apt-get install -y nginx
    apt-get install -y vim
    mkdir -p /var/www/html
    cd /var/www/html
    vim index.html
    whereis nginx
    vim /etc/nginx/sites-available/default
    nginx
    ps -ef
    docker ps
    curl http://127.0.0.1:32769
    

查看和删除镜像

  • 镜像的存储地址

    /var/lib/docker
    
  • 列出镜像

    docker images [OPTSIONS] [REPOSITORY]
    
  • 查看镜像

    docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
    
  • 删除镜像

    docker rmi [OPTIONS] IMAGE [IMAGE...]
    

获取和推送镜像

  • 查找镜像

    Docker Hub

    docker search [OPTIONS] TERM 
    最多显示25结果
    
  • 拉取镜像

    docker pull [OPTIONS] NAME [:TAG]

  • 使用--registry-mirror选项

    1. 修改:/etc/docker

    2. 添加:DOCKER_OPTS = "--registry-mirror=镜像地址"

      https://daocloud.io

构建镜像

  • 保存对容器的修改,并再次使用
  • 自定义镜像的功能
  • 以软件的形式打包并分发服务及其运行环境
  • 使用commit构建镜像

    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    
  • 使用Dockerfile构建镜像

    1. 创建Dockerfile
    2. 使用docker build命令
    docker build [OPTIONS] PATH | URL
    
    # 过程
    mkdir -p dockerfile/df_test1
    cd dockerfile/df_test1
    vim Dockerfile
    docker build -t='yanwu/df_test1' .
    

Docker的C/S模式

  • Remote API
  • 连接方式

Docker守护进程的配置和操作

  • 查看守护进程

    ps -ef | grep docker
    systemctl status docker
    
  • 使用service命令管理

    sudo service docker start
    sudo service docker stop
    sudo service docker restart
    
  • Docker的启动选项

    docker -d [OPTIONS]

  • 启动配置文件

    /etc/default/docker

Docker的远程访问

  • 环境准备
    1. 第二台安装Docker的服务器
    2. 修改Docker守护进程启动选项,区别服务器
    3. 保证Client API与Server API版本一致

Dockerfile指令

  • FROM

    FROM <image> #image已存在的镜像
    FROM <image>:<tag>
    
  • MAINTAINER <name>

    指定镜像的作者信息,包含镜像的所有者和联系信息

    Dockerfile指令详解

Dockerfile构建过程

Docker容器的网络连接

Docker容器的网络基础
ifconfig
  • docker0 linux虚拟网桥

    linux虚拟网桥的特点:

    • 可以设置IP地址
    • 相当于拥有一个隐藏的虚拟网卡
    sudo apt-get install bridage-utils
    sudo brctl show
    
  • 自定义docker0

    sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0
    
  • 自定义虚拟网桥

    sudo brctl addbr br0
    sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0
    

    更改docker守护进程的启动配置

Docker容器的互联
  • 允许所有容器互联
  • 拒绝容器间互联
  • 允许特定容器间的连接
  • 环境准备

    FROM ubuntu:14.04
    RUN apt-get update
    RUN apt-get install -y inetutils-ping
    RUN apt-get install -y nginx
    RUN apt-get install -y curl
    EXPOSE 80
    CMD /bin/bash
    
  • 允许所有容器间连接

    docker run --link [容器名]:[别名] IMAGE [COMMAND]
    docker run -it --name cct3 --link=cct1:webtest yanwu/cct
    
  • 拒绝所有容器间连接

    修改daemon.js

  • 允许特定容器间的连接

    修改daemon.js

Docker容器与外部网络的连接
  • ip_forward
  • iptables
  • 允许端口映射访问
  • 限制IP访问容器
  • 守护进程配置--ip-forward

    --ip-forward=true 数据转发开启

    查看数据转发情况

    sysctl net.ipv4.conf.all.forwarding
    
  • iptables包过滤防火墙

    主要使用到filter表,包含:

    • INPUT
    • FORWARD
    • OUTPUT
    sudo iptables -L -n # 查看filter表
    
    Chain DOCKER (1 references)
    target     prot opt source               destination
    # 允许外部访问
    ACCEPT     tcp  --  0.0.0.0/0            172.17.0.5           tcp dpt:80
    
    # 禁止某IP访问目标IP
    sudo iptables -I DOCKER -s 10.211.55.3 -d 172.17.0.5 -p TCP --dport 80 -j DROP
    
    target     prot opt source               destination 
    # 被禁止IP
    DROP       tcp  --  10.211.55.3          172.17.0.5           tcp dpt:80
    ACCEPT     tcp  --  0.0.0.0/0            172.17.0.5           tcp dpt:80
    

Docker容器的数据管理

  • Docker容器的数据卷
  • Docker的数据卷容器
  • Docker数据卷的备份与还原
Docker容器的数据卷
  • 什么是数据卷

    • 数据卷是经过独特设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问
    • 数据卷设计的目的,在于数据的永久化,它完全独立于容器的生存周期,因此,Docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理
  • 数据卷的特点

    • 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中
    • 数据卷可以在容器之间共享和重用
    • 可以对数据卷里的内容直接进行修改
    • 数据卷的变化不会影响镜像的更新
    • 卷会一直存在,即使挂载数据卷的容器已经被删除
  • 为容器添加数据卷

    sudo docker run -v ~/container_data:/data -it ubuntu /bin/bash
    
  • 为数据卷添加访问权限

    sudo docker run -v ~/datavolume:/data:ro -it unbuntu /bin/bash # 只读
    
  • 使用Dokerfile构建包含数据卷的镜像

    VOLUME ["/data"]
    
Docker的数据卷容器
  • 什么是数据卷容器

    命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器

  • 挂载数据卷容器的方法

    docker run --volumes-from [CONTAINER NAME]
    
数据卷的备份和还原
  • 数据备份方法

    docker run --volumes-from [container name] -v $(pwd):/backup ubuntu
    tar cvf/backup/backup.tar [container data volume]
    
    docker run --volumes-from dvt5 -v ~/backup:/backup --name dvt10 ubuntu tar cvf /backup/dvt5.tar /datavolume1
    
    ls backup
    
  • 数据还原

    docker run --volumes-from [container name] -v $(pwd):/backup ubuntu
    tar xvf /backup/backup.tar [container data volume]
    

Docker容器的跨主机连接

  • 使用网桥实现跨主机容器连接
  • 使用Open vSwitch实现跨主机容器连接
  • 使用weave实现跨主机容器连接
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容