docker容器操作(第二篇)

目录

五、Docker 容器操作

1、创建容器与运行容器

2、容器的启动与停止

3、容器的运行与终止

4、容器的进入

5、容器的导出与导入

6、容器的删除

7、文件复制

8、查看容器资源使用率

9、查看容器进程状态

10、更新容器配置


五、Docker 容器操作

        容器是Docker 的另一个核心概念,简单说,容器是镜像的一个运行实例,是独立运行

的一个或一组应用以及它们所必需的运行环境,包括文件系统、系统类库、shell 环境等。

镜像是只读模板,而容器会给这个只读模板一个额外的可写层。

下面将具体介绍围绕容器的具体操作。

1、创建容器与运行容器

        Docker 的创建就是将镜像加载到容器的过程,Docker 的容器十分轻量级,用户可以随

时创建或者删除。新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个

进程来启动容器,这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全

停止。停止的容器可以重新启动并保留原来的修改。可以使用docker create 命令新建一个容器。

        命令格式:docker create [选项]… 镜像运行的程序

常用选项:

  • -i 让容器的输入保持打开
  • -t 让Docker 分配一个伪终端
  • -d 守护进程形式运行
[root@localhost ~]# docker create -it centos /bin/bash
43116b0ce52ba3f53e72e3d0b26b348fa85ae7ff9d998addec6c11c20fbec146

 

使用docker create 命令创建新容器后会返回一个唯一的ID。

        可以使用docker ps 命令来查看所有容器的运行状态。添加-a 选项可以列出系统中所有容器状态。

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS    PORTS     NAMES
43116b0ce52b   centos    "/bin/bash"   About a minute ago   Created             cool_mcnulty

         输出信息显示容器的ID 号、加载的镜像、运行的程序、创建时间、目前所处的状态、端口映射。其中状态一栏为空表示当前的容器处于停止状态。

2、容器的启动与停止

启动停止容器可以使用docker start 命令。

命令格式:docker start 容器的ID/名称

[root@localhost ~]# docker start 43116b0ce52b

43116b0ce52b

[root@localhost ~]# docker ps -a

CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
43116b0ce52b   centos    "/bin/bash"   4 minutes ago   Up 5 seconds             cool_mcnulty

 

        容器启动后,可以看到容器状态一栏已经变为UP,表示容器已经处于启动状态。如果用户想创建并启动容器,可以直接执行docker run 命令,等同于先执行docker create 命令,再执行docker start 命令。需要注意只要后面的命令运行结束,容器就会停止。

        当利用docker run 来创建容器时,Docker 在后台的标准运行过程是这样的:检查本地是否存在指定的镜像,当镜像不存在时,会从公有仓库下载;利用镜像创建并启动一个容器;分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;分配一个地址池中的IP 地址给容器;执行用户指定的应用程序;执行完毕后容器被终止运行。

例如,创建容器并启动执行一条shell 命令:

[root@localhost ~]# docker run centos /bin/bash -c ls /
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

这和在本地直接执行命令几乎没有区别。

[root@localhost ~]# docker ps -a

CONTAINER ID   IMAGE     COMMAND               CREATED          STATUS                      PORTS     NAMES

ada48f9ffca1   centos    "/bin/bash -c ls /"   54 seconds ago   Exited (0) 54 seconds ago             sleepy_edison

43116b0ce52b   centos    "/bin/bash"           6 minutes ago    Up 2 minutes                          cool_mcnulty

查看容器的运行状态,可以看出容器在执行完”/usr/bin/bash -c ls” 命令之后就停止了。

        有时候需要在后台持续的运行这个容器,就需要让docker 容器在守护态形式在后台进行运行。可以在docker run 命令之后添加-d 选项来实现。但是需要注意容器所运行的程序不能结束。

例如,下面的容器会持续在后台进行运行:

[root@localhost ~]# docker run -d nginx /bin/bash -c "while true;do echo hello;done"

a6fa85aec0aaee1f3e232c610c94b56367eb85964b9ae21dafb5dd2fe688fb65

docker ps查看容器,-a 查看所有容器,-q 只查看容器ID

[root@localhost ~]# docker ps -a

CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS                     PORTS     NAMES

a6fa85aec0aa   nginx     "/docker-entrypoint.…"   41 seconds ago   Up 40 seconds              80/tcp    sharp_murdock

ada48f9ffca1   centos    "/bin/bash -c ls /"       4 minutes ago    Exited (0) 4 minutes ago             sleepy_edison

