简介

上一篇文章演示了如何按照dockker和配置镜像仓库加速器,这篇文章就了解一下最常用的五个命令以及初步的使用



五个最常用命令

docker最常用的五个命令为下面这五个

命令 作用
docker run 运行容器
docker ps 查看正在运行的容器
docker ps -a 查看所有容器(包括已停止)
docker images 查看本地镜像
docker rm docker rmi 删除容器 / 镜像

docker run

第一个运行命令在我们做测试的时候已经用到了

docker run hello-world

这个命令就是运行hello-world这个镜像,本地没有的会自己从仓库拉取

run命令参数

参数 示例 作用
-d docker run -d nginx 后台运行容器(detached 模式)
--name --name mynginx 给容器起个好名字
-p -p 8080:80 端口映射(宿主机:容器)
-v -v /data:/data 挂载卷(宿主机:容器)
-e -e VAR=VALUE 设置环境变量
--rm 容器退出时自动删除
--restart --restart always 设置重启策略
-it -it ubuntu /bin/bash 交互模式(进入容器执行命令)
--network --network host 指定网络模式
--cpu-shares / --memory --memory 500m 资源限制

-d参数

这个参数用于后台运行容器

这个是我们没有使用任何参数直接运行的样子,会在终端一直显示

图片1

我们按【CTRL】+【C】停止,使用下面命令后台运行,可以看到只显示了一个容器ID

docker -d nginx

图片2

--name参数

这个参数用于给容器命名

我们使用下面命令查看我们之前运行过的容器

docker ps -a

可以看到我们没用命名都是随机名字

3.png

我们使用--name参数从新运行一个容器

docker run -d --name webnginx nginx

4.png

-p参数

这个参数是映射端口的,例如现在我们启动的nginx的监听端口是80,但是没有隐藏出来,这就会导致访问不到我们启动的容器,所以

5.png

我们使用-p参数映射端口重新启动一个容器,这个参数的填写可以这样理解,先填外部端口在填内部端口,用:分开

docker run -d --name webnginx1 -p 8080:80 nginx

可以看到启动容器后把容器的80端口映射到8080端口了

6.png

这时候访问安装docker的这台机器的8080端口就可以访问到docker的webnginx1这个容器的80端口了

-v参数

这个参数用于挂载卷,就是在宿主机和容器之间建立一个共享的文件夹,叫做挂载卷(volume)

这样容器里的进程可以访问、读写宿主机的文件,也可以让宿主机看到容器里的文件变化,如果填写的是一个不存在的文件夹,docker会自己创建

我们使用下面命令重新运行一个容器,-v参数后面先填写docker所在的机器也就是宿主机的文件夹路径,然后使用:分开,后面是docker的容器路径

docker run -d --name webnginx2 -p 8080:80 -v /docker-v/nginx:/data nginx

然后使用下面命令查看挂载

docker inspect

这时候会输出一大串配置,我们只需要找到"Mounts"这部分,可以看到我们刚刚填写的两个路径就成功了

7.png

-e参数

这个是设置环境变量,例如在docker里面运行mysql,官方就要求需要加环境变量,但是我们演示的是nginx,这个不需要加变量,我们为了演示也可以加一个

docker run -d --name webnginx3 -p 8080:80 -v /docker-v/nginx:/data -e TEST=123 nginx

运行后我们使用下面命令查看环境变量

docker exec -it 容器名称 env

8.png

同时设置多个变量

-e参数可以传输多个变量,只需要在-e后面写多个变量即可,变量与变量间用空格隔开,例如下面

-e TEST=123 TESA=456 TESB=789

如果变量很多,可以写到一个文件里面,文件名称为xxx.list,然后使用--env-file参数,例如下面

先创建一个变量文件,名称为xxoo.list,存放位置为更目录下的docker-env目录下的nginx目录下

9.png

然后在里面写入变量,一个变量一行,保存并退出

10.png

然后--env-file参数启动

docker run -d --name webnginx4 -p 8080:80 -v /docker-v/nginx:/data --env-file /docker-env/nginx/xxoo.list nginx

在使用docker exec -it webnginx4 env查看变量

11.png

--rm参数

这个参数用于当容器退出停止时删除容器,一般用于执行脚本,当这个脚本执行完毕后自动删除脚本

我这里继续使用nginx演示

可以发现上面我演示的启动,每次启动nginx的时候名称都会不同,因为每次使用run命令一次就会新建一个容器,当停止的时候是不会自动删除的,就像下图,我现在其实以及有很多容器了

12.png

我继续启动一个新的容器,名称为webnginx5,这里就不加上面启动的参数了,不然命令会越来越长

docker run -d --name webnginx5 --rm nginx

可以看到,现在又加了一个名称为webnginx5的容器,现在的状态是UP

13.png

当我们停止的时候这个容器就会删除

14.png

--restart参数

这个参数用于定义容器的重启策略,默认是no,也就是不重启,有下面几个常用策略

策略 含义
no(默认) 容器退出后不自动重启
always 不管因为什么退出,Docker 始终重启容器(包括 docker daemon 重启后也会拉起来)
on-failure[:N] 当容器**因错误退出(退出码非0)**时才重启,可选最多重启 N 次
unless-stopped 容器退出后总是重启,但如果你手动 stop,就不再自动重启(重启 Docker daemon 也不会再自动启动)

例如我现在想要nginx5这个容器始终重启,包括重启docker或者是重启docker这台宿主机后都会自动启动

docker run --d --name webnginx5 --restart=always nginx

15.png

修改现有容器的重启策略

使用下面命令修改现有容器的重启策略

docker update --restart=always 容器名

