如题,本文将总结常用的Docker基础命令,包括但不限于:帮助启动类命名;镜像命令;容器命令。
帮助启动类命令
启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl enable docker
开即自启:systemctl enable docker
查看docker概要信息:docker info
docker帮助文档:docker --help
docker某一命令帮助文档:docker 命令 --help
镜像命令
列出本地主机上的镜像:
docker images
-a:列出本地全部的镜像(all)
-q:只显示镜像ID (quiet,静默模式)
返回结果中,
REPOSITORY
代表仓库名,即镜像名,TAG
指镜像的版本号。
去docker仓库中搜索镜像:
docker search 镜像名
返回结果有5个参数,分别指:
参数 | 说明 |
---|---|
NAME | 镜像名称 |
DESCRIPTION | 镜像说明 |
STARS | 点赞数量 |
OFFICIAL | 是否官方 |
AUTOMATED | 是否为自动构建的 |
拉取镜像:docker pull 镜像名
,完整形式为:
docker pull [OPTIONS] 镜像名:TAG
如果只写了镜像名,则默认TAG为latest,即最新发布版。
删除指定本地镜像:
docker rmi [OPTIONS] 镜像名[:TAG]/ID
如果只写了镜像名,则默认TAG为latest,但如果你的本地没有该镜像的latest版本,就会删除失败。
删除单个:docker rmi 镜像名[:TAG]/ID
删除多个:docker rmi 镜像名1:TAG/ID 镜像名2:TAG/ID
强制删除:-f ,会直接删除镜像的所有容器
删除全部:docker rmi -f $(docker images -qa) ==> 小心坐牢
容器命令
新建+启动容器:
docker run [OPTIONS] 镜像 [COMMAND] [ARG]
其中,OPTIONS非常重要,几个最常用的有:
–name=“容器名字”: 为容器起名,不起的化随机
-i:以交互模式运行容器,通过与-t同时使用
-t:为容器重新分配一个伪输入终端,通过与-i同时使用
-it 也即交互式容器(前台有伪终端,等待交互)
-d:后台运行容器并返回容器ID,也即启动守护式容器(后台运行)
-p:指定端口映射,小写p,如
-p 3306:3306
指将主机的3306端口映射到该容器内的3306端口-P:随机端口映射,大写P
-e:创建环境变量
注意,并不是所有的镜像都能够以-d
来后台运行,比如ubuntu、centos这些交互式镜像,就需要有一个前台来交互,所以对他们而已,使用-d
并不能使其持久化。但是,那些服务类的镜像,比如tomcat、mysql、redis等等,虽然镜像是构建在Linux文件系统上的,但是他们可以通过-d
来后台运行。
另外,有镜像才能创建容器,当运行run时,会首先在本地寻找是否有该镜像,如果没有,就去docker仓库中将该镜像拉取到本地,然后在创建容器。
可以通过-e
来在改容器中创建一个指定值的环境变量,之后每次进入该容器都可以直接使用,如:
docker run -d --name=r2 -e A=123 redis:6.0.8
列出当前所有在运行中的容器:
docker ps [OPTIONS]
-a:列出当前所有正在运行的容器+历史上运行过的容器(如果容器没被删除)
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:只显示容器编号
停止容器:
docker stop 容器名/ID
启动停止的容器:
docker start 容器名/ID
重启容器:
docker restart 容器名/ID
从容器中退出:
1. exit:退出容器并使容器停止
2. ctrl+p+1:退出容器但容器不会停止
删除容器:
docker rm [OPTIONS] 容器名/ID
强制删除:-f,如果不加的化,只能删除停止的容器
删除全部容器:docker rm -f $(docker ps -a -q) ==> 小心坐牢
查看容器日志:
docker logs 容器名/ID
查看容器内的进程信息:
docker top 容器名/ID
查看容器内部细节:
docker inspect 容器名/ID
在容器内部运行指令
docker exec [OPTIONS] 容器名/ID COMMAND [ARG...]
docker exec
会在容器内部运行COMMAND指令。实际上,容器就是个极小的Linux环境,它包含最必须的文件系统,因此实则时该Linux环境在执行这条命令。每个容器都会有一个默认的工作目录,该目录会在镜像的Dockerfile
中指定,如果不另外指定的化,容器将在该目录下执行指令。
COMMAND should be an executable, a chained or a quoted command will not work. Example:
docker exec -ti my_container "echo a && echo b"
will not work, butdocker exec -ti my_container sh -c "echo a && echo b"
will.
比如,在mysql镜像构建的容器中使用命令date:
最关键的,之前有提到退出容器,那么退出容器后怎么再次进入呢?答案就是exec
。进入容器,实际上就是使用容器的终端,因此首先要让容器打开一个终端,故将COMMAND设为/bin/bash
或简写为bash
。但是此时我们并不能进入这个终端,因为容器并不是交互时运行的,因此还需要使用OPTIONS-it
来指定其为交互式运行,才能进入这个容器内的终端。故命令为:
# docker exec -it 容器名/ID /bin/bash
docker exec -it 容器名/ID bash
当然,类似于run
,exec
也可以通过-e
来在容器中创建一个环境变量。但是不同于前者,exec
创建的环境变量只能在本次执行过程中使用,一旦退出容器,下次再进入就没有该变量了。
另一个非常重要的特性是,使用exec -it .. bash
进入的容器,在exit
退出之后,不会停止!与其相对应的,是attach
命令,该命令也可也进入容器,但是用exit
退出之后会导致容器的停止。
从容器内拷贝文件到主机上:
docker cp 容器名/ID:容器内路径 目的主机路径
该命令会将指令的容器内路径中的所有文件,全部拷贝到目的主机,是简单的备份方式。
导入和导出容器
export
可以导出容器的内容留作一个tar
归档文件。import
可以从tar
包中的内容创建一个新的文件系统再导入为镜像,注意,是生成镜像,而不是创建容器。
docker export 容器名/ID > 文件名.tar
cat 文件名.tar | docker import - [镜像用户/]镜像名[:TAG]
总结
这里继续借用尚硅谷阳哥画的一张图来总结