一、说明

        docker的四个要素是:本地的Docker-engine、网上(本地)的仓库、镜像images、容器;初学者必须了解这是个概念的关系。但是,真正重要的概念是容器,因为,只有掌握了容器,才能具备一定创造力,才能用Docker构建项目,才能最后实现Docker真实价值。

        本篇讲述当Docker安装完成后,在engine服务、image命令都掌握后,对容器进行的由浅入深的操作过程。

二、容器和Docker其它要素的关系

docker的是个要素和它们之间的关系:

trivy镜像例子 镜像和实例_trivy镜像例子

  •  仓库:是用来存放镜像的数据库,一般在远端官方服务器上,客户可以用registry建立本地仓库,这是后话。
  • 镜像:镜像相当于图纸,是用于生成容器这种产品的模板。
  • 引擎:是管理本地dacker运作的服务软件,包括:客户端、通信模块、用户指令管理、拉起各种app实现运行等。
  • 容器:容器是在本地真正参与项目的独立隔间、每个隔间内有操作系统、各种目的的进程;可以与容器之外的对象通信,比如:容器和容器通信。

        在以上四个方面,容器是重中之重,也是最复杂、最关键的Docker内容,本文下面将详细解释容器的种种操作指令。

三、容器指令

3.1 命令格式

        注意:docker命令有两种,一种是docker manager 命令,另一种是docker命令;docker管理层命令只是增加了中间层,表明该命令是针对哪些对象,比如:

docker pull nginx   和  docker image pull nginx        一样的。
docker run  nginx   和  docker container run nginx     一样的。

3.2 容器种类

        容器种类有多种,根据不同容器,需要对容器内部的进程进行输入、输出操作,因此选择的命令参数不同。

提示:容器从运行方式上存在多种,现说明三种:

  • <1>    运行一次就退出:此容器不驻留内存,执行一遍就退出进程。无需参数。
  • <2>   守护进程,该容器相当于服务进程被拉起,驻留内存,无交互模式。需要-it参数
  • <3>    交互式守护进程:可以与终端进行交互,驻留内存,需要 -d参数。
  • <4>   网络进程:是网络进程,就需要端口映射这样的参数,-p 或 -P。

        因为以上的不同,参数选项也不同,因此,存在用错参数的可能性,务必注意。

3.3 容器命令总览

命令

描述

docker container attach

将本地标准输入、输出和错误流附加到正在运行的容器

docker container commit

从容器的更改创建新镜像

docker container cp

在容器和本地文件系统之间复制文件/文件夹

docker container create

创建一个新容器

docker container diff

检查容器文件系统上文件或目录的更改

docker container exec

在正在运行的容器中运行命令

docker container export

将容器的文件系统导出为 tar 存档

docker container inspect

Display detailed information on one or more containers

docker container kill

Kill one or more running containers

docker container logs

Fetch the logs of a container

docker container ls

List containers

docker container pause

Pause all processes within one or more containers

docker container port

List port mappings or a specific mapping for the container

docker container prune

Remove all stopped containers

docker container rename

Rename a container

docker container restart

Restart one or more containers

docker container rm

Remove one or more containers

docker container run

Run a command in a new container

docker container start

Start one or more stopped containers

docker container stats

Display a live stream of container(s) resource usage statistics

docker container stop

Stop one or more running containers

docker container top

Display the running processes of a container

docker container unpause

Unpause all processes within one or more containers

docker container update

Update configuration of one or more containers

docker container wait

Block until one or more containers stop, then print their exit codes

四、命令用法和案例

4.1  docker run命令

         这是第一个容器命令,创建一个新的容器并运行一个命令。docker run 相当于执行了两API:

  • /containers/create   生成
  • /containers/(id)/start 启动

1  命令形式:

docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

        此命令从image复制一个容器,并启动;因此,不可长期执行,否则复制出一堆相同的容器,ID号不同。

2  option选项参数

options

说明

-i  

 以交互模式运行容器,通常与 -t 同时使用

-t    

启动容器后,为容器分配一个命令行,通常与 -i 同时使用

-v  

 

 目录映射,容器目录挂载到宿主机目录,格式: <host目录>:<容器目录>

-d    

守护进程,后台运行该容器

-p  

 指定端口映射,格式:主机(宿主)端口:容器端口

-P

随机端口映射,容器内部端口随机映射到主机的端口(49153起始 49153到65535)

–name

“nginx-lb”    容器名字

-m,

--memory bytes    设置容器使用内存最大值

-h,

--hostname string    指定容器的 host name

–dns

8.8.8.8    指定容器 dns 服务器

 

-e

username=“ritchie”    设置环境变量

 

–restar

t Docker    重启Docker-Engine后,容器是否自动重启

–privileged 

   容器内是否使用真正的 root 权限

-u 

   以什么用户身份创建容器

