【docker概念和实践 5】容器命令和案例(1)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

 一、说明

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

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

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

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

  •  仓库是用来存放镜像的数据库一般在远端官方服务器上客户可以用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 inspectDisplay detailed information on one or more containers
docker container killKill one or more running containers
docker container logsFetch the logs of a container
docker container lsList containers
docker container pausePause all processes within one or more containers
docker container portList port mappings or a specific mapping for the container
docker container pruneRemove all stopped containers
docker container renameRename a container
docker container restartRestart one or more containers
docker container rmRemove one or more containers
docker container runRun a command in a new container
docker container startStart one or more stopped containers
docker container statsDisplay a live stream of container(s) resource usage statistics
docker container stopStop one or more running containers
docker container topDisplay the running processes of a container
docker container unpauseUnpause all processes within one or more containers
docker container updateUpdate configuration of one or more containers
docker container waitBlock 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
–dns8.8.8.8    指定容器 dns 服务器
 
-eusername=“ritchie”    设置环境变量
 
–restart Docker    重启Docker-Engine后容器是否自动重启
–privileged    容器内是否使用真正的 root 权限
-u    以什么用户身份创建容器

3 参数用法案例

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

docker run ubuntu20.04

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

docker run -it  ubuntu20.04  bash

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

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

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

 同样的命令加-d后

docker run -it  -d ubuntu20.04  bash

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

 示例3  -name  选项 

docker run -it  -d  --name myubuntu ubuntu20.04  bash

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

4.2 docker exec命令

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

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

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

  • 命令案例1
docker exec -it  ubuntu20.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如图

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的命令grepawk意思是

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

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

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

4.5 docker commit命令

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

 语法

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

OPTIONS说明

  • -a :提交的镜像作者

  • -c :使用Dockerfile指令来创建镜像

  • -m :提交时的说明文字

  • -p :在commit时将容器暂停。

案例1提交镜像

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

注意这里的mymysql:v1是【镜像名字tag】如果不给出v1tag默认为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的容器命令就是完结而是这里只罗列第一批应该掌握的命令以后内容将很多那将在本文的续篇讨论。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker