Docker 容器

Docker容器


容器是Docker的另一个概念。就像我们使用的Vmware一样。需要使用一个镜像再Vmware中创建一个虚拟机,而每一个虚拟机需要一个镜像文件。而Docker 是更加轻量级的实现。

目录

Docker容器

1.创建 Docker 容器

1.1 create 命令与容器运行模式相关选项

1.2 create 命令与容器环境配置相关选项

1.3 create 命令与容器资源限制和安全保护相关的选项

2.创建后启动容器

3.新建并启动容器

3.1 退出错误码

3.2 后台方式运行

4.终止容器

5.重启容器

6.进入容器

6.1 attach 命令

6.2 exec 命令 ✔

6.3 nsenter 命令

7.删除容器

8.导入和导出容器

8.1导出容器

8.2导入容器


 

 

1.创建 Docker 容器

命令 docker create

首先我们看看仓库里有那些镜像,我们选择其中一个

 [root@localhost ~]# docker images
 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
 nginx               latest              ae2feff98a0c        2 weeks ago         133MB
 centos              7                   8652b9f0cb4c        7 weeks ago         204MB

我们选择 centos:7 作为镜像创建容器

 [root@localhost ~]# docker create -it centos:7
 581839129d540425b94a7d404b47358cf4a92504f5bb68ca50790b77913c027d

输出的就是这个容器的 Id

此时并没有启动容器,使用命令 docker ps -a 查看所有的容器

 [root@localhost ~]# docker ps -a
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
 581839129d54        centos:7            "/bin/bash"              4 seconds ago       Created                                  hopeful_ritchie
 27a51051a72c        nginx               "/docker-entrypoint.…"   21 hours ago        Up 21 hours         0.0.0.0:80->80/tcp   webserver

可以看到我们刚刚创建了一个容器 ,此时并没有运行它。如果要运行,要使用 docker start CONTAINER_ID 命令去启动容器,再启动之前,我们继续学习下docker 创建的时候的参数

 

1.1 create 命令与容器运行模式相关选项

1.2 create 命令与容器环境配置相关选项

1.3 create 命令与容器资源限制和安全保护相关的选项

 

其他比较重要的选项还包括

  1. -l;--lable=[] : 以键值对方式指定容器的标签信息

  2. --lable-file=[] : 从文件中读取标签信息

 

2.创建后启动容器

创建容器

 [root@localhost ~]# docker create -it centos:7
 5c259ecd4c3cd553ced9304c5b91c155484ce4d0f6646e6a8027eedcd4ba6f28

查看容器

 [root@localhost ~]# docker ps -a
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
 5c259ecd4c3c        centos:7            "/bin/bash"              3 seconds ago       Created                                  brave_chaplygin
 [root@localhost ~]# docker ps
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES

启动刚刚创建的容器

 [root@localhost ~]# docker start 5c259ecd4c3c
 5c259ecd4c3c

查看容器运行状态

 [root@localhost ~]# docker ps
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
 5c259ecd4c3c        centos:7            "/bin/bash"              33 seconds ago      Up 3 seconds                             brave_chaplygin

可以看到刚刚创建的容器已经启动了

 

3.新建并启动容器

除了创建容器后,使用docker start 命令来启动容器之外,还可以直接创建并启动容器。

使用命令

 [root@localhost ~]# docker run centos:7 /bin/echo 'Hello World'
 Hello World

可以看到容器运行并且输出了 Hello World

如果 centos:7 镜像 不存在,那么会先去下载镜像,然后再运行容器:步骤分解

  1. docker pull centos:7

  2. docker create -it centos7 [会返回容器id]

  3. docker start 容器ID

在输出 Hello World 之后,容器就会自动终止

 

下面的命令用于启动一个 bash 终端,并进行用户交互

 [root@localhost ~]# docker run -it centos:7 /bin/bash
 [root@a643aeead20b /]# uname -a
 Linux a643aeead20b 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

可以使用 exit 命令退出容器

3.1 退出错误码

状态码说明
125Docker deamon 执行出错,例如指定了不支持的 Docker 命令参数
126所指定命令无法执行,例如权限出错
127容器内命令无法找到

 

3.2 后台方式运行

大多数情况下容器都是以后台的形式运行在系统之中的

下面我们创建一个容器,一直输出 hello world

 [root@localhost ~]# docker run -d centos:7 /bin/sh -c "while true;do echo hello world;sleep 1;done"
 cec152dd71186516ebdd7e1a8723ae75fb53a6f2c5490e75cf344df71804730a

使用 docker ps 可以看到 该容器在后台一直运行着

 [root@localhost ~]# docker ps
 CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
 cec152dd7118        centos:7            "/bin/sh -c 'while t…"   About a minute ago   Up About a minute                        unruffled_yalow

通过容器的id查看这个容器输出的信息

 [root@localhost ~]# docker logs cec152dd7118
 hello world
 hello world
 ...

 

4.终止容器

可以使用 docker stop 命令来终止运行的程序

命令格式 : docker stop[-t|--time[=10]][CONTAINER...]

线程会向容器发送 SIGTERM 信号,等待一段超时时间(默认为10s)后,在发送 SIGKILL 信号(强行终止)来终止容器

 

