二、Docker容器基础管理

一、替换镜像的仓库

编辑 /etc/docker/daemon.json文件(不存在),加入阿里云的镜像

{  
  "registry-mirrors": ["https://n6syp70m.mirror.aliyuncs.com"]
}

  

二、容器命令基础

①查看系统信息

> docker system info 或者 > docker info 

执行之后会产生如下信息:

像上图,可以看到当前docker中容器数量是3个,并且3个都停止了。

②查看帮助手册

> docker help

docker 1.13之后,为了方便命令的管理,分为了Management Commands 和 Commands,就像上面获取系统信息的的两个命令分别是Management Command 和 Command两者是兼容的,下面是一些常用命令的对应关系。

 ③命令选项

上图中可以看到 Options,这里面有 -v --version 这样的命令,

  -叫做短选项

  --叫做长选项

  -a -q 如果组合到一起  -aq 就称为复合选项

  如果什么都不写就是无选项

 

三、容器的生命周期管理

1.创建容器

A. docker run 命令

# Management Commands
$ docker container run [OPTIONS] IMAGE [COMMAND [ARGS...]]
# 旧命令格式如下:
$ docker run [OPTIONS] IMAGE [COMMAND [ARGS...]]

docker container run 命令会在指定的镜像 IMAGE 上创建一个可写的容器(因为镜像是只读的),然后开始运行指定的命令 [COMMAND [ARGS...]]。

  -i 或 --interactive, 交互模式

  -t 或 --tty, 分配一个 pseudo-TTY,即伪终端

  --rm 在容器退出后自动移除

  -p 将容器的端口映射到主机

  -v 或 --volume, 指定数据卷

举例:

[root@TBEARZ206458 ~]# docker container run busybox echo "hello xxx" 
Unable to find image 'busybox:latest' locally latest:
Pulling from library/busybox bdbbaa22dec6:
Pull complete Digest:
sha256:6915be4043561d64e0ab0f8f098dc2ac48e077fe23f488ac24b665166898115a Status:
Downloaded newer image for busybox:latest
hello xxx 

本地找镜像【busybox】找不到然后没从镜像仓库下载,然后运行。

什么是BusyBox镜像:https://blog.csdn.net/chengqiuming/article/details/79313539

在执行命令之后,容器就会退出,如果我们需要一个保持运行的容器,最简单的方法就是给这个容器一个可以保持运行的命令或者应用

对于交互式的进程而言(例如这里的 bash),必须将 -i 和 -t 参数一起使用,才能为容器进程分配一个伪终端,

通常我们会直接使用 -it  做交互

通常以 -d 参数指定容器以后台模式运行

举例:运行一个Ubuntu的镜像

[root@TBEARZ206458 ~]# docker container run -it ubuntu /bin/bash 
root@ec2ee18aded3:/#

ec2ee18aded3 是容器的ID,可以通过 docker container ls -a 查看所有容器

[root@TBEARZ206458 ~]# docker container ls -a 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ec2ee18aded3 ubuntu "/bin/bash" 15 minutes ago Up 13 minutes exciting_morse

 

B.docker Create 命令

docker run 命令的作用并不是创建一个容器,而是在一个新的容器中运行一个命令。

# Management Commands
$ docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]
# 旧的命令格式如下:
$ docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

该命令执行之后,会创建一个可执行的容器,但是不是马上执行。

l  --name 指定一个容器名称,未指定时,会随机产生一个名字

l  --hostname 设置容器的主机名

l  --mac-address 设置 MAC 地址

l  --ulimit 设置 Ulimit 选项

我们可以通过其对容器运行时的一些资源进行限制。

ulimit 可以参考 https://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/ ,而对于在下面我们将要设置的部分值的含义,可以参考 https://access.redhat.com/solutions/61334 。

 

举例:

[root@TBEARZ206458 ~]# docker container create \ 

>--name TestUbuntu  \ 

>--hostname TestUbuntuHostName \  

>--mac-address 01:02:03:04:05:06 \  

>--ulimit nproc=1024:2048 \ 

>-it ubuntu /bin/bash

创建完成之后会生成一个很长的ID:

 对应的使用 docker container ls -a 可以看到所有的容器信息: 是Create状态

2.容器的启动与停止

启动

# Management Commands
$ docker container start [OPTIONS] CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker start [OPTIONS] CONTAINER [CONTAINER...]  

停止

# Management Commands
$ docker container stop CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker stop CONTAINER [CONTAINER...] 

重启

# Management Commands
$ docker container restart CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker restart CONTAINER [CONTAINER...] 

举例:创建一个容器,并启动、关闭、重启。  

创建
[root@TBEARZ206458 ~]# docker container create  --name MyContainer  --hostname MyContainerHostName  -it ubuntu /bin/bash
78e90b182e622174cd1028b00ec5efe5a8d572e70787279e84a36abd539b85a4
[root@TBEARZ206458 ~]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
78e90b182e62        ubuntu              "/bin/bash"         9 seconds ago       Created                                        MyContainer
c77f432bc04b        ubuntu              "/bin/bash"         27 minutes ago      Created                                        TestUbuntu
ec2ee18aded3        ubuntu              "/bin/bash"         About an hour ago   Exited (0) 3 minutes ago                       exciting_morse

