Docker管理之碎片知识整理小结

目录
  • 一、概述
  • 二、应用示例
    • 2.1、Docker容器隔离之Namespace
    • 2.2、Docker之自由限制cgroup
    • 2.3、给运行中的容器设置端口映射
    • 2.4、修改运行中docker容器中的内容
    • 2.5、Docker容器迁移到其他服务器
    • 2.6、查看docker镜像中文件
    • 2.7、运行容器:docker run常用选项

一、概述

本文旨在汇总整理Docker日常管理之知识碎片,以便日后回顾查看参考。

二、应用示例

2.1、Docker容器隔离之Namespace

Namespace:是容器虚拟化依赖的Linux 主要核心技术,用于各容器之间的隔离。主要通过以下六项隔离技术来实现:有两个伪文件系统:/proc和/sys/

UTS: 允许每个container拥有独立的hostname(主机名)和domainname(域名),使其在网络上可以被视作一个独立的节点而非Host上的一个进程。

IPC:contaner中进程交互还是采用linux常见的进程间交互方法,包括常见的信号量,消息队列和共享内存。container的进程间交互实际上还是host上具有相同pid中的进程交互。

● PID:不同用户的进程就是通过pid namesapce隔离开的,且不同namespace中可以有相同pid。所有的LXC(linux containers)进程在docker中的父进程为docker进程,每个LXC进程具有不同的namespace。

● NET:

● MNT:文件系统的挂载点。

● USRE:每个container可以有不同的user和groupid,也就是说可以在container内部用container内部的用户执行程序而非Host上的用户。

2.2、Docker之自由限制cgroup

eg1:docker run -it -m 200M --memory-swap 300M centos //-m或–memory:设置内存的使用限额,–memory-swap:设置swap(交换分区)的使用限额

eg2: docker run -it --name containerB -c 512 centos //containerB,cpu权重限制为512;-c或者–cpu-shares设置容器实验cpu的权重。如果不设置默认是1024

eg3: docker run -it --name testA --device-write-bps /dev/sda:30MB centos //容器testA限制该磁盘每秒写入的数量为为30MB;

其他参数:

-bps:每秒读写的数据量。byte per second
-iops:每秒io的次数。 io per second

--device-read-bps:设置读取设备的bps
--device-write-bps:设置写入设备的bps

--device-read-iops:设置读取设备的iops
--device-write-iops:设置写入设备的iops

2.3、给运行中的容器设置端口映射

有时我们想不停止容器的情况下,调整容器映射端口,那怎样在容器使用中,映射容器内应用的服务端口到本机宿主机器呢?

当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -p 参数两种方式来指定端口映射。使用 -P(大) 参数时,Docker 会随机映射一个宿主本地端口到内部容器开放的网络端口上;使用 -p(小) 参数时,可以指定要映射的端口,并且在一个指定的端口上只可以绑定一个容器。支持的格式有:

IP:HostPort:ContainerPort
IP:ContainerPort
HostPort:ContainerPort

下面我们来分别举例说明:

eg1:docker run -d -P nginx //docker ps查看会发现,宿主机本地的随机分配了一个 3**** 端口被映射到了容器的 80 端口上,在本机浏览器访问 http://localhost:3**** 就会出现 nginx 欢迎页面

eg2:docker run -d -p 8080:80 nginx //使用 docker ps 可看到,本地主机的 8080 端口被映射到了容器的 80 端口

验证:命令格式:docker port CONTAINER [PRIVATE_PORT[/PROTO]]

使用 docker inspect + 容器ID 获取容器的具体信息:

eg3:给运行中的容器添加映射端口

docker inspect \`container_name` | grep IPAddress   //将container_name 换成实际环境中的容器名,获得容器的IP地址

iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000 //将容器的8000端口映射到docker主机的8001端口

或:
docker commit container_id foo/live  //提交一个运行中的容器为镜像

docker run -d -p 8000:80 foo/live /bin/bash  //运行镜像并添加端口映射,宿主8000到容器80,

2.4、修改运行中docker容器中的内容

docker中宿主机与容器(container)互相拷贝传递文件

docker cp mycontainer:/opt/testnew/file.txt /opt/test/  //从容器拷贝文件到宿主机

docker cp /opt/test/file.txt mycontainer:/opt/testnew/   //从宿主机拷贝文件到容器