3 参数用法案例

 示例1:  -it  选项和交互式容器 
执行一个docker命令:

docker run ubuntu:20.04

        再用docker ps查看,发现没有容器执行,这是因为像ubuntu这样的容器,一定是交互式的,因此用交互式参数才能启动。

docker run -it  ubuntu:20.04  bash

可以看到,进入容器内部提示符号。两种退出交互容器方式:

  •      exit退出容器交互,容器退出。用docker ps看不到ubuntu容器。
  •     ctl+p+q退出容器交互,容器驻留。用docker ps看到ubuntu容器。

 示例2:  -d  选项和后台运行

 同样的命令加-d后:

docker run -it  -d ubuntu:20.04  bash

ubuntu将在后台启动,通过docker ps可以看到,这里提出新问题,如何进入ubuntu?

 示例3:  -name  选项 

docker run -it  -d  --name myubuntu ubuntu:20.04  bash

这里用--name给容器起名,否则的话,系统随意起了个名字。

4.2 docker exec命令

  这是进入容器内部操作系统的命令。必须带-it交互终端的参数。

  • 命令格式:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • 命令意义:

        进入已经后台启动的docker容器中。由于可进入容器必须是交互式容器,因此,这里必须是-it选项,bash或/bin/bash启动shell对话。

        注意: exec命令后面必跟-it参数!

  • 命令案例1
docker exec -it  ubuntu:20.04  bash

        进入已经后台运行的ubuntu中。注意,此时用exit退出后,容器依然在运行,这和run 指令不同。注意:这里-it 和后面的bash是固定搭配。

4.3 docker ps 命令

语法:


docker ps [OPTIONS]


参数有,OPTIONS说明:

  • -a :显示所有的容器,包括未运行的。
  • -f :根据条件过滤显示的内容。
  • --format :指定返回值的模板文件。
  • -l :显示最近创建的容器。
  • -n :列出最近创建的n个容器。
  • --no-trunc :不截断输出。
  • -q :静默模式,只显示容器编号。
  • -s :显示总的文件大小。

案例1:-a查看所有

docker ps -a

将显示运行的,暂停的容器。

案例2:-q查看容器编号显示

docker ps -q

此命令显示所有在启动容器编号。 

案例3:--no-trunc :不截断输出。

docker ps --no-trunc

显示容器的全信息,包括status,如图:

trivy镜像例子 镜像和实例_docker_02

4.4 docker rm 命令

docker rm :删除一个或多个容器。

语法


docker rm [OPTIONS] CONTAINER [CONTAINER...]


OPTIONS说明

  • -f :通过 SIGKILL 信号强制删除一个运行中的容器。
  • -l :移除容器间的网络连接,而非容器本身。
  • -v :删除与容器关联的卷。

案例1:强制删除容器 db01、db02:


docker rm -f db01 db02


案例2:移除容器 nginx01 对容器 db01 的连接,连接名 db:


docker rm -l db


案例3:删除容器 nginx01, 并删除容器挂载的数据卷:


docker rm -v nginx01


案例4:删除所有已经停止的容器:


docker rm $(docker ps -a -q)


案例5:删除某镜像生成的所有容器

        删除所有imaeID=  cae5f8e9bd47的容器

docker rm $(docker ps -a | grep cae5f8e9bd47 | awk '{print $1}')

解释:这里用到shell的命令,grep,awk,意思是:

1)将docker ps -a 的结果看成一个文件,该文件内满足grep和awk的项目被挑选出。

2)grep意义:将一个输入文本文件,将文中有某字段(以上cae5f8e9bd47)的行挑选出来。

3)awk意义:将文件中所有行的第n列挑选出来。上面的'{print $1}'就是指的第一列。

4.5 docker commit命令

docker commit :从容器创建一个新的镜像。也就是从某个容器返回镜像的操作:

trivy镜像例子 镜像和实例_运维_03

 语法


docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]


OPTIONS说明:

  • -a :提交的镜像作者;author作者。
  • -c :使用Dockerfile指令来创建镜像;
  • -m :提交时的说明文字;memory即记号的意思。
  • -p :在commit时,将容器暂停。

案例1:提交镜像 

docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1

注意:这里的mymysql:v1是【镜像名字:tag】如果不给出v1,tag默认为latest。

4.6 docker cp命令

docker cp :用于容器与主机之间的数据拷贝。

语法


docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-


docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH


OPTIONS说明:

  • -L :保持源目标中的链接

案例1:

  • 将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。

docker cp /www/runoob 96f7f14e99ab:/www/


  • 将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。

docker cp /www/runoob 96f7f14e99ab:/www


  • 将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。

docker cp 96f7f14e99ab:/www /tmp/


五、后记

        并不是说docker的容器命令就是完结,而是这里只罗列第一批应该掌握的命令,以后内容将很多,那将在本文的续篇讨论。