docker 容器

docker 容器(container)类似于一个轻量级的沙箱,docker 利用容器来运行和隔离应用。
容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是互相隔离,互不可见的。
可以把容器看做一个简易版的 linux 系统环境(包括 root 用户权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序打包而成的应用盒子。
镜像自身是只读的。容器从镜像启动的时候,docker会在镜像的最上层创建一个可写成,镜像本身保持不变。



创建容器

>> docker create centos:latest      #创建centos容器
>> docker start  centos_ID          #启动centos容器
>> docker stop   centos_ID          #停止centos容器

新建并启动容器(启动容器有两种方式)

(1)、基于镜像新建一个容器并启动;docker create;docker start。前面两条命令等价于docker run
(2)、将在终止状态的容器重新启动;docker start
   例如,下面的命令输出一个'Hello World',之后容器自动终止:
>> docker run centos /bin/echo 'Hello World !!!'

当利用docker run来创建并启动容器时,Docker在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个IP地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

守护态运行 -d

>> docker run -d centos:latest /bin/bash -c "while true;do echo hello world;sleep 1;done"
>> docker logs container_id    #查看docker输出的信息

终止容器

>> docker stop container_ID         #停止容器
>> docker restart container_ID      #重启容器
>> docker start container_ID        #启动容器
>> docker kill container_ID         #强制杀死容器
>> docker ps -a -q                  #只显示出所有容器的ID

进入容器(attach,exec,nsenter)
在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息。某些时候如果需要进入容器进行操作,有多种方法

>> docker attach
>> docker exec
>> nsenter

attach 命令

>> docker run -itd centos
>> docker ps -a
>> docker attach container_ID

exec 命令

可以直接在容器内运行命令。例如进入到刚创建的容器,并启动一个bash
>> docker exec -ti 36ba269d463d /bin/bash
>> ps -ef  | grep bash          #如果多增加一个终端,就可以看到多出一个bash

nsenter 工具

nsenter工具在util-linux包中,下面为源码安装
>> cd /tmp ;
>> wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz
>> tar zxf util-linux-2.24.tar.gz
>> ./configure --without-ncurses
>> make nsenter && cp nsenter /usr/local/bin

获取进行PID,并且通过这个PID,连接容器

>> PID=$(docker inspect --format "{{ .State.Pid }}" container_ID)
>> nsenter --target $PID --mount --uts --ipc --net --pid

删除容器

>> docker rm container_ID      #删除容器
>> docker rm -f container_ID   #强制删除正在运行中的容器

导入和导出容器

导出容器

-只导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令

格式为 docker export CONTAINER
>> docker export container_ID > /tmp/centos.tar
   可将这个文件传输到其他机器上,在其他机器上通过导入命令实现容器的迁移

导入容器

   导出的文件又可以使用docker images命令导入,成为镜像
>> cat centos.tar | docker import - centps:1
>> docker load    命令来导入镜像存储文件到本地的镜像库
>> docker import  命令来导入一个容器快照到本地镜像库

区别:

  • 容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态)
  • 镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息
时间: 2025-01-20 22:08:02

docker 容器的相关文章

五步轻松实施Docker容器技术

  随着Docker在云计算市场中领先地位的日益稳固,容器技术也成为了一种主流技术.为了对用户的应用程序使用容器技术,可遵循以下五个步骤. Docker容器技术已在云计算市场中风靡一时了,而众多主流供应商则面临着技术落后的窘境.那么,是什么让Docker容器技术变得如此受欢迎呢?对于刚入门的新手来说,容器技术可实现不同云计算之间应用程序的可移植性,以及提供了一个把应用程序拆分为分布式组件的方法.此外,用户还可以管理和扩展这些容器成为集群. 在企业用户准备把应用程序迁往容器之前,理解应用程序的迁移

基于微服务和Docker容器技术的PaaS云平台架构设计