sudo docker commit -m "描述内容" -a "author name" 32555789dd00 aipaper/devinz83:v2  //-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息

docker images  //验证
REPOSITORY									TAG
aipaper/devinz83							v2

#修改容器配置文件yaml
vi /opt/docker/yml/docker-compose-resty-redis.yml

docker stack deploy --compose-file=/opt/docker/yml/docker-compose-resty-redis.yml resty_redis  //使用新修改后的镜像部署了docker应用

注:不管容器有没有启动,docker cp都会生效;完成后,使用 docker commit 命令来提交更新后的副本。

之后更新容器的yml文件,更新image为新的对象:

2.5、Docker容器迁移到其他服务器

有时我们会由于各种原因,比如硬件升级、数据中心变化,资源限制等因素,需要将当前docker容器所在迁移到其他资源池或主机。

1)导出和导入容器:

导出容器:即从容器的文件系统创建压缩文件,导出的文件保存为“gzip”文件;之后通过文件传输工具(如scp或rsync)将压缩文件复制到新服务器。再在新服务器中,将这个gzip文件导入到一个新容器中。

docker export container-name | gzip > container-name.gz

zcat container-name.gz | docker import - container-name

docker run -d container-name /bin/bash  //使用“docker run”命令访问在新服务器中创建的新容器

:导出容器工具的一个缺点是,它不导出容器的端口和变量,也不导出包含容器的底层数据。当尝试在另一台服务器中加载容器时,这可能会导致错误。对此,我们可另考虑使用Docker镜像迁移来将容器从一台服务器迁移到另一台服务器。

2)容器镜像迁移:

即我们迁移容器关联到的镜像到新的资源池,这也是将Docker容器迁移到另一台服务器的最常用方法。对于要迁移的容器,首先使用“Docker commit”命令将其Docker镜像保存到压缩文件中。

docker commit container-id image-name  //生成的镜像将被压缩

之后将上述镜像上传到新服务器上,在新服务器中,将使用“docker run”创建一个新容器。
使用此方法,数据卷不会被迁移,但它会保留,在容器内创建的应用程序的数据。

3)先保存,再加载镜像

docker镜像是应用程序的代码、库、配置文件等的包。Docker容器是由这些镜像创建的。

可以使用“docker save”压缩镜像并将其迁移到新服务器。之后在新服务器中,使用“docker load”将压缩镜像文件用于创建新镜像。

docker save image-name > image-name.tar

cat image-name.tar | docker load

4)迁移数据卷:

Docker容器中的数据卷是共享目录,其中包含特定于容器的数据。卷中的数据是持久的,在容器重新创建期间不会丢失。

使用导出或提交工具将Docker容器或镜像从一台服务器迁移到另一台服务器时,不会迁移基础数据卷。在这种情况下,包含数据的目录将手动迁移到新服务器。然后在新服务器创建容器,引用该目录作为其数据卷。

另一个简单的方法是通过在“docker run”命令中传递“-volumes from”参数来备份和恢复数据卷。

docker run --rm --volumes-from datavolume-name -v $(pwd):/backup image-name tar cvf backup.tar /path-to-datavolume

docker run --rm --volumes-from datavolume-name -v $(pwd):/backup image-name bash -c "cd /path-to-datavolume && tar xvf /backup/backup.tar --strip 1"

上述命令中:datavolume-name是/path/to/volume,此命令提供数据卷的备份。要指定工作目录,还可以指定-w/backup。在/backup文件夹中生成的备份可以通过scp或ftp工具复制到新服务器。然后提取复制的备份并将其还原到新容器中的数据卷中。

5)迁移整个Docker容器:

以上方法仅适用于单个容器。但是将所有容器都要从一台服务器迁移到另一台服务器的情况下,我们采用另一种方法。此方法包括将整个docker目录(“/var/lib/docker”)复制到新服务器。为了使这种方法成功,需要确定几个关键点。

1、保留文件夹的权限和所有权。
2、迁移前停止Docker服务。
3、验证两台服务器中的Docker版本是否兼容。
4、迁移前后验证容器列表和功能。
5、环境变量和其他配置文件的路径。
6、如果此方法由于任何故障而无法工作,我们将配置自定义脚本以将容器和镜像从一台服务器迁移到另一台服务器。

