Docker 常用命令

镜像命令

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

# 搜索仓库镜像
# --no-trunc:显示完整的镜像描述
# --filter=stars=100:列出收藏数不小于指定值的镜像
# --filter=is-automated=true:只列出 automated build 类型的镜像
# --filter=is-official=true:显示官方镜像
docker search mysql --filter=stars=100

# 下载 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)
# 删除 none 镜像
docker images | grep none | awk '{print $3 }' | xargs docker rmi
docker rmi `docker images | grep  '<none>' | awk '{print $3}'`
docker rmi `docker images -q -f dangling=true`
docker rmi $(docker images -q -f dangling=true)

其它命令

# 清理磁盘,删除关闭的容器,无用的数据卷和网络
docker system prune -a

 

容器命令

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

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

关于 -d 参数:

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

容器运行的命令如果不是那些一直挂起的命令(比如运行 top,tail),就会自动退出。例如 docker run -d centos,然后使用 docker ps -a 进行查看, 会发现容器已经退出。

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

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

管理容器

# 启动容器
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 ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm

查看容器日志

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

# 查看最后十条日志
# -t:是加入时间戳
# -f:跟随最新的日志打印
# --tail 数字:显示最后多少条
docker logs -f -t --tail 10 容器ID

其它命令

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

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

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

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

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

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

 

数据卷命令

Docker 容器产生的数据在可写层,如果不通过 docker commit 生成新的镜像,使得数据成为镜像的一部分保存下来,那么当容器删除后,数据就没有了。Docker 提供了三种数据 Mount 方式:

这里主要记录 Volumes 方式,也就是图中的 Docker area,也是 Docker 推荐的方式。

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此 Docker 不会在容器删除时删除其挂载的数据卷。特点:

  • 数据卷可在容器之间共享或重用数据
  • 卷中的更改可以直接生效
  • 数据卷中的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直持续到没有容器使用它为止
# 查看
docker volume ls

# 类似于挂载目录
docker run -it -v /宿主机目录:/容器内目录 centos /bin/bash

# 也可以使用 docker volume create,默认挂载在宿主机的 /var/lib/docker/volumes/ 目录下
docker volume create 卷名称
docker run -it --volume 卷名称:/容器内目录 centos /bin/bash

可以看到这里把宿主机 /tmp 目录挂载到容器内 /home 目录了。也可以使用命令查看数据卷是否挂载成功。

docker inspect 容器ID

关于宿主机和容器之间数据同步

无论容器是运行还是停止,对宿主机的挂载目录所做的修改,在容器启动后都会映射到容器内对应目录。同样的,在容器内,对挂载目录的操作都会映射到宿主机对应目录。

挂载目录权限:https://docs.docker.com/engine/reference/run/#volume-shared-filesystems

docker run -it -v /宿主机目录:/容器内目录:ro centos /bin/bash

数据卷容器

命名的容器挂载数据卷,其它容器通过挂载这个容器(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。容器间传递共享:--volumes-from

docker run --name="cent0" -it -v /tmp:/home1 centos /bin/bash
docker run --name="cent1" -it -v /tmp:/home2 --volumes-from cent0 centos /bin/bash
docker run --name="cent2" -it -v /tmp:/home3 --volumes-from cent0 centos /bin/bash

创建三个容器:

  • 第一个容器挂载 /tmp:/home,后面子容器挂载的目录不会影响父容器
  • 第二个容器基于第一个容器,且又挂载了 /tmp:/home2,所以可以看到两个目录:/home1、/home2
  • 第三个容器基于第一个容器,且又挂载了 /tmp:/home3,所以可以看到两个目录:/home1、/home3,与第二个容器无关

删除掉父容器再看子容器目录挂载情况

可以到删除父容器后不影响子容器的挂载目录。

结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。

https://docs.docker.com/storage/volumes

 

网络命令

# 查看
docker network ls

 


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

posted @ 2019-08-28 20:27  江湖小小白  阅读(382)  评论(0编辑  收藏  举报