Docker学习之Container容器的具体使用

容器是 Docker 又一核心概念。

简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。

关于容器的操作主要有:

  • 创建
  • 启动
  • 停止
  • 导入导出
  • 删除
  • 等等

启动容器

有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态( stopped )的容器重新启动。
因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。

新建并启动

所需要的命令主要为 docker run

这跟在本地直接执行 /bin/echo 'hello world' 几乎感觉不出任何区别。

下面的命令则启动一个 bash 终端,允许用户进行交互,如:

docker run -t -i ubuntu:18.04 /bin/bash

其中, -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。

那么当我们用docker run命令来创建并启动容器的时候,会发生哪些事儿呢?

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

所以当我们通过bash进入终端的时候,其实就是进入另一个系统。

启动已终止容器

可以利用 docker container start 命令,直接将一个已经终止的容器启动运行。

容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其它的资源。可以在伪终端中利用 ps 或 top 来查看进程信息。

可见,容器中仅运行了指定的 bash 应用。这种特点使得 Docker 对资源的利用率极高,是货真价实的轻量级虚拟化。

后台运行

更多的时候,我们会在后台运行容器,这时可以加上-d参数来实现。下面是每个1秒打印一次hello world。

docker run ubuntu:18.04 /bin/sh -c "while true; do echo hello world;sleep 1;done"

如果使用了 -d 参数运行容器,则就是在后台进行运行:

注: 容器是否会长久运行,是和 docker run 指定的命令有关,和 -d 参数无关。使用 -d 参数启动后会返回一个唯一的 id,也可以通过 docker container ls命令来查看容器信息。

要获取容器的输出信息,可以通过 docker container logs 命令。

docker container logs [container ID or NAMES]
hello world
hello world
hello world
. . .

终止容器

可以使用 docker container stop或者docker stop 容器id 来终止一个运行中的容器。此外,当 Docker 容器中指定的应用终结时,容器也自动终止。

终止状态的容器可以用 docker container ls -a 命令看到。例如:

处于终止状态的容器,可以通过 docker container start 命令来重新启动。

此外, docker container restart 命令会将一个运行态的容器终止,然后再重新启动它。

进入容器

在使用 -d 参数时,容器启动后会进入后台。

某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker exec 命令,推荐大家使用 docker exec 命令,原因会在下面说明。

attach 命令

注意: 如果从这个 stdin 中 exit,会导致容器的停止。

exec 命令

docker exec 后边可以跟多个参数,这里主要说明 -i -t 参数。

只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。

当 -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。

如果从这个 stdin 中 exit,不会导致容器的停止。这就是为什么推荐大家使用docker exec 的原因。

导出和导入容器

导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

这样将导出容器快照到本地文件。

导入容器

可以使用 docker import 从容器快照文件中再导入为镜像,例如:

cat ubuntu.tar | docker import - test/ubuntu:v1.0

删除容器

可以使用 docker container rm或者docker rm 容器id 来删除一个处于终止状态的容器。例如:

注:删除容器删除需要stop容器

清理所有处于终止状态的容器

用 docker container ls -a 命令可以查看所有已经创建的包括终止状态的容器,如果数量太多要一个个删除可能会很麻烦,用下面的命令可以清理掉所有处于终止状态的容器。

$ docker container prune

