Docker实战006:docker容器使用详解

Docker/容器
310
0
0
2022-03-29
标签   Docker

Docker容器也是docker的核心成员,是docker镜像的一个运行实例。一个镜像可以创建多个容器,多个容器也可以在同一台机器上运行并与其他容器共享操作系统内核同时将应用程序与系统其它周围环境隔离(类似于沙箱)。每个容器在用户空间中作为孤立进程运行,容器内可以独立运行应用程序并配置相关的运行环境(包括文件系统、系统库类、shell环境、系统工具,设置等)。

Docker实战006:docker容器使用详解

Docker容器创建

docker创建容器可以通过docker create 和 docker run两个命令来实现,区别在于docker create用于创建一个处于静止状态的容器,虽然创建了一个新的容器但不启动它。而docker run 则是在创建容器的同时将其运行起来,相当于 docker create + docker start containerId。容器的创建是基于镜像的,所以我们需要指定基础镜像来创建容器(这个镜像可以是本地的,也可以是远程仓库的)。docker create创建容器的语法格式为:docker create [OPTIONS] IMAGE [COMMAND] [ARG...],具体的Options选项我们可以通过--help来获取。

Docker实战006:docker容器使用详解

容器有两种类型分别是交互型容器和后台型容器,交互型容器是通过docker的两个参数 -i -t让docker运行的容器具备"对话"的能力,允许对容器内的标准输入 (STDIN) 进行交互。后台型容器则没有交互式会话并长期运行在后台,适合运行应用程序和服务。创建一个基于Centos7镜像的容器,如果本地不存在该镜像则会自动从Docker Hub上下载。

Docker实战006:docker容器使用详解

查看docker容器

我们可以通过命令:docker ps -a 可以查看所有容器(docker ps 列出的是所有正在运行的容器),包括未运行的容易也可以查看到。如果想要获取容器更加详细的信息可以使用docker inspect命令来获取,这个命令会以json字符串的形式返回全部信息,里面以key:value的格式显示了该容器相关的所有信息,也可以通过添加Options选项来返回指定key对应的信息。

Docker实战006:docker容器使用详解

启动docker容器

启动容器可以通过命令:docker start containet来启动一个已经停止的容器,这里的container可以是容器ID或者是容器的名称。容器ID支持模糊查询,容器名称则必须输入完整。我们还可以通过指定参数来实现交互或者启动一个bash交互终端,容器启动之后可以通过docker ps来查看正在运行的容器。

Docker实战006:docker容器使用详解

进入docker容器

启动docker容器之后我们经常需要进入容器操作,进入Docker容器可以通过docker官方命令attach、exec和第三方工具ssh、nsenter来实现。当多个窗口同时docker attach到同一个容器时所有的窗口都会同步地显示,如果其中一个窗口发生阻塞则其它的窗口也会阻塞。docker exec是docker 1.3版本之后提供进入容器的新命令,该命令至少需要提供2个参数方可进入一个已经在运行的容器。使用ssh需要在容器中安装openssh-server服务,启动容器的时候我们可以通过参数-p来为docker中的ssh服务端口映射新的端口,这样我们就可以通过新端口来访问docker容器了。nsenter是个外部工具(需要安装在主机上),通过docker容器的进程ID进入docker容器。

Docker实战006:docker容器使用详解

退出docker容器

退出docker容器很简单,只要通过命令:exit (快捷键Ctrl+D)直接快速退出容器,也可以通过组合快捷键:Ctrl+P+Q来退出当前容器。

Docker实战006:docker容器使用详解

停止docker容器

停止容器可以通过命令:docker stop containet来停止一个已经启动的容器,同样这里的container可以是容器ID或者是容器的名称。容器ID支持模糊查询,容器名称则必须输入完整。

Docker实战006:docker容器使用详解

删除docker容器

