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 ~]#
Docker基础-容器操作的更多相关文章
- Docker.[4].容器操作.
Docker.[4].容器操作. 熟悉的指令: 启动容器 docker run 交互式启动容器 docker run -i -t IMAGENAME /bin/bash 停止容器 exit 停止容器 ...
- Docker的容器操作
启动一次性运行的容器 入门级例子:从ubuntu:14.04镜像启动一个容器,成功后在容器内部执行/bin/echo 'hello world'命令,如果当前物理机没有该镜像,则执行docker pu ...
- docker 基础之操作容器
Docker子命令分类 Docker 环境信息 info .version 容器生命周期管理 Create.exec.kill.pause.restart.rm.run.start.stop.unpa ...
- Docker基础-镜像操作
1.搜寻镜像 docker search [TERM] 可以搜索远程仓库中共享的镜像,默认搜索官方仓库的镜像. docker search参数: --automated=true|false :仅显示 ...
- 【Docker】容器操作(转)
来自:https://www.cnblogs.com/zydev/p/5803461.html 列出主机上的容器 列出正在运行的容器: docker ps 列出所有容器: docker ps - ...
- docker基础容器中bash: vi: command not found问题解决
安装即可 1.apt-get update 2.apt-get install vim
- Docker系列03—Docker 基础入门
本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...
- Docker基础速成(一)
Docker基础速成(一) 给亲爱的写的docker基础速成,按照步骤操作,实践出真知,希望有提纲挈领之功效 1.docker简介 Docker 轻量级容器,如图,类似于一个个集装箱,把复杂或者零散的 ...
- 【转】Docker基础
一.简介 Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的CGroup.Namespace.Union FS等技术实现的一种系统级虚拟化技术. 特性 更高效的利用系统资源: ...
随机推荐
- 修改vsftpd的默认根目录
修改ftp的根目录只要修改/etc/vsftpd/vsftpd.conf文件即可: 加入如下几行: local_root=/var/www/html chroot_local_user=YES ano ...
- 关于能量场和力场弯曲空间的实验证明 EXPERIMENTAL PROOF ON THE BENDING SPACE OF ENERGY FIELD AND FORCE FIELD
前文提到,F = ma, E = mc^2,并且等效是传递的,等效概念具有同属性.所以不止能量,力场也可以弯曲空间. 实验:某人被头顶上方的电站10几万伏的设备吸收,烧毁双臂. (虽然这个实验不应具有 ...
- Django:全文检索功能可参考博客
https://blog.csdn.net/AC_hell/article/details/52875927 https://www.zmrenwu.com/courses/django-blog-t ...
- asp.net core mvc 中间件之WebpackDevMiddleware
asp.net core mvc 中间件之WebpackDevMiddleware WebpackDevMiddleware中间件主要用于开发SPA应用,启用Webpack,增强网页开发体验.好吧,你 ...
- 【BZOJ5290】 [Hnoi2018]道路
BZOJ5290 [Hnoi2018]道路 前言 这道题目我竟然没有在去年省选切? 我太菜了. Solution 对题面进行一个语文透彻解析,发现这是一个二叉树,乡村都是叶子节点,城市都有两个儿子.( ...
- 拿pyg 的fastdfs分布式文件系统 存储的位置
http://192.168.25.133/group1/M00/00/00/wKgZhVtW1vqAUpkZAABcxtZsmb0631.png StorageClient1 upload_fil ...
- [JavaScript] 跳出循环方法总结
1.forEach() 方法对数组的每个元素执行一次提供的函数.但是没有办法中止或者跳出 forEach 循环,除了抛出一个异常,该方法没有返回值,return/return false/return ...
- D3.js的基础部分之数组的处理 数组的排序和求值(v3版本)
操作数组 D3提供了将数组洗牌.合并等操作,使用起来是很方便的. d3.shuffle(array,[,lo[,ji]]) : //随机排列数组. d3.merge(arrays) : / ...
- df换行问题解决
df换行问题解决 df是linux下用来查磁盘空间的命令,而在使用了LVM分区或网络挂载的情况下,再用df取分区的使用率时,发现有些分区显示换行了,这样会导致通过脚本取的数据不对. [root@ ]# ...
- 【xsy2193】Wallace 最大权闭合子图
题目大意:给你一棵$n$个节点的树$a$,每个点有一个点权$val_i$,同时给你另一棵$n$个节点的树$b$. 现在你需要在树$a$上找一个联通块,满足这些点在树$b$上也是连通的,同时树$a$的这 ...