查看运行的容器

 [root@localhost ~]# docker ps
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
 cec152dd7118        centos:7            "/bin/sh -c 'while t…"   5 minutes ago       Up 5 minutes                             unruffled_yalow

终止容器

 [root@localhost ~]# docker stop cec152dd7118
 cec152dd7118

查看正在运行的容器

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

可以看到没有正在运行的容器了

 

5.重启容器

启动一个存在的容器是 使用 docker start CONTAINER_ID 命令实现的。

而要将一个正在运行的容器进行重新启动,将要使用到 docker restart CONTAINER_ID 命令。首先会关闭容器,然后再启动容器。

 

6.进入容器

在使用 -d 参数的时候,容器启动会直接进入后台,用户无法看到容器中的信息,也无法进行操作。

要进入容器进行操作,有很多种方法:

  1. attach 命令

  2. exec 命令

  3. nsenter 命令

 

6.1 attach 命令

attach 是 docker 自带的命令,

命令格式为 docker attach [--detach=keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER

主要支持三个选项

  1. --detach-keys[=[]] : 指定退出 attach 模式的快捷键序列,默认是 CTRL-p CTRL-q

  2. --no-stfin=true|false:是否关闭标准输出,默认是保持打开

  3. --sig-proxy=true|false : 是否代理收到的系统信号给应用程序,默认为 true

运行容器

 [root@localhost ~]# docker run -itd centos:7
 f49c4fca75269848a96dc6f77f6e6a392d7b661bcacde5218ad87b6e3c4d04b8

查看正在运行的容器

 [root@localhost ~]# docker ps
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
 f49c4fca7526        centos:7            "/bin/bash"              7 seconds ago       Up 5 seconds                             brave_banzai

进入容器

 [root@localhost ~]# docker attach brave_banzai
 [root@f49c4fca7526 /]# 

可以看到已经进入到了容器内。但是使用 attach 命令的时候有时候并不是很方便。当多个窗口同时用 attach 命令连到同意容器的时候,所有的窗口都会同步显示。当某个窗口因命令阻塞的时候,其他窗口也无法执行操作了。

 

6.2 exec 命令 ✔

Docker 从 1.3.0 版本提供了一个更加方便地 exec 命令,可以在容器内直接执行任意命令。

命令格式 : docker exec [-d|--detach] [--detach-keys[=[]] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]

参数说明
-i;--interactive=true|false打开标准输入接受用户输入命令,默认为false
--privileged=true|false是否给执行命令以高权限,默认为false
-t;--tty=true|false分配伪终端,默认为false
-u;--user=""执行命令的用户名或ID

使用示例

 [root@localhost download]# docker ps
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
 f49c4fca7526        centos:7            "/bin/bash"              38 minutes ago      Up 3 seconds                             brave_banzai

进入容器

 [root@localhost download]# docker exec -it f49c4fca7526 /bin/bash
 [root@f49c4fca7526 /]# 

这个方式是最为推荐的方式

6.3 nsenter 命令

 

7.删除容器

可以使用 docker rm 命令来删除处于终止或退出状态的容器

命令格式 docker rm[-f|--force][-l|--link][-v|--volumes] CONTAINER[CONTAINER...]

参数说明
-f;--force=false是否强行终止并删除一个运行中的容器
-l;--link=false删除容器的连接,但保留容器
-v;--volumes=false删除容器挂载的数据卷

默认情况下,不能删除正在运行的容器,需要使用 -f 表示强制删除容器。

 

8.导入和导出容器

有些时候, Docker 容器需要从一个系统迁移到另外一个系统,这时候就需要导入和导出容器了。

8.1导出容器

导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态。使用 docker export 命令可以实现

命令格式 docker export [-o|--output[=""]]CONTAINER

其中 -o 选项可以指定导出的 tar 文件名,也可以直接通过重定向来实现

 

8.1.1使用实例

首先查看有那些容器

 [root@localhost download]# docker ps
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
 f49c4fca7526        centos:7            "/bin/bash"              2 hours ago         Up 56 minutes                            brave_banzai

导出容器

 [root@localhost download]# docker export -o centos_7.tar f49c4fca7526

查看当前目录下文件

 [root@localhost download]# ll
 总用量 206756
 -rw-------. 1 root root 211688960 1月   5 17:32 centos_7.tar
 -rw-r--r--. 1 root root     25548 4月   7 2017 mysql57-community-release-el7-10.noarch.rpm

 

8.2导入容器

导出的文件可以通过 docker import 命令导入编程镜像

命令格式 docker import [-c|--change=[]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:TAG]]

用户可以通过 -c;--change=[] 选项在导入的同时执行对容器进行修改的 Dockerfile 指令

 [root@localhost download]# docker import centos_7.tar test:1.0
 sha256:30c704a9b3294b245b0bd102cc16b494522efce3c844432d98658eb219d1a140

查看镜像

 [root@localhost download]# docker images
 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
 test                1.0                 30c704a9b329        16 seconds ago      204MB

 

[实际上,既可以使用 docker load 导入镜像存储文件到本地镜像库,可以使用docker import 命令来导入一个容器快照到本地镜像库]

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值