[root@TBEARZ206458 ~]# docker container start MyContainer
MyContainer
[root@TBEARZ206458 ~]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
78e90b182e62        ubuntu              "/bin/bash"         51 seconds ago      Up 2 seconds                                   MyContainer
c77f432bc04b        ubuntu              "/bin/bash"         28 minutes ago      Created                                        TestUbuntu
ec2ee18aded3        ubuntu              "/bin/bash"         About an hour ago   Exited (0) 3 minutes ago                       exciting_morse

[root@TBEARZ206458 ~]# docker container stop MyContainer
MyContainer
[root@TBEARZ206458 ~]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS               NAMES
78e90b182e62        ubuntu              "/bin/bash"         About a minute ago   Exited (0) 2 seconds ago                       MyContainer
c77f432bc04b        ubuntu              "/bin/bash"         28 minutes ago       Created                                        TestUbuntu
ec2ee18aded3        ubuntu              "/bin/bash"         About an hour ago    Exited (0) 4 minutes ago                       exciting_morse

[root@TBEARZ206458 ~]# docker container restart MyContainer
MyContainer
[root@TBEARZ206458 ~]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS               NAMES
78e90b182e62        ubuntu              "/bin/bash"         About a minute ago   Up 1 second                                    MyContainer
c77f432bc04b        ubuntu              "/bin/bash"         29 minutes ago       Created                                        TestUbuntu
ec2ee18aded3        ubuntu              "/bin/bash"         About an hour ago    Exited (0) 4 minutes ago                       exciting_morse 

综上 docker run 命令实际上是一个组合的操作,创建并启动  

3.容器中进程的暂停与恢复  

暂停容器进程  

# Management Commands
$ docker container pause CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker pause [OPTIONS] CONTAINER [CONTAINER...]

举例暂停

[root@TBEARZ206458 ~]# docker container pause MyContainer
MyContainer
[root@TBEARZ206458 ~]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
78e90b182e62        ubuntu              "/bin/bash"         2 hours ago         Up 2 hours (Paused)                          MyContainer
c77f432bc04b        ubuntu              "/bin/bash"         2 hours ago         Created                                      TestUbuntu
ec2ee18aded3        ubuntu              "/bin/bash"         3 hours ago         Exited (0) 2 hours ago                       exciting_morse

恢复容器进程

# Management Commands
$ docker container unpause CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker unpause [OPTIONS] CONTAINER [CONTAINER...]

举例 恢复  

[root@TBEARZ206458 ~]# docker container unpause MyContainer
MyContainer
[root@TBEARZ206458 ~]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
78e90b182e62        ubuntu              "/bin/bash"         2 hours ago         Up 2 hours                                   MyContainer
c77f432bc04b        ubuntu              "/bin/bash"         2 hours ago         Created                                      TestUbuntu
ec2ee18aded3        ubuntu              "/bin/bash"         3 hours ago         Exited (0) 2 hours ago                       exciting_morse

4.查看容器列表

刚刚已经实践过了

# Management Commands
$ docker container ls [OPTIONS]
# 旧的命令格式如下:
$ docker ps [OPTIONS]

常用参数

 -a 显示所有的容器

 -q 仅显示 ID

 -s 显示总的文件大小

 

5.连接到容器中

容器一般运行于后台中,需要使用 attach 操作将本地标准输入输出流连接到一个运行中的容器

# Management Commands
$ docker container attach [OPTIONS] CONTAINER
# 旧的命令格式如下:
$ docker attach [OPTIONS] CONTAINER

举例:

[root@TBEARZ206458 ~]# docker container attach MyContainer
root@MyContainerHostName:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@MyContainerHostName:/#

6.查看元数据

# Management Commands
$ docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker inspect [OPTIONS] CONTAINER [CONTAINER...]

举例:

[root@TBEARZ206458 ~]# docker container inspect MyContainer | grep Name
        "Name": "/MyContainer",
                "Name": "no",
            "Name": "overlay2"
            "Hostname": "MyContainerHostName",
[root@TBEARZ206458 ~]#

7.显示进程信息

显示运行中的容器的进程信息

# Management Commands
$ docker container top CONTAINER
# 旧的命令格式如下:
$ docker top CONTAINER

举例:

[root@TBEARZ206458 ~]# docker container top MyContainer
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                24171               24155               1                   14:09               ?                   00:00:00            /bin/bash

8.查看文件修改  

# Management Commands
$ docker container diff CONTAINER
# 旧的命令格式如下:
$ docker diff CONTAINER 

主要是用于对比容器前后的改变

举例: 在容器中创建一个文件,并对比改变  

[root@TBEARZ206458 ~]# docker container attach MyContainer 
root@MyContainerHostName:/# touch A.txt
root@MyContainerHostName:/# exit
[root@TBEARZ206458 ~]# docker container diff MyContainer
A /A.txt
C /root
A /root/.bash_history 

A代表 Add

C代表 Change  

  

9.容器中执行命令

除了使用 docker container run 执行命令之外,我们还可以在一个运行中的容器中执行命令,使用如下格式:

 $ docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]

举例

[root@TBEARZ206458 ~]# docker container exec MyContainer echo "DSB" DSB 

10.删除容器

# Management Commands
$ docker container rm [OPTIONS] CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker rm [OPTIONS] CONTAINER [CONTAINER...] 

举例删除掉所有的容器,包含运行当中的

[root@TBEARZ206458 ~]# docker container rm -f $(docker container ls -aq) c77f432bc04b ec2ee18aded3  

 

posted @ 2020-03-02 15:39  奋斗的大橙子  阅读(399)  评论(0编辑  收藏  举报