操作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 ...
随机推荐
- git 常用命令,上传,下载,更新线上代码
git 常用命令以及推荐git新建上传个人博客 $ git clone //本地如果无远程代码,先做这步,不然就忽略 $ git status //查看本地自己修改了多少文件 $ git add . ...
- 关于js中close()方法的兼容性问题
在Firefox中使用close()方法无法关闭窗前窗口 控制台会输出 “脚本不得关闭非脚本打开的窗口.” 解决办法:在浏览器地址栏中输入 about:config 在配置列表中找到 dom.a ...
- 亚马逊 amazon connect(呼叫中心)
背景 公司为提高客服部门沟通效率对接电话呼叫中心,调研后选择了亚马逊的Amazon Connect服务,因为是国外业务没有选择用阿里云,怕有坑. Amazon Connect后台 需要在后台创建“联系 ...
- 博弈论进阶之Anti-SG游戏与SJ定理
前言 在上一节中,我们初步了解了一下SG函数与SG定理. 今天我们来分析一下SG游戏的变式--Anti-SG游戏以及它所对应的SG定理 首先从最基本的Anti-Nim游戏开始 Anti-Nim游戏是这 ...
- django项目环境搭建
本文转载自: https://blog.csdn.net/xiaogeldx/article/details/89038299 在码云平台创建项目 版本控制的种类 主要使用github(最主流) 国内 ...
- C#网络请求与JSON解析
最新学校的海康摄像头集控平台(网页端)不能在win10里登录,我寻思着拿海康的c# demo直接改. 首先得解决权限问题,每个教师任教不同年级,只能看到自己所在年级的设备,涉及到登录,在此记录一下C# ...
- 【代码笔记】Web-CSS-CSS盒子模型
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- vue中input输入框的模糊查询实现
最近在使用vue写webapp在,一些感觉比较有意思的分享一下. 1:input输入框: <input class="s-search-text" placeholder=& ...
- Linux操作系统--定时任务
最近在学习Linux操作系统.学到了关于定时任务的章节,作为一个总结写下这篇文章.在Linux中,我们可以将耗时大的任务如复制大文件,压缩.解压缩大文件等放进定时任务中(深夜执行,因为工作时间访问量大 ...
- Go-Ethereum 1.7.2 结合 Mist 0.9.2 实现众筹合约的实例
目录 目录 1.什么是ICO? 2.众筹的奖励-代币 3.众筹合约的完善 3.1.设置众筹合约中使用的代币 3.2.众筹合约的基本设置 3.3.让众筹合约接收以太币 3.4.检测众筹合约是否完成 3. ...