Docker常用命令
思维导图:
1. docker介绍
1.1. 基本概念
Docker 包括三个基本概念:
● 镜像(Image):Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
● 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
● 仓库(Repository):仓库(Repository)类似Git的远程仓库,集中存放镜像文件。
1.2. 关系图
2. 帮助启停类命令
2.1. 启动docker
systemctl start docker
2.2. 停止docker
systemctl stop docker
2.3. 重启docker
systemctl restart docker
2.4. 设置开机启动
systemctl enable docker
2.5. 查看docker版本信息
2.5.1. 简略版本信息
docker -v
2.5.2. 详细版本信息
docker version
2.6. 查看docker概要信息
docker info
2.7. 查看docker帮助
docker --help
2.8. 查看docker具体命令帮助
docker 具体命令 --help
2.9. 查看docker状态
systemctl status docker
3. 镜像命令
3.1. 已导入的镜像操作
3.1.1. 列出已导入镜像
docker images [OPTIONS] [ARGS]
3.1.2. 说明
示例:
各选项说明:
同一仓库源可以有多个TAG版本,代表这个仓库源的不同版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只使用 redis,docker 将默认使用 redis:latest 镜像。
OPTIONS说明:可以通过docker images --help 查看OPTIONS
-a : a表示all,列出本地所有的镜像(含历史映像层)
-q :只显示镜像ID。
ARGS说明:可以直接写镜像名,比如centos,mysql等等,就是直接查对应的镜像信息。
3.2. 远程仓库中搜索某个镜像
远程仓库为 https://hub.docker.com,也可以配置了国内仓库(例如阿里仓库)。
搜索镜像命令如下:
docker search [OPTIONS] 镜像名字
示例:
OPTIONS说明:可以通过docker search --help查看OPTIONS
--limit int: 只列出int个镜像,默认25个
docker search --limit 5 redis
3.3. 从远程仓库下载镜像
下载镜像命令:
docker pull 镜像名字[:TAG]
#不写TAG就是最新版本
docker pull 镜像名字
#等价于
docker pull 镜像名字:latest
3.4. 查看镜像/容器/数据卷所占的空间
执行命令:
docker system df
3.5. 删除镜像(通过镜像ID)
3.5.1. 删除单个镜像
#-f 表示强制删除
docker rmi -f 镜像ID
3.5.2. 删除多个镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG
3.5.3. 删除全部镜像
docker rmi -f $(docker images -qa)
3.6. 导出镜像
docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS 说明:
-o :输出到的文件。
示例:
docker save -o my_ubuntu_v1.tar test/ubuntu:v1
3.7. 导入镜像
docker load [OPTIONS]
OPTIONS 说明:
--input , -i : 指定导入的文件,代替 STDIN。
--quiet , -q : 精简输出信息。
示例:
docker load < test.tar.gz
4. 容器命令
有镜像才能创建容器。
4.1. 创建容器(启动容器)
创建容器命令:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
说明:
OPTION说明:有些是一个减号,有些是两个减号。
--name="容器别名" 为容器指定一个名称
-d:后台运行容器并返回容器ID(启动守护容器)
-i:以交互模式运行容器,通常与-t同时使用;
-t: 为容器重新分配一个伪输入终端,通常与-i同时使用;即启动交互式容器(前台有伪终端,等待交互);
-P:随机端口映射,大写P;
-p:指定端口映射,小写p;
4.1.1. 针对 -i -t的说明
i:interactive 交互的意思;t:tty 终端的意思。
4.1.2. 关于-i -t 与 -it的区别
i是创建标准io接口,t是伪造tty终端;如果光一个i的话,虽然也可以输入命令得到输出,但结果很不友好,自己可以试试;如果光一个t,就只有一个tty,你输入什么都没有反应,因为你没有开放对应的输入接口;正确的应该是-it,开放接口并创建伪tty。
4.1.3. 启动交互式容器(前台命令行)
###使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it centos /bin/bash
参数说明:-i: 交互式操作。-t: 终端。centos : centos 镜像。/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。要退出终端,直接输入 exit。
###使用镜像centos:latest以交互模式启动一个容器,并指定容器名,在容器内执行/bin/bash命令。
docker run -it --name=mycontainer1 ubuntu /bin/bash
4.2. 列出当前所有正在运行的容器
执行命令:
docker ps [OPTIONS]
OPTIONS说明(常用):
-a:列出当前所有正在运行的容器+历史上运行过的容器;
-l:显示最近创建的容器;
-n:显示最近n个创建容器;
-q:静默模式,只显示容器编号
4.3. 退出容器
两种退出方式:
1. exit:run进去容器,exit退出,容器停止
2. ctrl+p+q:run进去容器,ctrl+p+q退出,容器不停止
4.4. 启动已停止运行的容器
docker start是启动已有容器,docker run是新建并启动容器,这里需要区分开。
docker start 容器ID或者容器名
4.5. 重启容器
docker restart 容器ID或者容器名
4.6. 停止容器
docker stop 容器ID或者容器名
4.7. 强制停止容器
docker kill 容器ID或容器名
4.8. 删除容器
在删除之前需要先停止容器,然后执行以下命令:
docker rm 容器ID
强制删除容器,容器运行时可以直接删除:
docker rm -f 容器ID
4.9. 一次性删除多个容器示例
#方式一
docker rm -f $(docker ps -a -q)
#方式二
docker ps -a -q | xargs docker rm
4.10. 启动守护式容器(后台服务器)
在大部分的场景下,我们希望 docker 的服务是在后台运行的, 我们可以过 -d 指定容器的后台运行模式。
docker run -itd 容器名
说明:
如果只执行`docker run -d 容器名`,使用命令`docker ps -a`查看,会发现容器已经退出。出现该情况的原因是:docker容器后台运行,就必须有一个前台进程;器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。解决方案是:将你要运行的程序以前台进程的形式运行,常见就是-it命令行模式,表示后续还有交互操作。
4.11. 查看容器日志
docker logs 容器ID
4.12. 查看容器内运行的进程
docker top 容器ID
4.13. 查看容器内部细节
docker inspect 容器ID
4.14. 进入正在运行的容器并以命令行交互(exec)
docker exec -it 容器ID /bin/bash
4.15. attach进入
docker attach 容器ID
exec和attach的区别:
attach 直接进入容器启动命令的终端,不会启动新的进程 用exit退出,会导致容器的停止。
exec 是在容器中打开新的终端,并且可以启动新的进程 用exit退出,不会导致容器的停止。
推荐大家使用 docker exec 命令,因为退出容器终端,不会导致容器的停止。
以进入正在运行的redis服务为例:
docker exec -it 容器ID /bin/bash
docker exec -it 容器ID redis
4.16. 从容器内拷贝文件到主机上
从 容器 ->(拷贝到) 宿主主机:
docker cp 容器ID:容器内路径 目的主机路径
4.17. 导出容器
docker export 容器ID > 文件名.tar
4.18. 导入容器快照
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号