本文讲的是基于微服务和Docker容器技术的PaaS云平台架构设计[编者的话]在系统架构上,PaaS云平台主要分为微服务架构.Docker容器技术.DveOps三部分,这篇文章重点介绍微服务架构的实施. [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训以容器存储和网络为主题,包括:Docker Plugin.Docker storage driver.Docker Volume Pulgin.Kubernetes Storage机制.容器网络实现原理和模型.Docker网络实现.网络插件.

如何在Ubuntu14.04的Docker容器中运行OpenVPN?

本文讲的是如何在Ubuntu14.04的Docker容器中运行OpenVPN?,[编者的话]本文来自DigitalOcean,DigitalOcean是美国的虚拟专用服务器提供商,本文主要介绍了如何在Ubuntu14.04上创建使用OpenVPN Docker容器. 介绍 本教程将介绍如何使用Docker来设置和运行OpenVPN容器. OpenVPN提供了一种方法来创建TLS加密(SSL的演进)的虚拟专用网络(VPN).它可以防止网络流量被窃取和中间人(MITM)攻击.专用网络可以用来安全地连

如何解决Docker容器和宿主机时间同步问题

在使用了Docker以后,大家可能遇到的一个问题就是Docker容器的时间和宿主机时间不同步.造成这个问题的主要原因是宿主机设置了时区,而Docker容器并且设置,导致两者相差8小时. 接下来,我们通过在在宿主机和容器里分别执行date命令来看下实际的情况. 在宿主机执行date命令的结果:  进入到容器里,再执行date命令的结果: docker exec -it <containerid> /bin/sh date 执行后的结果为: 从截图来看,我们发现相差了8个小时.那么如何解决这个问

通过Docker容器运行持续集成/持续部署

本文讲的是通过Docker容器运行持续集成/持续部署,[编者的话] 对于Docker主流的应用场景:持续集成和持续部署(CI/CD)大家也许并不陌生.这篇文章从独特的视角阐述了如何利用各种云平台构建属于自己的CI/CD容器,笔者还自己扩展了Gitlab CI引擎,对CI感兴趣的同学对这个文章应该很感兴趣. 我曾经使用Docker了一段时间,在过去的一年里伴随着众多的Docker容器涌入,帮助用户们更容易的部署Docker容器到生产环境中.一些工具是第三方公司提供,当然也包括Docker公司自己的

Docker 容器健康检查机制

在分布式系统中,经常需要利用健康检查机制来检查服务的可用性,防止其他服务调用时出现异常. 对于容器而言,最简单的健康检查是进程级的健康检查,即检验进程是否存活.Docker Daemon会自动监控容器中的PID1进程,如果docker run命令中指明了restart policy,可以根据策略自动重启已结束的容器.在很多实际场景下,仅使用进程级健康检查机制还远远不够.比如,容器进程虽然依旧运行却由于应用死锁无法继续响应用户请求,这样的问题是无法通过进程监控发现的. 在Kubernetes提供了

学习Docker容器网络模型 - 搭建分布式Zookeeper集群

ZooKeeper是一个流行的分布式协调服务.它提供了两种不同的部署方式:单机模式和分布式模式.其中单机模式的部署非常简单,网上也有很多资料,我们今天会利用Docker搭建分布式Zookeeper集群,并来帮助大家熟悉Docker中容器网络模型的使用. ZooKeeper集群中所有的节点作为一个整体对分布式应用提供服务.节点中有两个的角色:Leader和Follower.在整个集群运行过程中,只有一个Leader,其他节点的都是Follower,如果ZK集群在运行过程中Leader出了问题,系统

Docker 容器内存监控原理及应用_docker

Docker 容器内存监控 linux内存监控 要明白docker容器内存是如何计算的,首先要明白linux中内存的相关概念. 使用free命令可以查看当前内存使用情况. [root@localhost ~]$ free total used free shared buffers cached Mem: 264420684 213853512 50567172 71822688 2095364 175733516 -/+ buffers/cache: 36024632 228396052 Sw

Docker 容器虚拟化的实用技巧总结_docker

服务器虚拟化指的是在操作系统与硬件之间加一层,叫做hypervisor层,对下控制硬件,对上承载操作系统,操作系统os以文件形式封装运行,称为虚拟机,主要解决的问题是硬件利用率和灵活性的问题,常见的方案为vmware vsphere,xen,kvm,hyper-v..容器虚拟化指的是在os上将应用打包以进程的形式运行,应用和应用间非完全隔离,但是更轻量,效率高,lxc和docker都可以称为容器级虚拟化,区别在于docker可以理解为经过精美封装过更加好用的lxc,有更好的接口和更完善的配套.

Docker容器配置Nginx实例分享_docker

作为目前最火的应用,Docker 确实存在着其独到之处,无论是程序猿还是运维都应该听说过 Docker 的大名,Docker 已经走过了许多的坑,目前最新版本是 v1.11.0 版本,应该说是完全能承载开发使用和运维监控,这款工具能帮助我们高效的打包.发布和运行承载着应用程序的容器系统.而且收集日志.帮助 App 的快速开发都有很大作用. 容器和虚拟机,经常是被拿出来对比的两款产品,实际上两者有着根本的差别,虚拟机是完全模拟了一台真实计算机,在上面运行的系统可能或者不可能知道自己运行在虚拟化环境