操作docker容器
Docker容器时镜像的一个运行实例,而镜像是静态的只读文件,容器带有运行时需要的可写文件层。如果认为虚拟机是模拟运行的一整套操作系统(包括内核、应用运行的环境和其他系统环境)和跑在上面的应用,那么Docker容器就是独立运行的一个(或一组)应用,以及他们必须的运行环境。
1、创建容器
(1)、新建容器:docker create
docker create -it ubuntu:14.04
使用该命令创建的容器处于停止状态,可以使用docker start 命令来启动他。
docker start efeb322b8d67/flamboyant_meitner
(2)、新建并启动容器:docker run
docker run -it ubuntu:14.04 echo 'hello world'
这跟在本地直接运行echo 'hello world'几乎感觉不出任何区别。当利用docker run 来创建并启动容器时,Docker在后台运行的标准操作包括:
①、检查本地是否存在指定镜像,不存在就从公有仓库下载;
②、利用镜像创建一个容器,并启动改容器;
③、分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;
④、从宿主主机配置的网桥接口中桥接一个虚拟接口道容器中;
⑤、从网桥的地址池中配置一个IP地址给容器;
⑥、执行用户指定的应用程序;
⑦、执行完毕后容器自动终止。
下面的命令启动一个bash终端,允许用户进行交互:
其中,-t选项是让Docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。更多的命令选项可以通过man docker-run命令来查看。
在交互模式下,用户可以通过所创建的终端来输入命令。用户可以按Ctrl+d或输入exit命令来退出容器。对于所创建的bash容器,当时用exit命令退出之后,容器就自动处于退出(Exited)状态了。这是因为对docker容器来说,当运行的应用退出后,容器也就没有继续运行的必要了。
某些时候,执行docker run 会报错,因为命令无法正常执行容器会直接退出,此时可以查看退出的错误代码。
①、125:Docker daemon执行出错,例如指定了不支持的Docker命令参数;
②、126:所指定的命令无法执行,例如权限出错。
③、127:容器内命令无法找到。
命令执行后出错,会默认返回错误码。
3、守护态运行
更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加-d参数来实现。
docker run -d ubuntu:14.04 /bin/sh -c "while true;do echo hello world;sleep 1 ;done"
此时,要获取容器的输出信息,可以使用docker logs命令:
docker logs 207dce165b3c
补充:如果是springboot项目,需要查看日志,可以使用参数-v 将容器中的日志目录挂载到宿主机中的指定目录,方便查看。
docker run --name demo(容器名称) -d -p (宿主机端口):(容器端口) -v /data/logs(宿主机目录):/usr/(容器目录,在/usr目录下面) demo(镜像名称)
此时我们便可以在/data/logs(宿主机目录)目录下面查看对应的日志,而不用每次都进入容器中查看了。
4、终止容器:docker stop
可以使用docker stop来终止一个运行中的容器。格式为:docker stop [-t|--time[=10]] [CONTAINER...]。 首先向容器发送SIGTERM信号,等待一段超时时间(默认10秒)之后,再发送SIGKILL信号来终止容器:
docker stop 207dce165b3c
注意:docker kill命令会直接发送SIGKILL信号来强行终止容器。
此外,当Docker容器中指定的应用终止时,容器也会自动终止。
补充:docker restart命令会将一个运行状态的容器先停止,然后在重新启动它:
docker restart 207dce165b3c
5、进入容器
在使用-d参数时,容器启动后会进入后台(守护状态),用户无法看到容器中的信息,也无法进行相关操作。此时可以使用docker attach或docker exec命令,或者第三方的nsenter工具等。
(1)、docker attach命令,其格式为:docker attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER(容器名称或ID)
①、--detach-keys[=[]] :指定退出attach模式的快捷键序列,默认是Ctrl-p ctrl-q;
②、--no-stdin=true|false:是否关闭标准输入,默认是保存打开;
③、--sig-proxy=true|false:是否代理收到的系统信号给应用进程,默认为true。
docker attach 207dce165b3c
注意:使用attach命令并不方便,当多个窗口同时使用attach命令连到同一个容器时,所有窗口都会同步显示,当某个窗口因命令阻塞时,其他窗口也无法执行了。
(2)、docker exec命令(推荐方式)
格式:docker exec [-d | --detach] [--detach-keys[=[]]] [-i | --interactive] [--privileged] [-t | tty] [-u | --user[=USER]] CONTAINER [ARG...]。
重要参数解析:
①、-i,--interactive=true | false:打开标准输入接受用户输入命令,默认为false;
②、--privileged=true | false:是否给执行命令以最高权限,默认为false;
③、-t,--tty=true | false:分配伪终端,默认false;
④、-u,--user=" ":执行命令的用户名或ID。
例如进入某个容器中,并启动一个bash:
docker exec -it b624c19ed822 /bin/bash
6、删除容器
可以使用docker rm命令来删除处于终止或退出状态的容器,其格式为:docker rm [-f | force] [-l | --link] [-v | --volumes] CONTAINER [CONTAINER ...]。
总要参数解析:
①、-f,--force=false:是否强行终止并删除一个运行中的容器;
②、-l,--link=false:删除容器的连接,但保留容器;
③、-v,--volumes=false:删除容器挂载的数据卷。
例如删除指定的容器:
docker rm b624c19ed822
注意:默认情况下,docker rm命令只能删除处于终止或退出状态的容器,并不能删除还处于运行状态的容器。
7、导入导出容器
有时,我们需要将容器从一个系统迁移到另一个系统,此时,可以使用docker的导入导出功能。
(1)、导出容器
导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,都可以使用docker export命令,格式为:docker export [-o | --output[=" "]] CONTAINER。其中,-o选项用来指定导出的tar文件名,也可以直接通过重定向来实现。
docker export -o test_for_run.tar 57e6130011b5
或者
docker export 57e6130011b5 > test_for_run.tar
之后可以将导出的tar文件传输到其他机器上,然后通过导入命令导入到系统中,从而实现容器的迁移。
(2)、导入容器
导出的文件又可以使用docker import命令导入变成镜像,格式为:docker import [-c | --change[=[]]] [m | --message[=MESSAGE]] file |URL|- [REPOSITORY[:TAG]]
用户可以通过-c,--change=[] 选项在导入的同时执行对容器进行修改的Dockerfile指令。
下面将test_for_run.tar文件导入到系统中:
docker import test_for_run.tar ubuntu:1.0
或者
cat test_for_run.tar | docker import - ubuntu:1.0
区别
①、export命令导出的tar文件略小于save命令导出的 ;
②、export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出;
③、基于第二点,export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。
建议
可以依据具体使用场景来选择命令
- 若是只想备份images,使用save、load即可;
- 若是在启动容器后,容器内容有变化,需要备份,则使用export、import。
操作docker容器的更多相关文章
- Docker实战(二)之操作Docker容器
容器是Docker的另外一个核心概念.简单来说,容器是镜像的一个运行实例.所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层.如果认为虚拟机是模拟运行的一整套操作系统系统(包括内核,应 ...
- Docker 容器学习笔记
Docker 诞生于2013年,最初发起者是dotCloud公司.Docker自开源后受到广泛的关注和讨论,目前已有多个相关项目逐渐形成了围绕Docker容器的生态体系,由于Docker在业界造成的影 ...
- Docker 容器简介与部署
关于Docker容器技术 参考文献:<docker 从入门到精通> Docker容器简介 Docker的构想是要实现 "Build,Ship and Run Any App,An ...
- docker容器管理-含静态Ip(10)
docker run命令详解 docker run -t #表示分配一个伪终端 -i #表示让容器的标准输入打开,不跟这个参数容器启不来 -d #后台运行 -P #dockerfile中EXPOSE ...
- Docker 容器shell
版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...
- Docker 容器(container)
版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...
- docker容器介绍
Docker容器 一.什么是Docker? Docker时Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Git ...
- Docker:镜像操作和容器操作
镜像操作 列出镜像: $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest 0a6b ...
- 如何启动一个已经创建的docker 容器,并进入SHELL 对其操作
腾讯云使用自己的docker镜像安装后无法启动,下边这个亲测是可用的 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A ...
随机推荐
- #WEB安全基础 : HTML/CSS | 0x5a标签拓展和class、id属性的使用
a标签不只是能链接到其他网页,也能链接到网页中的元素 class属性让你用CSS对特定的元素进行修饰 这些是一个网页设计者的有力武器 这节课还是一个index.html文件 以下是代码 <h ...
- Registrator中文文档
目录 快速入门 概述 准备 运行Registrator 运行Redis 下一步 运行参考 运行Registrator Docker选项 Registrator选项 Consul ACL令牌 注册URI ...
- Bitmap上下合成图片
合成两张图片,上下叠加的效果: /** * 把两个位图覆盖合成为一个位图,以底层位图的长宽为基准 * * @param backBitmap 在底部的位图 * @param frontBitmap 盖 ...
- GNUstep 快捷键编译
$ gcc `gnustep-config --objc-flags` -L /GNUorld.m -o helloworld -lgnustep-base -lobjc $ ./helloworld ...
- 坚定关于考研或者工作的决定:work
转眼之间,我已经夸过了大二结束的节点,已经是一个准大三了: 在这个岔路口,首要的选择就是考研和工作的选择:我也有过犹豫要不要考研,最终还是放弃了考研的想法,从考研的利弊两个方面来谈: 首 ...
- SQLServer之修改标量值函数
修改标量值函数注意事项 更改先前通过执行 CREATE FUNCTION 语句创建的现有 Transact-SQL 或 CLR 函数,但不更改权限,也不影响任何相关的函数.存储过程或触发器. 不能用 ...
- 【原】Java学习笔记001 - JAVA开发环境搭建
1.JDK下载并安装,以jdk-7u45-windows-i586.exe为例(注意JDK的安装和JRE的安装是分开的) 2.“我的电脑”右键属性,找到“高级系统设置”,找到“高级”tab下的“环境变 ...
- C 语言 IO 缓存 相关
必要了解函数的功能和使用场景: fflush, setbuf, setvbuf 了解的操作: setbuf(stdout,NULL); // 关闭输出缓冲区: libc 和 linux 内核IO缓存模 ...
- Proxmox VE中出现TASK ERROR: command 'apt-get update' failed: exit code 100的解决方法
问题描述: 出现这个错误一般在WEB或者在Proxmox VE的服务器上面能看到日志: PVE中出现TASK ERROR: command 'apt-get update' failed: exit ...
- LNMP时,出现502 Bad Gateway的错误提示
因为工作需要,要在ubuntu中安装LNMP环境,在这里,php是最新版本php7.1.一切都进展得很顺利,安装完成后,在浏览器中输入http://127.0.0.1/info.php,出现了502 ...