操作Docker容器

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

启动容器:

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

新建并启动:主要命令为 docker run

docker run ubuntu:18.04 /bin/echo 'Hello world'

如果镜像存在就直接启动了,如果不存在就是自动从官方仓库拉取下载之后并启动,我本机是有这个镜像,直接就输出 Hello world 了。

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

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

启动-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开。在交互模式下,可以通过所有创建的终端来输入命令。

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

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

启动已终止容器Docker container start  (或者直接docker start)

停止和关闭是stop和restar

后台运行

更多时候,需要让docker在后台运行而不是直接把执行结果输出在当前宿主机下,通过-d参数实现。

例子:

不使用-d参数

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

容器会把输出的结果(STDOUT)打印到宿主机上面,直接强制退出的话,容器就退出了。

如果使用-d的话

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

9a615ec487e9dfd4d246d391fb804e786610a45239cda2e8687e43a70580566d

不会有输出,就直接输出容器的id,此时容器会在后台运行并不会把输出结果(STDOUT)打印到宿主机上面(输出结果可以用docker logs 查看)

使用-d 参数启动后会返回一个唯一的id,也可以通过docker container ls命令来查看容器信息。

进入容器

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

某些时候需要进入容器进行操作,包括使用docker attach命令或者docker exec 命令,推荐使用exec,因为attach可能导致容器退出。

attach命令

docker run -dit ubuntu

docker container ls

docker attach 655bdc811cd8

此时已经进入了终端 exit,后容器就会直接停止,可以通过docker container ls再看下,发现退出了。

exec命令

-i -t 参数,docker exec 后边可以跟多个参数,这里是-i -t参数。(交互+伪终端)

exit退出后不会跟attach一样导致容器直接也退出了。

导出和导入容器

导出:docker export

例子:

docker container ls -a

docker export 0e172d70f90e > ubuntu.tar

那个红色的就是容器导出来的快照文件。

导入快照 docker import

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

也可以通过指定 URL 或者某个目录来导入

docker import http://example.com/exampleimage.tgz example/imagerepo

ps:用户即可以使用docker load 来导入镜像存储文件到本地镜像库,也可以使用docker import来导入一个容器快照到本地镜像库。区别是容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也大。从容器快照文件导入是可以重新制定标签等元数据信息。

删除容器

Docker container rm删除终止状态的容器。如果是删除运行中的容器 可以添加-f,Docker会发送SIGKILL信号给容器。如果是一次性清理所有终止状态的容器可以直接

docker container prune

操作Docker容器相关推荐

  1. 操作 Docker 容器

    操作 Docker 容器 容器是 Docker 又一核心概念. 简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境.对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他 ...

  2. 为什么Kubernetes要引入pod的概念,而不直接操作Docker容器

    首先我们要明确一个概念,Kubernetes并不是只支持Docker这一个容器运行时,通过我的另一篇文章什么是Kubernetes的CRI-容器运行时接口介绍的内容,我们知道Kubernetes通过C ...

  3. Docker容器虚拟化技术---Docker安装和操作1

    一.Docker安装 Docker在主流的操作系统和云平台上都可以使用,包括Linux操作 系统(如Ubuntu.Debian.CentOS.Redhat等).MacOS操作系统和 Windows操作 ...

  4. 【云原生】Docker容器详细讲解

    前言 大家好,本文是对 Docker 容器的详细讲解,讲解了如何启动容器.进入容器,以及操作容器的命令.希望对大家有所帮助~ 目录 前言 一.Docker 容器 - 操作 Docker 容器 1.启动 ...

  5. Docker:镜像操作和容器操作

    镜像操作 列出镜像: $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest 0a6b ...

  6. Docker selenium自动化 - 使用python操作docker,python运行、启用、停用和查询容器实例演示

    Docker selenium 自动化 - 使用 Python 操作 docker 运行.启用.停用和查询容器实例演示 第一章:Python 操作 docker ① python 运行 docker ...

  7. Docker容器学习梳理--日常操作总结

    使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands:attach Attach t ...

  8. docker 容器保存为镜像_Docker容器和镜像操作

    前言 Docker 容器和镜像操作,记录下来! 容器 创建一个新的容器(ubuntu)并启动 $ docker run -dit --name ubuntu ubuntu 在容器内执行命令(容器在后台 ...

  9. Docker容器的简单操作及应用部署

    1.什么是虚拟化         虚拟化(Virtualization)是一种资源管理技术 ,虚拟化技术种类很多,例如:软件虚拟化.硬件虚拟化.内存虚拟化.网络虚拟化(vip).桌面虚拟化.服务虚拟化 ...

最新文章

  1. 【MATLAB】函数句柄
  2. Python 入门篇-最新版python3.7.2的安装。
  3. loadrunner通过使用libmysql.dll完成mysql的测试
  4. 为啥 Response.Write 后,View就不渲染了?
  5. php 单例模式有什么缺点_PHP的完整形式是什么?
  6. java基础 ArrayList集合基本方法演示
  7. Socket简单介绍(通过NSStream)
  8. JavaScript DOM操作总结
  9. python方法_详细解读Python中的__init__()方法
  10. 在嵌入式uClibc上移植valgrind
  11. java多线程join()方法原理详解
  12. 关于SQLyog的破解注册码
  13. python中gm11_python GM11
  14. MBR分区表详解(SD卡)
  15. SCI论文撰写——Conclusion
  16. 杭州考驾照-2017.4
  17. 获取Windows操作系统版本和位数
  18. 7种将字符串反转的 Java 方法
  19. 操作系统考研复习——第四章(文件管理)
  20. 对struct cred新理解

热门文章

  1. ES6简单总结(搭配简单的讲解和小案例)
  2. 30.IntellJ Idea 导入已存在的Maven项目
  3. Shuttle ESB实现消息推送
  4. Redis启动多端口,运行多实例(转)
  5. java读取XML文件的四种方式
  6. Java parallel control
  7. 【Unity技巧】制作一个简单的NPC
  8. keta-custom DWZ validationEng IE 下表单重复提交BUG原因及修复方法
  9. Nginx版本无缝升级
  10. [转]关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决...