43116b0ce52b   centos    "/bin/bash"               9 minutes ago    Up 5 minutes                         cool_mcnulty

查看容器的运行状态,可以看出容器始终处于UP,运行状态。

查看容器内的输出

[root@localhost ~]# docker logs a6fa85aec0aa
hello
hello
hello
hello
hello
^C

[root@localhost ~]# 

3、容器的运行与终止

如果需要终止运行的容器,可以使用docker stop 命令完成。

命令格式:docker stop 容器的ID/名称

[root@localhost ~]# docker stop a6fa85aec0aa

a6fa85aec0aa

[root@localhost ~]# docker ps -a 

CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS                        PORTS     NAMES

a6fa85aec0aa   nginx     "/docker-entrypoint.…"   5 minutes ago    Exited (137) 10 seconds ago             sharp_murdock

ada48f9ffca1   centos    "/bin/bash -c ls /"       8 minutes ago    Exited (0) 8 minutes ago                sleepy_edison

43116b0ce52b   centos    "/bin/bash"               14 minutes ago   Up 10 minutes                           cool_mcnulty

查看容器的运行状态,可以看出容器处于Exited,终止状态。

4、容器的进入

        需要进入容器进行相应操作时,可以使用docker exec 命令或者docker attach命令进入运行着的容器。

命令格式:docker exec -it 容器ID/名称/bin/bash

其中,-i 选项表示让容器的输入保持打开;

-t 选项表示让Docker 分配一个伪终端。

例如:进入正在运行着的容器43116b0ce52b:

[root@localhost ~]# docker ps -a 

CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS                        PORTS     NAMES
a6fa85aec0aa   nginx     "/docker-entrypoint.…"   5 minutes ago    Exited (137) 10 seconds ago             sharp_murdock
ada48f9ffca1   centos    "/bin/bash -c ls /"       8 minutes ago    Exited (0) 8 minutes ago                sleepy_edison
43116b0ce52b   centos    "/bin/bash"               14 minutes ago   Up 10 minutes                           cool_mcnulty

[root@localhost ~]# docker exec -it 43116b0ce52b /bin/bash

[root@43116b0ce52b /]# exit

exit

[root@localhost ~]# docker ps -a

CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS                       PORTS     NAMES
a6fa85aec0aa   nginx     "/docker-entrypoint.…"   7 minutes ago    Exited (137) 2 minutes ago             sharp_murdock
ada48f9ffca1   centos    "/bin/bash -c ls /"       11 minutes ago   Exited (0) 11 minutes ago              sleepy_edison
43116b0ce52b   centos    "/bin/bash"               16 minutes ago   Up 12 minutes                          cool_mcnulty



#可以看到exit退出不会使容器停止

 

用户可以通过所创建的终端来输入命令,通过exit 命令退出容器。

通过Ctrl+pq命令退出容器并保证容器在后台继续运行。

[root@localhost ~]# docker exec -it 43116b0ce52b /bin/bash
[root@43116b0ce52b /]# read escape sequence

5、容器的导出与导入

        用户可以将任何一个Docker 容器从一台机器迁移到另一台机器。在迁移过程中,首先需要将已经创建好的容器导出为文件,可以使用docker export 命令实现,无论这个容器是处于运行状态还是停止状态均可导出。导出之后可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。

命令格式:docker export 容器ID/名称>文件名

例如,导出343e5da0caed容器到文件centos-exp:

[root@localhost ~]# docker run -it centos /bin/bash

[root@343e5da0caed /]# touch crushlinux

[root@343e5da0caed /]# [root@localhost ~]# 

[root@localhost ~]# docker ps -a

CONTAINER ID   IMAGE     COMMAND                   CREATED              STATUS                        PORTS     NAMES

343e5da0caed   centos    "/bin/bash"               About a minute ago   Up About a minute                       fervent_nash

a6fa85aec0aa   nginx     "/docker-entrypoint.…"   17 minutes ago       Exited (137) 11 minutes ago             sharp_murdock

ada48f9ffca1   centos    "/bin/bash -c ls /"       20 minutes ago       Exited (0) 20 minutes ago               sleepy_edison

43116b0ce52b   centos    "/bin/bash"               25 minutes ago       Up 21 minutes                           cool_mcnulty

[root@localhost ~]# docker export 343e5da0caed > centos-exp

[root@localhost ~]# ll centos-exp
-rw-r--r--. 1 root root 238572032 8月   1 18:03 centos-exp

导出的文件从A 机器拷贝到B 机器,之后使用docker import 命令导入,成为镜像。