这个操作比较危险,慎用。以上就是关于docker容器的常见操作了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • docker 动态映射运行的container端口实例详解

    docker动态映射运行的container端口,最近做项目,对于docker动态映射运行的container端口的资料有必要记录下,以便以后在用到, Docker自带了EXPOSE命令,可以通过编写dockerfile加-p参数方便的映射Container内部端口,但是对于已经运行的container,如果你想对外开放一个新的端口,只能编辑dockerfile然后重新build,有点不太方便. 其实docker本身使用了iptables来做端口映射的,所以我们可以通过一些简单的操作来实现动态映

  • Docker学习之Container容器的具体使用

    容器是 Docker 又一核心概念. 简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境.对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用. 关于容器的操作主要有: 创建 启动 停止 导入导出 删除 等等 启动容器 有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态( stopped )的容器重新启动. 因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器. 新建并启动 所需要的命令主要为

  • Docker学习笔记之容器查看启动终止删除的方法

    本文介绍了Docker学习笔记之容器查看启动终止删除的方法,分享给大家,具体如下: 查看 docker ps 主要有些参数要说一下 1. 不加参数,表示查看当前正在运行的容器 2. -a,查看所有容器包括停止状态的容器 3. -l,查看最新创建的容器 4. -n=x,查看最后创建的x个容器 列一下docker ps的结果 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 这些分别代表什么 CONTAINER ID:容器ID,唯一标识容器

  • Docker学习笔记之Weave实现跨主机容器互联

    Docker的原生网络支持非常有限,且没有跨主机的集群网络方案.目前实现Docker网络的开源方案有Weave.Kubernetes.Flannel.Pipework以及SocketPlane等,其中Weave被评价为目前最靠谱的,那么这里就对Weave的基本原理及使用方法做个总结. 简介 Weave是由Zett.io公司开发的,它能够创建一个虚拟网络,用于连接部署在多台主机上的Docker容器,这样容器就像被接入了同一个网络交换机,那些使用网络的应用程序不必去配置端口映射和链接等信息.外部设备

  • Docker如何进入启动容器

    本文介绍了Docker如何进入启动容器,分享给大家,具体如下: 在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作. 这个时候如果需要进入容器进行操作,有多种方法,包括使用官方的attach或exec命令,以及第三方的nsenter工具等. 1.attach命令 attach命令是Docker自带的命令,命令格式为: docker attach [–detach-keys[=[]]] [–no-stdin] [–sig-proxy[=true]] Container

  • 详解Docker学习笔记之搭建一个JAVA Tomcat运行环境

    前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装.部署和升级,非常方便.因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法.更多的玩法还有大规模 web 应用.数据库部署.持续部署.集群.测试环境.面向服务的云计算.虚拟桌面 VDI 等等. 主观的印象:Docker 使用 Go 语言编写,用 cgroup 实现

  • Docker学习笔记之docker入门

    学习的一些疑问 如何热更新镜像(images)?(你可以快速启动或者销毁容器.这种时间几乎是实时的) 如何热更新游戏服? 好处在于各个应用之间环境相互独立,即使某一个容器崩溃也不会影响到其它容器: 每个容器使用端口如何维护?(方法1写在Dockerfile里面,不灵活:方法2在run的时候-p指定): 那这样的话,会存在好多linux用户,相当于每一个容器就要维护一个物理机(虚拟): 需要一套工具来管理维护镜像.容器的操作和状态: 目前主流使用docker都是应用到哪些场景中? 1. docke

  • 详解Docker 端口映射与容器互联

    1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定端口映射.当使用-P(大写P)标记时,Docker会随机映射一个端口到内部容器开放的网络端口(端口范围在Linux系统使用的端口之外,一般都过万): [root@docker ~]# docker run -d --name nginx_1 -P nginx:latest

  • 如何通过DOCKER OVERLAY2目录名查找容器名和容器ID

    目录 通过DOCKER OVERLAY2目录名查找容器名和容器ID DOCKER入门 Docker基础 docker简介 基本概念 利用DockerFile定制镜像 Dockerfile指令详解 保存镜像 总结 通过DOCKER OVERLAY2目录名查找容器名和容器ID 有时候经常会有个别容器占用磁盘空间特别大,这个时候就需要通过docker overlay2 目录名查找对应容器名: 1.首先进入到 /var/lib/docker/overlay2 目录下,查看谁占用的较多 du -s ./*

  • 两种方式创建docker镜像的启动容器时区别介绍(总结篇)

    Docker是建立在Linux内核基础上的,在目前的主流Linux系统中,都已经原生支持了Docker且使用体验也最好,当然,在Windows平台和MacOS系统中也支持Docker,只是需要使用类似Boot2Docker等虚拟化工具来提供Linux支持. 下面重点给大家介绍基于两种创建docker镜像的启动容器时区别,感兴趣的朋友可以跟着小编一起学习! 1.凡是用docker commit生成的镜像启动的时候可以加载一个启动自己应用的脚本,例如: docker run -d -P tomcat

  • Docker中Dockerfile之容器中运行MyEclipse搭建的JavaWeb项目

    这篇文章将讲述如何将上一篇文章中的Javaweb项目制作成Docker的镜像.小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 应用程序在Docker容器中运行和在物理机运行的原理是一样的,所以我们部署这个Javaweb项目到Docker中的步骤应该如下: 服务器支持(这里选择Centos7) 安装Java环境 安装Tomcat环境 将Tomcat根目录下的webapps/ROOT目录下的所有文件(夹)删除 将自己开发的web项目的WebRoot目录下的所有文件(夹)复

随机推荐