Docker基础-容器操作
1、创建容器
1.新建容器
可以使用docker create命令新建一个容器。
[root@linux-node1 ~]# docker create -it ubuntu:latest ffc9099be315f1b94876410c7d74dcd20e311e735e638080dd477534c063a6d6 [root@linux-node1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ffc9099be315 ubuntu:latest "/bin/bash" 8 seconds ago Created optimistic_pare [root@linux-node1 ~]#
说明:用docker create命令创建的容器处于停止状态,可以使用docker start命令来启动它。
2.启动容器
使用docker start命令可以启动一个停止状态的容器。
[root@linux-node1 ~]# docker start ffc9099be315 ffc9099be315 [root@linux-node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ffc9099be315 ubuntu:latest "/bin/bash" About a minute ago Up 8 seconds optimistic_pare [root@linux-node1 ~]#
3.新建并启动容器
除了可以用start命令来启动容器,也可以在新建的时候直接启动容器。使用docker run命令即可
[root@linux-node1 ~]# docker run ubuntu:latest /bin/echo "Hello Docker" Hello Docker [root@linux-node1 ~]#
说明:
docker run启动容器时,docker在后台一共做了下面这些事:1.检查本地是否存在指定的镜像,不存在就从共有仓库下载;2.利用镜像创建一个容器,并启动该容器;3.分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;4.从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;5.从网桥的地址池配置一个IP地址给容器;6.执行用户指定的应用程序;7.执行完毕后,容器被终止。
docker run -it ubuntu:latest /bin/bash 可以启动一个bash终端,允许用户交互:
-t参数:让docker分配一个伪终端绑定到标准输出
-i参数:让伪终端的标准输入保持开启状态,接收用户输入,实现交互
用exit命令或者ctrl + d命令退出容器4.守护态运行
4.守护态运行
很多时候我们需要让容器在后台以守护态(Daemonized)形式运行。此时可以通过-d参数来实现。
[root@linux-node1 ~]# docker run -d ubuntu:latest /bin/bash -c "while true;do echo hello docker;sleep 1;done" 3778a35ff4bcbf8cbd3934601e9ca2bfd33034f8a4cc69b6d76e0811c910e1e0 [root@linux-node1 ~]#
可以通过docker logs [ID]查看容器的输出信息:
[root@linux-node1 ~]# docker logs 3778a hello docker hello docker hello docker hello docker hello docker hello docker hello docker hello docker hello docker hello docker hello docker
2、终止容器
可以使用docker stop命令来停止一个正在运行中的容器。命令格式为:docker stop [-t|--time[=10]] [CONTAINER...]
执行了docker stop命令之后,docker首先会向容器发送SIGTERM信号,等待一段时间(默认10秒)后,再发送SIGKILL信号来终止容器。
[root@linux-node1 ~]# docker stop 3778a #执行该命令后,终端会等待10秒才会有终止容器的返回信息3778a 3778a [root@linux-node1 ~]#
docker kill命令可以跳过SIGTERM信号,直接发送SIGKILL信号终止容器。
[root@linux-node1 ~]# docker kill ffc #该命令执行后,马上会返回终止容器的信息ffc ffc [root@linux-node1 ~]#
3、启动和重启容器
docker start命令可以启动一个停止状态的容器。
docker restart命令先会停止该容器,然后重新启动该容器。
4、进入容器
在使用-d参数启动容器后,容器直接运行在后台,用户无法看到容器中的信息,也无法进行操作。
要进入容器有多种方法,其中最常见的是官方的attach或exec命令还有第三方的nsenter工具。
1.attach命令
attach是docker自带的命令,命令格式为:docker attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
支持三个主要选项:
--detach-keys[=[]] 指定退出attach模式的快捷键序列,默认是CTRL -p CTRL -q --no-stdin=true|false 是否关闭标准输入,默认是保持打开 --sig-proxy=true|false 是否代理收到的系统信号给应用进程,默认为true。
举例如下:
[root@linux-node1 ~]# docker run -itd centos:latest b73595139275b9feaf077c6c537e89ecb16e19b399217b0cacc71bea164acf50 [root@linux-node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b73595139275 centos:latest "/bin/bash" 11 seconds ago Up 9 seconds gifted_hypatia [root@linux-node1 ~]# docker attach gifted_hypatia [root@b73595139275 /]# pwd / [root@b73595139275 /]# exit exit [root@linux-node1 ~]#
使用attach命令并不是很方便,当多个窗口同时用attach命令连接到同一个容器的时候,所有窗口都会同步显示。无法独立操作。
2.exec命令
docker从1.3.0版本开始提供了一个更加方便的命令exec,可以直接在容器内执行任意命令。命令格式为:
docker exec [-d|--detach] [--detach-keys=[[]]] [-i|--iteractive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]
参数说明:
-i,--iteractive=true|false 打开标准输入接收用户输入的命令,默认为false --privileged=true|false 是否给执行命令以最高权限,默认为false -t,--tty=true|false 分配伪终端,默认为false -u,--user="" 执行命令的用户名或ID
举例如下:
[root@linux-node1 ~]# docker run -itd centos:latest c50284d43c2a00e10a8f02eca97c9404bf3bccb6c9759e6196b74ad31ddb42fd [root@linux-node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c50284d43c2a centos:latest "/bin/bash" 3 seconds ago Up 2 seconds relaxed_lamport [root@linux-node1 ~]# docker exec -it c5028 /bin/bash [root@c50284d43c2a /]#
3.nsenter工具
为了连接到docker的容器,还要先找出容器进程的PID,可以通过下面的命令获取:
PID=`docker inspect -f "{{.State.Pid}}" c50284d43c2a` #c50284d43c2a为容器的ID号
为了方便使用写了一个脚本docker-pid直接可以输出指定容器进程的PID号:
#!/bin/bash PID=`docker inspect -f "{{.State.Pid}}" $1` echo $PID #使用方法:./docker-pid 容器ID或者容器名
举例如下:
[root@linux-node1 ~]# docker-pid 50284d43c2a 22375 [root@linux-node1 ~]# nsenter --target 22375 --mount --uts --ipc --net --pid [root@c50284d43c2a /]# pwd / [root@c50284d43c2a /]# ip a -bash: ip: command not found [root@c50284d43c2a /]#
4、删除容器
使用docker rm命令删除处于退出或者终止状态的容器,命令格式为:docker rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]
参数说明:
-f,--force=false 是否强行终止并删除一个正在运行中的容器 -l,--link=false 删除容器的链接,但保留容器 -v,--volumes=false 删除容器挂载的数据卷
举例如下:
[root@linux-node1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a6f06de9d30b ubuntu:latest "/bin/bash" 7 seconds ago Exited (0) 5 seconds ago condescending_bassi c50284d43c2a centos:latest "/bin/bash" 23 minutes ago Up 23 minutes relaxed_lamport [root@linux-node1 ~]# docker rm a6f06de9d30b a6f06de9d30b [root@linux-node1 ~]#
docker rm只能删除退出或者终止状态的容器,并不能删除正在运行的容器,如果要删除正在运行的容器需要加-f参数
[root@linux-node1 ~]# docker rm c50284d43c2a Error response from daemon: You cannot remove a running container c50284d43c2a00e10a8f02eca97c9404bf3bccb6c9759e6196b74ad31ddb42fd. Stop the container before attempting removal or force remove [root@linux-node1 ~]# [root@linux-node1 ~]# docker rm -f c50284d43c2a c50284d43c2a [root@linux-node1 ~]#
5、导入和导出容器
某些时候需要将容器从一个系统迁移到另一个容器,所以就需要将容器先导出,在新的系统导入。
1.导出容器
导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令,命令格式为
docker export [-o|--output[=""]] CONTAINER
参数说明:
-o,--output="" 指定打出的tar文件名,也可以直接重定向实现。
举例如下:
[root@linux-node1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ca0f4155f3ff centos:latest "/bin/bash" 2 minutes ago Up 2 minutes nostalgic_golick 2b9d24d61777 ubuntu:latest "/bin/bash" 2 minutes ago Exited (0) 2 seconds ago gallant_agnesi [root@linux-node1 ~]# docker export -o test_for_run.tar ca0f [root@linux-node1 ~]# ls anaconda-ks.cfg docker-pid test_for_run.tar ubuntu-14.04-x86_64-minimal.tar.gz [root@linux-node1 ~]# docker export 2b9d > test_for_stop.tar [root@linux-node1 ~]# ls anaconda-ks.cfg docker-pid test_for_run.tar test_for_stop.tar ubuntu-14.04-x86_64-minimal.tar.gz [root@linux-node1 ~]#
2.导入容器
导出的容器文件可以通过docker import导入变成镜像,命令格式为:
docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|- [RESPOSITORY[:TAG]]
参数说明:
-c,--change=[] 在导入的同时执行对容器做出修改的Dockerfile指令。
举例如下:
[root@linux-node1 ~]# cat test_for_run.tar |docker import - test/ubuntu:0.2 sha256:0a3bc658748d0a73798b2db3316c56020697ed4f4407992b1327e4714b09f190 [root@linux-node1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test/ubuntu 0.2 0a3bc658748d 7 seconds ago 197MB test 0.1 d751da3f9943 2 hours ago 221MB ubuntu 16.04 20c44cd7596f 10 days ago 123MB ubuntu latest 20c44cd7596f 10 days ago 123MB ubuntu 14.04 d6ed29ffda6b 10 days ago 221MB staryjie/test latest d6ed29ffda6b 10 days ago 221MB centos latest d123f4e55e12 3 weeks ago 197MB [root@linux-node1 ~]#
转载于:https://www.cnblogs.com/jie-fang/p/7920002.html
Docker基础-容器操作相关推荐
- docker基础命令操作
docker基础命令操作 一.容器生命周期管理 1.1 run 1.2 启动.停止.重启容器 1.3 kill--杀掉一个运行中的容器 1.4 rm--删除容器 1.5 pause/unpause 命 ...
- docker基础容器中bash: vi: command not found问题解决
docker基础容器中bash: vi: command not found问题解决 问题 我们在创建基础容器之后,进入容器,进行编辑配置文件的时候,需要使用vim或者vi命令,但是会出现: 原因 这 ...
- docker多容器操作与强制删除容器的方法步骤
简介: 这是一篇有关[doker的多容器操作和强制删除容器的方法]的文章,用最精简的语言去表达给前端读者们. 1.创建多个容器 在WIndows环境下我们来作这个,先打开三个PowerShell窗口, ...
- docker 基础命令操作 镜像以及容器的基本操作演示
tomcat启动后',可以通过页面访问到默认页面,可以更加直观的显示出来:我们就以tomcat为例,对镜像,容易的基础操作进行演示: 1.查询镜像命令 docker search tomcat , 运 ...
- Docker之容器操作
1 .创建容器 1.1 新建容器 docker create [option] IMAGE_NAME:IMAGE_TAG 创建停止状态的容器,并生成容器ID(CONTAINER_ID). docker ...
- docker基础入门和docker compose实战
Docker运维部署 docker官网:https://www.docker.com/ 文档:https://docs.docker.com/ Docker的文档是超级详细的! 仓库:https:// ...
- Docker基础认识,镜像、容器操作及镜像的制作
一.了解虚拟机和容器的区别 二.Docker概述 三.安装Docker 1.安装依赖包 2.设置阿里镜像源 3.安装Docker-CE 四.docker常规操作 1.镜像加速(提高镜像下载速度) 2. ...
- Docker 之 Docker基础操作
第1章 Docker基础操作 1.1 常用的命令 0) 安装Docker 环境 yum -y install docker 1) 指定 IP,DNS 网络位启动Docker容器 a) docke ...
- docker停止容器后配置_整理了一份 Docker系统知识,从安装到熟练操作看这篇就够了 | 原力计划...
作者 | IronmanJay 责编 | 王晓曼 出品 | CSDN博客 Docker 基础介绍 下图为 Docker 图标(是一个鲸鱼上面是集装箱). 1.我们为什么要使用Docker 当我们在工作 ...
- Docker基础操作,原来这才是正确打开Docker的新方式!
文章目录 前言 一.Docker操作镜像 1.拉取镜像 2.查看镜像 3.删除镜像 4.保存镜像 5.读取镜像 5.镜像帮助命令 二.Docker容器基础操作 1.创建并运行容器 2.查看容器运行状态 ...
最新文章
- C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针
- [UE4]射击和直线追踪
- .net 显示时间为YYYY-MM-DD格式
- Vue+ElemtUI中对el-dialog弹出框宽度调整方法
- SQL SERVER数据库多条件查询
- java中的Queue队列的用法
- 4种kill某个用户所有进程的方法
- zoj 3761(并查集+搜索)
- latex 数学公式
- 专用efi文件包_优质设备项目来啦!山钢焦炉、济南鲍德炉料公司所属资产包转让...
- 指针数组和数组指针的本质(四十一)
- 前端面试之 判断 true == true 需要进行哪几步操作?
- 我的世界java边境之地_《我的世界》:手机版的边境之地你绝对没见过!那里方块只有空壳?...
- css -- 背景图片自适应屏幕大小
- 把树莓派用于YAAW离线下载的Mass Storage U盘用虚拟目录建到Vsftpd的子目录里去
- 2018上半年五款最畅销高速数据采集卡,你get了吗?
- w7网络计算机共享,网络共享设置 win7局域网共享设置最简单教程
- linux MySQL .sock_Linux 下找不到 mysql.sock 的解决方法
- php 私有云盘,私有云盘搭建
- 微软专利技术介绍系列课程
热门文章
- T-SQL行合并成列与列拆分成行
- 阿里社招面试如何准备
- 大数据实验室(大数据基础培训)——Kafka的安装、配置及基础使用
- C++中“强制转换”的四大天王
- 【读书笔记】代理模式代码(C#)
- 据说IE7.0不支持跨域名脚本,那网页计数器不是要失效啦?
- SecureCRT 登录跳板机自动连接目标服务器
- Mac OS安装mysql教程
- 怎样解决An internal error has occurred. Index out of bounds
- java中String stringBuffer StringBuider