【docker系列】之容器


​ 这次来说下 容器-container,具体概念在前篇已经讲过,可以移步“ 【docker系列】之概念篇”。下边说下怎样使用容器。

查看容器

[root@coder ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
431a2a5a8cdc        nginx               "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes        80/tcp              pedantic_banzai

上述命令是只查看正在运行中的容器,如果像查看所有的容器(包含已停止的),则使用 -a 参数。

[root@coder ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                          PORTS               NAMES
cff0cada4389        nginx               "/docker-entrypoint.…"   3 minutes ago       Exited (0) 2 minutes ago                            quizzical_margulis
431a2a5a8cdc        nginx               "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes                    80/tcp              pedantic_banzai
b1c05ea925f7        nginx               "/docker-entrypoint.…"   19 minutes ago      Exited (0) 19 minutes ago                           nervous_poitras
a6a7a1f6e6ec        centos              "/bin/bash"              20 minutes ago      Exited (127) 10 minutes ago                         zen_babbage
8337e6d283a7        nginx               "/docker-entrypoint.…"   37 minutes ago      Exited (0) About a minute ago                       nginx

新建并启动

[root@coder ~]# docker run -it centos /bin/bash 
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
3c72a8ed6814: Pull complete 
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
[root@a6a7a1f6e6ec /]# 

docker run命令在镜像篇已经初步讲过,在这里详细讲下此命令所经过的详细步骤:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载

  • 利用镜像创建并启动一个容器

  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层

  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去

  • 从地址池配置一个 ip 地址给容器

  • 执行用户指定的应用程序

  • 执行完毕后容器被终止

    上述命令的其他参数:

    -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上。

    -i 则让容器的标准输入保持打开。

    /bin/bash 表示启动容器后启动bash。可以看到最后执行后显示的是[root@a6a7a1f6e6ec /]#,和命令键入时的[root@coder ~]不同,表示已经进入到容器的bash,其中“root@”后的“a6a7a1f6e6ec”是容器的短ID。

    [root@coder ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                NAMES
    b1c05ea925f7        nginx               "/docker-entrypoint.…"   9 minutes ago       Exited (0) 8 minutes ago                           nervous_poitras
    a6a7a1f6e6ec        centos              "/bin/bash"              9 minutes ago       Exited (127) 19 seconds ago                        zen_babbage
    

启动已有容器

此处的“已有容器“指的是已经处于stopped状态的容器。

[root@coder ~]# docker start nginx
nginx

后台运行

docker run 后需要追加参数-d 。如果不使用此参数,则控制台会打印执行过程,而使用此参数,则只返回一个容器ID。

[root@coder ~]# docker run -d nginx
431a2a5a8cdcb56ec4b1a1d1874367a7afff45099f40a5de17bc422bd51c33fe
[root@coder ~]# docker run nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up

终止容器

[root@coder ~]# docker stop 8337e6d283a7
8337e6d283a7

其中stop后的参数可以是容器短ID,或者完整ID,或者容器名称。

删除容器

[root@coder ~]# docker rm cff0cada4389
cff0cada4389

此命令跟删除镜像差不多,只是rm少了个i,同样的,需要先停止容器才能删除。

如果需要批量删除:

[root@coder ~]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
b1c05ea925f7b00b43ca0d00fd058627a4826f8e30de10345ba7f05b860ba6be
a6a7a1f6e6ecc1b4777d6d0494f054669112030409fb54eafec602f33588edff
8337e6d283a77c26749fdf69b23db126845fd5e0b24629c9279cd00fcc67dc65

Total reclaimed space: 1.199kB

进入容器

attach命令

docker attach 后边跟容器ID,可以进入容器操作。但是此命令进入容器后,如果要跳出此容器,则会使此容器终止。

exec命令

docker exec 通常会跟随两个参数,-i-t ,使用此命令进入容器后,跳出容器可使用exit命令或者ctrl+c ,跳出容器后,容器不会终止运行。

导出容器

如果想导出本地的某个容器,可以使用 docker export 命令。这样可以导出容器快照到本地文件。

[root@iz8vbbc49rkvxedwimwbxcz ~]# docker export d9a9a75a5819 > cloud-good.tar
[root@iz8vbbc49rkvxedwimwbxcz ~]# ls
cloud-good.tar

导入容器快照

可以使用docker import 将容器快照文件中再导入为镜像。

[root@iz8vbbc49rkvxedwimwbxcz ~]# cat cloud-good.tar | docker import - test/cloud-good:v1.0 
sha256:257cdaa616428864c5f1a21eb11d627f5fe2583b769c196a238a4649b5fb8958
[root@iz8vbbc49rkvxedwimwbxcz ~]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
test/cloud-good        v1.0                257cdaa61642        12 seconds ago      684MB

注意:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值