命令格式:cat 文件名| docker import – 生成的镜像名称:标签

例如,导入文件centos7.tar成为本地镜像:

[root@localhost ~]# cat centos-exp | docker import - centos:exp

sha256:74ef60dea93af6e0c33f229670510288d38e4f8f574608635c4b64b5514ea8c2

[root@localhost ~]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
centos       exp       74ef60dea93a   13 seconds ago   231MB
nginx        latest    605c77e624dd   19 months ago    141MB
centos       latest    5d0da3dc9764   22 months ago    231MB

6、容器的删除

docker start|stop|restart|kill //运行已停止的容器|停止一个正在运行的容器|重启一个容器|杀死一个正在运行的容器

可以使用docker rm 命令将一个已经终止状态的容器进行删除。

命令格式:docker rm 容器ID/名称

例如,删除ID 号为a6fa85aec0aa的容器:

[root@localhost ~]# docker ps -a 

CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS                        PORTS     NAMES
343e5da0caed   centos    "/bin/bash"               7 minutes ago    Up 7 minutes                            fervent_nash
a6fa85aec0aa   nginx     "/docker-entrypoint.…"   23 minutes ago   Exited (137) 18 minutes ago             sharp_murdock
ada48f9ffca1   centos    "/bin/bash -c ls /"       26 minutes ago   Exited (0) 26 minutes ago               sleepy_edison
43116b0ce52b   centos    "/bin/bash"               32 minutes ago   Up 28 minutes                           cool_mcnulty

[root@localhost ~]# docker rm -f a6fa85aec0aa
a6fa85aec0aa

[root@localhost ~]# docker ps -a 
CONTAINER ID   IMAGE     COMMAND               CREATED          STATUS                      PORTS     NAMES
343e5da0caed   centos    "/bin/bash"           8 minutes ago    Up 8 minutes                          fervent_nash
ada48f9ffca1   centos    "/bin/bash -c ls /"   27 minutes ago   Exited (0) 27 minutes ago             sleepy_edison
43116b0ce52b   centos    "/bin/bash"           32 minutes ago   Up 28 minutes                         cool_mcnulty

        如果删除一个正在运行的容器,可以添加-f 选项强制删除,但是建议先将容器停止再做删除操作。

        Docker 默认的存储目录为/var/lib/docker,Docker的镜像、容器、日志等内容全部都存储在此,可以单独使用大容量的分区来存储这些内容,并且一般选择建立LVM 逻辑卷。从而避免Docker 运行过程中存储目录容量不足。

删除所有容器命令:docker rm -f $(docker ps -qa)

 

[root@localhost ~]# docker rm -f $(docker ps -qa)
343e5da0caed
ada48f9ffca1
43116b0ce52b

[root@localhost ~]# docker ps -a 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

7、文件复制

将主机/root/anaconda-ks.cfg目录拷贝到容器adbbad846b1b的/tmp目录下。

[root@localhost ~]# docker ps -a 

CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS    PORTS     NAMES
adbbad846b1b   centos    "/bin/bash"   9 seconds ago   Created             busy_hawking

[root@localhost ~]# docker cp /root/anaconda-ks.cfg adbbad846b1b:/tmp
Successfully copied 3.07kB to adbbad846b1b:/tmp

[root@localhost ~]# docker attach adbbad846b1b
You cannot attach to a stopped container, start it first            #此错误为容器未启动

[root@localhost ~]# docker start adbbad846b1b                #启动容器
adbbad846b1b

[root@localhost ~]# docker attach adbbad846b1b               #进入容器

[root@adbbad846b1b /]# ls /tmp                               #查看目录
anaconda-ks.cfg  ks-script-4luisyla  ks-script-o23i7rc2  ks-script-x6ei4wuu

8、查看容器资源使用率

[root@localhost ~]# docker stats

CONTAINER ID   NAME           CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O   PIDS
adbbad846b1b   busy_hawking   0.00%     544KiB / 3.682GiB   0.01%     656B / 0B   0B / 0B     1

9、查看容器进程状态

[root@localhost ~]# docker ps -a 

CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
adbbad846b1b   centos    "/bin/bash"   6 minutes ago   Up 4 minutes             busy_hawking

[root@localhost ~]# docker top ad 

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                6558                6535                0                   18:16               pts/0               00:00:00            /bin/bash
  1. 10、更新容器配置

--restart=always #在docker服务重启时自动启动容器

[root@localhost ~]# docker update --restart=always ad
ad

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱笑的男孩0522

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值