删除docker容器可以通过命令:docker rm container来完成一个或多个容器的删除,这里的container是容器ID(容器ID支持模糊查询)。也可以通过组合命令来实现容器的快速删除,比如docker rm $(docker ps -qf status=exited)中的docker ps -qf status=exited就可以查询所有的容器并过滤出Exited状态的容器, 这样就可以批量删除Exited状态的容器!

Docker实战006:docker容器使用详解

总结:

以上内容是小编给大家分享的【Docker实战006:docker容器使用详解】,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

为了方便学习,下面附上本文用到的源码:

# docker create --help
# docker create -it centos:7
Unable to find image 'centos:7' locally
7: Pulling from library/centos
75f829a71a1c: Pull complete 
Digest: sha256:19a79828ca2e505eaee0ff38c2f3fd9901f4826737295157cc5212b7a372cd2b
Status: Downloaded newer image for centos:7
# docker ps -a
CONTAINER ID     IMAGE       COMMAND      CREATED     STATUS       PORTS        NAMES
e54e37738c93    centos:7   "/bin/bash" 2 minutes ago  Created                 happy_robinson
# docker inspect centos:7
# docker start --help
Usage:  docker start [OPTIONS] CONTAINER [CONTAINER...]
Start one or more stopped containers
Options:
  -a, --attach                  Attach STDOUT/STDERR and forward signals--checkpoint string       Restore from this checkpoint--checkpoint-dir string   Use a custom checkpoint storage directory--detach-keys string      Override the key sequence for detaching a container
  -i, --interactive             Attach container's STDIN
# docker ps -a
CONTAINER ID     IMAGE       COMMAND      CREATED     STATUS       PORTS        NAMES
e54e37738c93    centos:7   "/bin/bash" 2 minutes ago  Created                 happy_robinson
# docker start e54
e54
# docker ps
CONTAINER ID    IMAGE       COMMAND       CREATED       STATUS        PORTS       NAMES
e54e37738c93   centos:7   "/bin/bash"  43 minutes ago  Up 15 seconds           happy_robinson
[root@localhost ~]# docker attach e54
[root@e54e37738c93 /]#    //从docker attach命令进入容器中exit会导致容器停止。
-------------------------------------------------------------------
[root@localhost ~]# docker exec -it e54e /bin/bash    //至少提供2个参数
[root@e54e37738c93 /]#    //从docker exec命令进入容器中exit不会停止容器。
-------------------------------------------------------------------
[root@e54e37738c93 /]# yum install -y openssh-server
[root@localhost ~]# docker run -p 222222 centos:7
--------------------------------------------------------------------------
[root@e54e37738c93 /]# read escape sequence   // 组合快捷键:Ctrl+P+Q
[root@localhost ~]# 
----------------------------------------------------------------------
[root@e54e37738c93 /]# exit                   // 快捷键:Ctrl+D
[root@localhost ~]# 
# docker ps
CONTAINER ID   IMAGE      COMMAND      CREATED      STATUS       PORTS        NAMES
e54e37738c93  centos:7  "/bin/bash"  2 hours ago  Up 52 minutes             happy_robinson
# docker stop e54
e54
# docker ps
CONTAINER ID   IMAGE      COMMAND      CREATED      STATUS       PORTS        NAMES
# docker ps -a
CONTAINER ID   IMAGE      COMMAND      CREATED      STATUS       PORTS        NAMES
e54e37738c93  centos:7   "/bin/bash" 2 hours ago  Exited (137) 2 minutes ago  happy_robinson
# docker stop $(docker ps -q)  // 停用全部运行中的容器
# docker rm --help
Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]
Remove one or more containers
Options:
  -f, --force     Force the removal of a running container (uses SIGKILL)
  -l, --link      Remove the specified link
  -v, --volumes   Remove anonymous volumes associated with the container-----------------------------------------------------------------------------
# docker rm e54e37738c93                    // 删除指定ID的容器
# docker rm $(docker ps -qf status=exited)  // 删除Exited状态的容器
# docker rm $(sudo docker ps -a -q)         // 删除所有未运行的容器 (已经运行的删除不了,未运行会一起被删除)