Docker 常用命令

Docker 理念:一次构建,到处运行

Docker 核心概念:

  • 镜像:类似于虚拟机的镜像,可以理解为只读的模板,包含了文件系统。一个镜像可以创建多个容器(镜像和容器类似于 Java 中 Class 类和其实例对象)。
  • 容器:容器是从镜像创建的实例,可以将其启动、开始、停止、删除。容器都是相互隔离、互不可见的(Docker 容器是基于 Linux Containers,简称 LXC)。
  • 仓库:集中存放镜像文件的地方。如 maven 的中央仓库集中存放 jar 包,GitHub 集中存放代码。Docker 官方提供的仓库叫 DockerHub,当然也有第三方仓库。

Docker 工作模式:

  • Docker 是一个 Client-Server 结构的系统。Docker 守护进程运行在主机上, 客户端通过 Socket 连接访问,守护进程从客户端接受命令并管理运行在主机上的容器。
  • Docker 不需要 Hypervisor 实现硬件资源虚拟化,直接使用实际物理机的硬件资源。
  • Docker 利用的是宿主机的内核,不需要 Guest OS(即不需要重新加载一个操作系统内核)。

一、帮助命令

# 版本
docker version

# 信息
docker info

# 帮助
docker --help

二、镜像命令

# 查看本地镜像
docker images

# 常用参数
# -a:列出本地所有的镜像(含中间映像层)
# -q:只显示镜像ID。
# --digests:显示镜像的摘要信息
# --no-trunc:显示完整的镜像信息

# 搜索仓库镜像
docker search xxxxxx

# 常用参数
# --no-trunc:显示完整的镜像描述
# --filter=stars=100:列出收藏数不小于指定值的镜像
# --filter=is-automated=true:只列出 automated build 类型的镜像
# --filter=is-official=true:显示官方镜像

这里可以看到镜像的详细信息和历史版本:https://hub.docker.com/

# 下载 mysql 镜像最新版
docker pull mysql
docker pull mysql:latest

# 下载 mysql 镜像 5.7.27 版
docker pull mysql:5.7.27

# 删除 mysql 镜像最新版
docker rmi mysql
docker rmi mysql:latest

# 删除 mysql 镜像 5.7.27 版
docker rmi mysql:5.7.27

# 强制删除
docker rmi -f 镜像ID
# 删除多个
docker rmi -f mysql:latest mysql:5.7.27
# 删除全部
docker rmi -f $(docker images -qa)

三、容器命令

# 下载一个最新的 centos 镜像
docker pull centos

# 新建并启动容器,格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run --name="test" -it centos /bin/bash

# 常用 OPTIONS:有些是一个减号,有些是两个减号
# --name="xxx":为容器指定一个名称;
# -d:后台运行容器,并返回容器 ID,即启动守护式容器;
# -i:以交互模式运行容器,通常与 -t 同时使用;
# -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
# -P:(大写)随机端口映射;
# -p:(小写)指定端口映射,有四种格式:
#     ip:hostPort:containerPort
#     ip::containerPort
#     hostPort:containerPort
#     containerPort

可以看到 shell 已经进入到容器内

关于 -d 参数:

Docker 容器后台运行,就必须有一个前台进程。

容器运行的命令如果不是那些一直挂起的命令(比如运行 top,tail),就会自动退出。

例如 docker run -d centos,然后使用 docker ps -a 进行查看, 会发现容器已经退出。

# 容器停止退出
exit

# 容器不停止退出
ctrl + P + Q

# 查看容器
docker ps

# 常用参数
# -a:列出当前所有正在运行的容器 + 历史上运行过的。
# -l:显示最近创建的容器。
# -n:显示最近n个创建的容器。
# -q:静默模式,只显示容器编号。
# --no-trunc:不截断输出。

管理容器

# 启动容器
docker start 容器ID或容器名

# 重启容器
docker restart 容器ID或容器名

# 停止容器
docker stop 容器lD或容器名

# 强制停止容器
docker kill 容器ID或容器名

# 删除已停止的容器
docker rm 容器ID
# 删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q l xargs docker rm

 查看容器日志

# 新建容器并运行
docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"

# 查看最后十条日志
docker logs -f -t --tail 10 容器ID

# -t:是加入时间戳
# -f:跟随最新的日志打印
# --tail 数字:显示最后多少条

其它命令

# 查看容器内运行的进程
docker top 容器ID

# 查看容器详情信息
docker inspect 容器ID

# 容器开机自启动
docker update --restart=always 容器ID

# 修改容器名字
docker rename 容器ID 新名称

# 进入正在运行的容器并以命令行交互
docker exec -it 容器ID /bin/bash
docker attach 容器ID
# attach:直接进入容器启动命令的终端,不会启动新的进程
# exec:是在容器中打开新的终端,并且可以启动新的进程

# 从容器内拷贝文件到主机上,格式:docker cp 容器ID:容器内路径 目的主机路径
docker cp 960f553ed428:/tmp/abc.txt tmp/def.txt

https://docs.docker.com/engine/reference/commandline/docker/

原文地址:https://www.cnblogs.com/jhxxb/p/11413453.html