天下風雲出我輩
一入江湖歲月催

Docker之容器操作

容器是Docker的另一个核心概念,类似于轻量级的沙箱,用来运行和隔离应用;简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。

1、创建并启动容器


创建容器:docker create -it {image_name}
docker create命令新建的容器处于停止状态,可以使用docker start命令来启动它。

启动容器:docker start {container_id}  //容器ID前三位

直接新建并启动容器

docker run -t -i centos /bin/bash

# -i表示让容器的标准输入打开,-t表示分配一个伪终端,要把-i -t 放到镜像名字前面

守护态运行
docker run -itd centos /bin/bash

当使用docker run来创建并启动容器时,Docker在后台运行的标准操作:
(1)检查本地是否存在指定的镜像centos,不存在就从公有仓库下载
(2)利用镜像创建并启动一个容器
(3)分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
(4)从宿主主机配置的桥接网络接口中桥接一个虚拟接口到容器中去
(5)从地址池配置一个IP地址给容器
(6)执行用户指定的应用程序
(7)执行完毕后,容器被终止

2、停止容器

2.1暂停和恢复

#启动一个容器并将其暂停

docker run --name test --rm -it centos /bin/bash

[[email protected] ~]# docker pause test
test
[[email protected] ~]# docker ps
CONTAINER ID   IMAGE    COMMAND      CREATED          STATUS          PORTS    NAMES
0dd3c134e5b4   centos "/bin/bash"  29 seconds ago Up 29 seconds (Paused)       test

#使用unpause恢复

docker unpause test

2.2终止容器

使用docker stop来终止一个运行中的容器,命令的格式为docker stoop [container]首先向容器发送SIGTERM信号,等待一段超时时间(默认为10s)后,-t  时间设置 ,再发送SIGKILL信号来终止容器,docker kill命令会直接发送SIGKILL信号来强行终止容器。

停止容器, 
# docker stop 0dd          //设置2秒停止  stop -t 2
#终止状态的容器可以使用docker start 0dd开启

#强制终止
docker kill 0dd

#自动清除所有处于停止状态的容器
# docker container prune

3、进入容器

(1)attach命令

docker run --name test -itd centos:7 /bin/bash

# docker attach test // 容器名称或者id
[[email protected] /]# 
注意:使用attach命令有时候并不方便,当多个窗口同时使用attach命令链接到同一个容器的时候,所有窗口都会同步显示。
当某个窗口因命令阻塞时,其他窗口也无法进行操作。

(2)exec命令(推荐方式)

docker exec -it test  /bin/bash

4、删除容器

可以使用docker rm 命令来删除处于终止或退出状态的容器,命令格式为docker [container] rm [ -f | -l | -v ] CONTAINER
默认情况下,docker rm 只能删除处于终止或退出状态的容器,并不能删除还处于运行状态的容器。如果需要直接删除一个运行中的容器,可以添加-f参数。Docker会先发送SIGKILL信号给容器,终止其中的应用,之后强行删除。
选项:
-f:强行终止并删除在运行的一个容器
-l:删除容器的链接,但保留容器
-v:删除容器挂载的数据卷

#查看所有容器
[[email protected] ~]# docker ps -a
CONTAINER ID    IMAGE        COMMAND         CREATED           STATUS       PORTS        NAMES
ad298b97c7a9   python:3     "bash"        5 seconds ago Exited (0) 2 seconds ago    quizzical_morse
c1a9666c13b5  nginx:1.14.1   "nginx -g 'daemon of…" 19 minutes ago Up 19 minutes  80/tcp

#删除已经终止的ad2容器:python:3
[[email protected] ~]# docker rm ad2
ad2

#删除正在运行的id为c1a的容器,也就是nginx:1.14.1
[[email protected] ~]# docker rm -f c1a
c1a

5、导入和导出容器

当我们需要将容器从一个系统迁移到另外一个系统,此时可以使用Docker的导入和导出功能。

5.1导出容器

导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令
格式为:docker export [-o|–out[=””] CONTAINER_ID,其中使用-o选项来指定导出tar文件名,也可以使用重定向来实现。

#查看容器

[[email protected] ~]# docker ps -a
CONTAINER ID    IMAGE      COMMAND      CREATED          STATUS     PORTS         NAMES
8d6257604b2c   python:3   "bash" 4 seconds ago      Exited (0) 1 second ago  pedantic_bhabha
1a1c6384e090   centos:7   "/bin/bash"   38 minutes ago  Up 38 minutes            os

#导出8d6和1a1的容器
[[email protected] ~]# docker export -o python3.tar 8d6
[[email protected] ~]# docker export 1a1 > centos7.tar
[[email protected] ~]# ls
centos7.tar  python3.tar

5.2 导入容器

导出的tar文件可以传输到其他机器上,然后再通过导入命令导入到系统中,实现容器的迁移。

[[email protected] ~]# docker import centos7.tar centos:7

[[email protected] ~]# docker images
REPOSITORY  TAG    IMAGE ID          CREATED          SIZE
centos      7    6e7a33cada2e    32 seconds ago       387MB

6、查看容器

#查看容器详细信息

docker container inspect 626 //使用容器ID或者名称

#查看容器内进程

[[email protected] ~]# docker top 626
UID   PID     PPID   C   STIME   TTY         TIME       CMD
root  10561   10544  0   14:24   pts/0    00:00:00     /bin/bash

#查看容器的统计信息

docker stats -a 626

CONTAINER ID       NAME          CPU %   MEM USAGE / LIMIT    MEM % NET I/O BLOCK I/O PIDS
62606c40a2f5  hungry_poincare   0.00%     376KiB / 7.638GiB   0.00% 648B / 0B 0B / 0B 1

6.1复制本地文件到容器内

[[email protected] ~]# echo "test cp container" > docker.html
[[email protected] ~]# docker cp docker.html 626:/tmp/

#查看容器内文件
[[email protected] ~]# ls /tmp/
docker.html ks-script-7RxiSx yum.log

6.2 查看容器内的变更

[[email protected] ~]# docker container diff 626
C /tmp
A /tmp/docker.html

6.3 查看端口映射

[[email protected] ~]# docker container port 640
80/tcp -> 127.0.0.1:80

6.4 更新配置

container update 命令可以更新容器的一些运行时的配置,主要是一些资源限制份额

用法:docker  update [OPTIONS] CONTAINER [CONTAINER…]

选项

名称,简写 描述
–blkio-weight 阻塞IO(相对权重),介于10和1000之间,或0禁用(默认为0)
–cpu-period 限制CPU CFS(完全公平的调度程序)周期
–cpu-quota 限制CPU CFS(完全公平的调度程序)配额
–cpu-rt-period 限制CPU实时周期(以微秒为单位)
–cpu-rt-runtime 以微秒为单位限制CPU实时运行时间
–cpu-shares, -c CPU份额(相对权重)
–cpus 限制cpu个数
–cpuset-cpus 允许执行的CPU(0-3,0.1)
–cpuset-mems 允许执行的内存率(0-3,0.1)
–kernel-memory 内核内存限制
–memory, -m 内存限制
–memory-reservation 内存软限制
–memory-swap 交换限制等于内存加交换:’-1‘以启用无限制的交换
–restart 重新启动在容器退出时应用的策略

例如:限制总配额为1秒,容器nginx 所占用时间为10%

docker update  --cpu-quota 1000000 nginx

docer update --cpu-period  100000 nginx

 

赞(3) 打赏
未经允许不得转载:Anonym0x1 » Docker之容器操作

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