例如我刚刚的策略是always,这个策略会导致不管我怎么停止他都会重启,而容器在运行的时候我是删除不了的,需要先停止,但是我停止了又会自动重启,这就套娃了,所以想要停止就需要先修改重启策略

docker update --restart=no webnginx5

16.png

注意的是update这个命令并不能修改所有的初始参数,只能修改重启策略,内存限制,CPU限制

功能 命令示例
修改重启策略 docker update --restart=always mycontainer
修改内存限制 docker update --memory 500m mycontainer
修改 CPU 限制 docker update --cpus 1.5 mycontainer

docker update 只能改部分运行时可变参数,一旦涉及镜像/卷/网络/端口/环境变量 → 必须删除旧容器重新 run

-it参数

这个参数解释起来有点复杂,这个是一个交互模式,例如你在docker里面跑了一个ubuntu容器,现在需要在里面的ubuntu里面进行一些命令行交互操作,那么就需要这个参数

首先启动容器,-d后台运行,-it启用交互,--name命名为yubuntu,ubuntu镜像名称

docker run -dit --name yubuntu ubuntu

然后需要和里面的ubuntu这个容器交互的时候就输入下面命令,使用docker exec命令进入容器,-it是保持输入分配一个虚拟终端,yubuntu是容器名称,bash是想要运行的shell,使用这个命令后就可以像在本地终端一样操作容器了。

docker exec -it yubuntu bash

如果想要退出容器的交互,可以按【CTRL】+【D】或者是在容器的终端中输入exit即可退出

--network参数

这个参数用于指定你的容器的网络模式

网络模式 说明 备注
bridge 默认网络模式,容器有自己的私有网络,通过桥接与宿主机通信 默认值
host 容器和宿主机共用网络栈,容器不隔离网络,性能最好 -p映射端口无效,因为和宿主机共享网络后端口使用的宿主机的端口
none 容器没有网络接口,完全隔离 容器没有网络连接,适合安全隔离需求
自定义网络名 连接到你自己创建的自定义网络,方便容器间通信 需要自己创建一个网络,可以让其他容器加入进来实现互联互通

例如现在我现在运行一个新容器,指定网络模式为完全隔离

docker run -d --rm --network none --name webnginx6 nginx

可以看到是运行状态但是没有网络

17.png

创建并加入自定义网络

默认 bridge 网络,容器间只能用 IP 通信,不支持 DNS 容器名解析

自定义网络自动启用内置 DNS,容器名直接变成域名,方便访问

网络隔离更灵活,可以创建多个不同网络,隔离不同应用

创建的网络用于docker里面的容器互通,在外部是摸不着看不到的,外部访问容器仍然通过-p参数加端口映射访问

使用下面命令可以创建网络,这时候会创建一个名称为mynet的网络

docker network create mynet

然后在启动容器的时候加入这个网络即可

docker run -d --rm --name webnginx6 -p 8080:80 --network mynet nginx

可以使用docker inspect 容器名称查询加入的网络

18.png

可以使用下面命令查询现有网络

docker network ls

19.png

--memory参数

则会个参数用于限制容器的内存资源

例如我现在新建一个容器,我只需要给512M的内存,就需要使用这个参数,如果是G为单位的话可以写为参数后面可以写为1G,这个是硬限制,如果容器需要的内存比你给的打,那么这个容器会被kill

docker run -d --rm --name webnginx6 --memory=512M -p 8080:80 nginx

可以使用docker inspect 容器名称 | grep -i memory命令查看刚刚限制的内存,这里面显示的是字节,并不是直接显示多少M,我们可以算一下,1024字节是1K,1024K是1M,我们使用536870912去除以两次1024即可得出512

20.png

--cpu-shares参数

这个参数只是一个CPU的调度权重,是一个相对值,并不是要给绝对值,例如我现在又两个容器,一个我使用这个参数设置了值为512,另个容器是1024,当CPU忙不过来的时候,1024这个容器使用CPU的时间是512的这个容器的两倍,所以这个值没有固定的,可以是1可以是2,如果一个容器是1,一个容器是2,那么2这个容器使用CPU的时间仍然是1这个容器的两倍

下面是参数的使用命令

docker run -d --cpu-shares=1 nginx
固定指定CPU核

上面那个参数并不是硬限制,当CPU不忙的时候是没有作用的,如果需要硬限制,例如我我像指定这个容器只能使用半核CPU,则可以使用--cpus这个参数

例如我现在处理器4核的,每个核心有100%的运算能力,我使用这个参数--cpus=0.5,那么不管这个处理器空闲还是忙,都只能用一个核心的50%的算力。

如果我的参数是--cpus=2,那么就是把这颗处理器的一半也就是两个核心给他了

下面是参数使用示例

docker run -d --cpus=2 nginx


查看在运行容器命令

该命令用于查看在运行的容器

docker ps

21.png



查看所有容器命令

该命令用于查看docker所有的容器,包括停止的

docker ps -a

22.png



查看本地镜像命令

该命令用于查看以及拉取到本地的镜像文件

docker images

23.png



删除容器命令

在删除容器之前,是需要先停止容器的,不然是删除不了的

停止容器

docker stop 容器名称

24.png

删除容器

docker rm 容器名称

25.png



删除镜像命令

删除镜像的时候,必须确定使用该镜像的容器以及删除,需要先删除容器才能删除镜像

下面这个就是没有删除容器的示例,在删除镜像的时候就会报错

26.png

我们先删除容器,然后在删除镜像就可以了

27.png



停止容器命令

停止命令上面有用过

docker stop 容器名称


启动容器命令

当我们使用docker run命令创建一个容器,后面停止后就需要启动容器命令来启动,而不是使用docker run命令来启动了

docker start 容器名称

28.png



重启容器命令

docker restart 容器名称

29.png

二维码

发表评论