在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、概述本文旨在汇总整理Docker日常管理之知识碎片,以便日后回顾查看参考。 二、应用示例2.1、Docker容器隔离之NamespaceNamespace:是容器虚拟化依赖的Linux 主要核心技术,用于各容器之间的隔离。主要通过以下六项隔离技术来实现:有两个伪文件系统:/proc和/sys/
2.2、Docker之自由限制cgroupeg1: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; 其他参数:
2.3、给运行中的容器设置端口映射有时我们想不停止容器的情况下,调整容器映射端口,那怎样在容器使用中,映射容器内应用的服务端口到本机宿主机器呢? 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -p 参数两种方式来指定端口映射。使用 -P(大) 参数时,Docker 会随机映射一个宿主本地端口到内部容器开放的网络端口上;使用 -p(小) 参数时,可以指定要映射的端口,并且在一个指定的端口上只可以绑定一个容器。支持的格式有:
下面我们来分别举例说明: 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”)复制到新服务器。为了使这种方法成功,需要确定几个关键点。
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] 镜像名 [向启动容器中传入的命令] 常用可选参数说明:
到此这篇关于Docker管理之碎片知识整理小结的文章就介绍到这了,更多相关Docker管理内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论