Docker中常用的命令
1、帮助命令
[1]、显示docker的版本信息
docker version
[2]、显示docker的系统信息
docker info
[3]、查看docker中命令的用法
docker --help
2、镜像相关命令
[1]、查看镜像
# 查看本地主机上的镜像
docker images [OPTIONS]
# 查看本地所有的镜像
docker images -a
OPTIONS说明:
- -a:列出本地所有的镜像(含中间镜像层)
- -q:只显示镜像ID
- --digests:显示镜像的摘要信息
- --no-trunc:显示完整的镜像信息
各个选项说明:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像的最后时间
- SIZE:镜像的大小
[2]、搜索镜像
# 从网络中查找需要的镜像,可以通过以下命令搜索
docker search [OPTIONS] 镜像名称
# 例如搜索mysql
docker search mysql
# 搜索镜像并且是官方的
docker search --filter "is-official=true" mysql
# 搜索镜像并starts大于多少的
docker search --filter stars=10 mysql
OPTIONS说明:
- --filter=:过滤
- --no-trunc:只显示完整的镜像描述
- --automated:只列出automated build类型的镜像
各个选项说明:
- NAME:仓库名称
- DESCRIPTION:镜像的描述
- STARS:类似Github里面的Star,表示点赞(热度),反应一个镜像的受欢迎程度
- OFFICIAL:是否为官方发布的镜像
- AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
[3]、从DockerHub上搜索
出了通过上面的docker search
来搜索镜像之外,还可以去Docker Hub搜索,包括官方镜像和其它公开镜像。官方网址:https://hub.docker.com/search?type=image
[4]、拉取镜像
拉取镜像就是从远程Docker仓库下载镜像到本地。
# 特别注意:如果版本号不指定则默认最新的版本
docker pull 镜像名称
docker pull 镜像名称:版本号
# 例如下载mysql5.7镜像
docker pull mysql:5.7
下载一个 nginx
的镜像 , 需要注意:如果下载的时候,不指定版本,会下载最新的版本。
[5]、删除镜像
# 按照镜像id删除镜像
docker rmi 镜像ID
# 按照镜像id删除镜像,-f强制删除
docker rmi -f 镜像ID
#删除多个,按照镜像id
docker rmi -f 镜像ID 镜像ID 镜像ID
#删除多个,按照镜像名
docker rmi -f 镜像名1:TAG 镜像名2:TAG
#删除全部的镜像
docker rmi -f $(docker images -qa)
删除刚刚下载的 nginx
镜像。
3、容器相关命令
[1]、列出正在运行的容器
docker ps [OPTIONS]
OPTIONS说明:
- -a:列出当前所有正在运行的容器+历史上运行过的
- -l:显示最近创建的容器
- -n:显示最近n个创建的容器
- -q:静默模式,只显示容器编号
- --no-trunc:不截断输出
[2]、创建与启动容器(重要)
① 、什么是宿主机?
说简单点就是主机,比如我们的虚拟机(Linux)是运行在Windows系统上的,那么相对于虚拟机而言,此时正在使用的计算机就是宿主机。那么我们安装的Docker容器的宿主机则是虚拟机,因为它运行在虚拟机上的。
②、创建容器命令:
#创建容器命令如下
docker run [OPTIONS] 镜像ID/镜像名称 [COMMAND]
#创建并启动容器的简单举例
docker run -it --name=mycentos centos:7 /bin/bash
# /bin/bash:放在镜像名后的是命令,表示容器创建之后执行,这里我们希望有个交互式Shell,因此用的是 /bin/bash
OPTIONS说明(注意:下面的每一个参数都非常重要):
- -i:以交互模式运行容器,通常与-t同时使用
- -t:为容器中心分配一个伪输入终端,通常与-i同时使用。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
- -d:后台运行容器,并返回容器ID,也即启动守护式容器(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)
- --name=容器新名字(=可以用空格代替):为创建的容器命名。
- -p:表示端口映射,格式为:主机(宿主)端口:容器端口。前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
- -h:设置容器主机名hostname。
- -v 或者 --volume:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
- -m :设置容器使用内存最大值;
- -e username="ritchie": 设置环境变量,例如给MySQL设置用户名和密码等;
- --net="bridge": 指定容器的网络连接类型,支持 bridge(会在主机上创建一个名为docker0的虚拟网桥);host(和宿主机共用);none(拥有自己的Network Namespace,需要自己配置);container(和已经存在的一个容器共享) 四种类型;
- --restart=unless-stopped:随着docker的启动而启动。docker容器启动策略,有这些参数:no,默认策略,在容器退出时不重启容器;on-failure,只有在非0状态退出时才重新启动容器;no-failure:3,在容器非正常退出时重启容器,最多3次;always,无论退出状态如何都重启容器;unless-stopped,在容器退出时总是重启,但不包括Docker守护进程启动时就已经停止的容器(说简单就是不重启Docker容器中已经停止的容器);
- --privileged=true:授权,防止容器创建失败
(1) 交互式方式创建容器
以交互式方式创建并启动容器,启动完成后,直接进入当前容器。使用exit命令退出容器。需要注意的是以此种方式启动容器,如果退出容器,则容器会进入停止状态。可以理解成交互式容器 是前台容器。
#简单举例
docker run -it --name=mycentos centos:7 /bin/bash
# -it:表示运行容器并进入它的命令行
# --name=mycentos:给当前的容器命名
# centos:7:使用该镜像创建容器
# /bin/bash:放在镜像名后的是命令,表示容器创建之后执行的命令,这里我们希望有个交互式Shell,因此用的是 /bin/bash
创建好容器,并且已经进入到容器内部了,可以直接观察前面中括号里面的内容发现,跟创建容器之前不一样了,并且 通过 ll
命令会发现,其实容器内部也是一个 centos
, 我们可以把每个容器都看成一个小电脑或者服务器。
然后查看刚刚创建的容器是否已经有了,这里要使用docker ps -a
才行,因为此时不是后台运行的容器。
(2) 守护式方式创建容器:
docker run -id --name=mycentos2 centos:7
查看 docker 容器是否已经运行:
[3]、进入正在运行的容器
上面创建的守护式容器可以通过这个命令进入:
docker exec -it 容器名称或者容器ID /bin/bash
[4]、启动容器、重启容器
#启动容器
docker start 容器ID或者容器名
#一次启动多个
docker start $(docker ps -a -q)
#重启容器
docker restart 容器ID或容器名
[5]、停止容器
最好先通过 docker ps
查看正在运行的容器
#停止容器
docker stop 容器ID或容器名
#强制停止容器
docker kill 容器ID或容器名
#一次停止多个
docker stop $(docker ps -a -q)
[6]、删除容器
#删除已停止的容器
docker rm 容器ID或容器名
#强制删除容器(包括运行中的)
docker rm -f 容器ID或容器名
#一次性删除多个容器
docker rm -f $(docker ps -a -q)
[7]、容器的其它命令
#查看容器日志
docker logs 容器ID或容器名
#查看容器详细信息
docker inspect 容器ID或容器名
#列出或指定容器端口映射
docker port 容器ID或容器名
#显示一个容器运行的进程
docker top 容器ID或容器名
[8]、文件拷贝
将linux宿主机中的文件拷贝到容器内可以使用命令:
docker cp 需要拷贝的文件或目录 容器ID或名称:容器内路径
#例如如下命令:
docker cp a.txt mycentos2:/usr/local/
将容器中的文件拷贝到linux宿主机中使用如下命令:
docker cp 容器名称:容器目录 需要拷贝的文件或目录
#例如如下命令:
docker cp mycentos2:/usr/local/a.txt ./
[9]、目录挂载(重要)
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器,这样我们就可以直接在宿主机上操作容器中的文件了,所以一般我们都会进行目录的挂载,对于mysql的存储文件路径,一般都会挂载到容器里,因为容器一旦删除了数据也就不再了,但是宿主机的数据不会被删除。操作:在创建容器时 添加-v参数;后边为 宿主机目录:容器目录,例如:
# 创建并启动容器mycentos3,并挂载linux中的/usr/local/mytest目录到容器的/usr/local/mytest;
# 也就是在linux中的/usr/local/mytest操作相当于对容器相应目录操作
docker run -di --name=容器的名字 -v 宿主机目录:容器目录 --name=容器名称 centos:7
#比如:
docker run -it --name=mycentos3 -v /usr/local/mytest:/usr/local/mytest centos:7 /bin/bash
#这样无论我们在宿主机上还是在容器中,在这个目录下对文件做了增删改操作,那么两边都是同步的。
注意:挂载的目录不用提前创建好,会自动创建。
4、迁移与备份相关命令
迁移与备份涉及到的命令有:
docker commit 容器名 镜像名
:将容器保存为镜像docker save –o tar文件名 镜像名
:将镜像备份为tar文件docker load -i tar文件名
:根据tar文件恢复为镜像
[1]、容器保存为镜像
我们可以通过以下命令将容器保存为镜像
# 容器为镜像的命令:docker commit 容器名 镜像名
# 保存nginx容器为镜像
docker commit mynginx mynginx_i
然后使用 docker images
查看生成的镜像。
[2]、镜像备份
我们可以通过以下命令将镜像保存为tar 文件
# 命令形式:docker save –o tar文件名 镜像名
# 保存镜像为文件 -o:表示output 输出的意思
docker save -o mynginx.tar mynginx_i
通过 save 保存成文件之后,在通过 ls 命令进行查看当前目录是否有 tar文件
[3]、镜像恢复与迁移
首先我们先删除掉docker中的 mynginx_i 镜像,然后执行此命令进行恢复
# 命令形式:docker load -i tar文件名
#-i:表示input输入的文件
docker load -i mynginx.tar
执行后再次使用 docker images
查看镜像,可以看到镜像已经恢复。