2.6、查看docker镜像中文件

docker attach ContainerID  //需要对应的container是运行中的,不处于stop状态

##对于未运行的,可以把Docker镜像中的文件复制到宿主来看,示例如下
sudo docker cp nginx-ubuntu-container:/etc/apt/sources.list ~/Documents/

2.7、运行容器:docker run常用选项

语法:docker run [option] 镜像名 [向启动容器中传入的命令]

常用可选参数说明:

  • -i 表示以“交互模式”运行容器
  • -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。
  • --name 为创建的容器命名
  • -v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上。
  • -d 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
  • -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射
  • -e 为容器设置环境变量
  • --network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同

到此这篇关于Docker管理之碎片知识整理小结的文章就介绍到这了,更多相关Docker管理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker 数据管理Named volume详解

    Docker数据管理:Named volume Docker中可以使用Named volume和data container来进行数据的管理. 单一Container的使用Helloworld Step 1:创建一个Named Volume 事前确认volume的信息,没有VOLUME存在 [root@host88 volumes]# docker volume ls DRIVER VOLUME NAME [root@host88 volumes]# 确认/var/lib/docker/volu

  • 分享8个基本的Docker容器管理命令

    前言: 在这篇文章中,我们将带你学习 8 个基本的 Docker 容器命令,它们操控着 Docker 容器的基本活动,例如 运行run. 列举list. 停止stop. 查看历史纪录logs. 删除delete 等等.文末福利! 利用这 8 个命令可以学习 Docker 容器的基本管理方式.这是一个为 Docker 初学者准备的,带有示范命令输出的指南. 在这篇文章中,我们将带你学习 8 个基本的 Docker 容器命令,它们操控着 Docker 容器的基本活动,例如 运行run. 列举list

  • 详解Docker Volume 之权限管理

    Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性: 持久化数据与容器的生命周期解耦:在容器删除之后数据卷中的内容可以保持.Docker 1.9之后引进的named volume(命名文件卷)可以更加方便地管理数据卷的生命周期:数据卷可以被独立地创建和删除. 数据卷可以用于实现容器之间的数据共享 可以支持不同类型的数据存储实现 Docker缺省提供了对宿主机本地文件卷的支持,可以将宿主机的目录挂载到容器之中.由于没有容器分

  • 详解Docker 数据卷管理

    Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume).数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享. 数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像.使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统. 本节中,我们需要依次完成下面几项任务: 1.创建数据卷 2.管理数据卷权限 3.挂载宿主机文件 4.使用数据卷容器共享数据 5.数据卷备份

  • Docker容器的网络管理和网络隔离的实现

    一.Docker网络的管理 1.Docker容器的方式 1)Docker访问外网 Docker容器连接到宿主机的Docker0网桥访问外网:默认自动将docker0网桥添加到docker容器中. 2)容器和容器之间通信 需要管理员创建网桥:将不同的容器连接到网桥上实现容器和容器之间相互访问. 3)外部网络访问容器 通过端口映射或者同步docker宿主机网络配置实现通信. 2.Docker容器网络通信的模式 1)bridge 默认容器访问外网通信使用:依赖docker0网桥. 2)none 需要给

  • 浅谈Docker基础之数据管理

    用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作.容器中管理数据主要有两种方式:数据卷(Data Volumes),数据卷容器(Data Volume Containers). 数据卷 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性: 1.数据卷可以在容器之间共享和重用. 2.对数据卷的更改会立即生效. 3.对数据卷的更新不会影响镜像. 4.数据卷会一直

  • Docker管理之碎片知识整理小结

    目录 一.概述 二.应用示例 2.1.Docker容器隔离之Namespace 2.2.Docker之自由限制cgroup 2.3.给运行中的容器设置端口映射 2.4.修改运行中docker容器中的内容 2.5.Docker容器迁移到其他服务器 2.6.查看docker镜像中文件 2.7.运行容器:docker run常用选项 一.概述 本文旨在汇总整理Docker日常管理之知识碎片,以便日后回顾查看参考. 二.应用示例 2.1.Docker容器隔离之Namespace Namespace:是容

  • asp知识整理笔记3(问答模式)

    继上两篇<asp知识整理笔记1>和<asp知识整理笔记2>,<asp知识整理笔记3>新鲜出炉: 17.问题:在ASP中使用ADO的AddNew方法和直接使用"Insert into..."语句有何不同?哪种方式更好? 答:ADO的AddNew方法只是将"Insert into "语句封装了起来,所以,当对大量数据进行操作的时候,直接使用SQL语句将会大大加快存取数据的速度,因为它减少了ADO的"翻译"时间,由于

  • 10大HBase常见运维工具整理小结

    摘要:HBase自带许多运维工具,为用户提供管理.分析.修复和调试功能.本文将列举一些常用HBase工具,开发人员和运维人员可以参考本文内容,利用这些工具对HBase进行日常管理和运维. HBase组件介绍 HBase作为当前比较热门和广泛使用的NoSQL数据库,由于本身设计架构和流程上比较复杂,对大数据经验较少的运维人员门槛较高,本文对当前HBase上已有的工具做一些介绍以及总结. 写在前面的说明: 1) 由于HBase不同版本间的差异性较大(如HBase2.x上移走了hbck工具),本文使用

  • 数据库索引的知识点整理小结,你所需要了解的都在这儿了

    数据库索引,相信大家都不陌生吧. 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.作为辅助查询的工具,合理的设计索引能很大程度上减轻db的查询压力,db我们都知道,是项目最核心也是最薄弱的地方,如果压力太大很容易产生故障,造成难以预计的影响.所以,不管是日常开发还是面试,索引这一块知识体系都是必须掌握的. 当然,虽说是必须掌握,但索引的知识点很多,很多初学者经常会遗漏,这也是我为什么想写这篇知识点总结的原因,既是给读者的分享,也是给自己一次全面的复习,

  • C语言逻辑运算符知识整理

    在高中数学中,我们学过逻辑运算,例如p为真命题,q就假命题,那么"p且q"为假,"p或q"为真,"非q"为真. 在C语言中,也有类似的逻辑运算: 运算符 说明 结合性 举例 && 与运算,双目,对应数学中的"且" 左结合 1&&0.(9>3)&&(b>a) || 或运算,双目 左结合 1||0.(9>3)||(b>a) ! 非运算.单目 右结合 !a.!(

  • asp知识整理笔记4(问答模式)

    继前几篇篇<asp知识整理笔记1>和<asp知识整理笔记2>,<asp知识整理笔记3>新鲜出炉: 23.问题:在ASP文件中读取HTML的表单字段有几种方法? 答:Request对象除了可以用来读取附带在网址后面的参数以外,也可以读取HTML表单字段的内容,经常使用的语法结构如下: < Form name =Formname method="Get|Post"Action="URL">< Form > 其中

  • js事件(Event)知识整理

    鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemove 如果按下鼠标上的设备(左键,右键,滚轮--),则触发mousedown 当设备弹起的时候触发mouseup 目标元素的滚动条发生移动时(滚动滚轮/拖动滚动条..)触发scroll 滚动滚轮触发mousewheel,这个要区别于scroll 鼠标移出元素的那一刻,触发mouseout 事件注册 平常我们绑定事件的时候用dom.onxxxx=function(){}的形式

  • webpack4.0打包优化策略整理小结

    本文介绍了webpack4.0打包优化策略整理小结,分享给大家,具体如下: webapck4 新特性介绍-参考资料 当前依赖包的版本 1.优化loader配置 1.1 缩小文件匹配范围(include/exclude) 通过排除node_modules下的文件 从而缩小了loader加载搜索范围 高概率命中文件 module: { rules: [ { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/, // 排除不处理的目录

  • vue v-for 使用问题整理小结

    今天使用v-for指令的时候遇到一个错误 [Vue warn]: Error in render: "TypeError: Cannot read property 'children' of undefined" 页面使用代码 <template v-for="(c,i) in modelList.Course.children"> <div :key="i" class="course-block">

  • Pandas中DataFrame基本函数整理(小结)

    构造函数 DataFrame([data, index, columns, dtype, copy]) #构造数据框 属性和数据 DataFrame.axes #index: 行标签:columns: 列标签 DataFrame.as_matrix([columns]) #转换为矩阵 DataFrame.dtypes #返回数据的类型 DataFrame.ftypes #返回每一列的 数据类型float64:dense DataFrame.get_dtype_counts() #返回数据框数据类

随机推荐