Docker常用命令
- Docker常用命令
-
- 1. 帮助启动类命令
-
- 1.1 启动docker:`systemctl start docker`
- 1.2 停止docker:`systemctl stop docker`
- 1.3 重启docker: `systemctl restart docker`
- 1.4 查看docker状态:`systemctl status docker`
- 1.5 开机启动:`systemctl enable docker`
- 1.6 查看docker概要信息: `docker info`
- 1.7 查看docker总体帮助文档: `docker --help`
- 1.8 查看docker命令帮助文档: `docker 具体命令 --help`
- 2. 镜像命令
- 3. 容器命令
- 4. 悬空镜像
Docker常用命令
1. 帮助启动类命令
1.1 启动docker:systemctl start docker
1.2 停止docker:systemctl stop docker
1.3 重启docker: systemctl restart docker
1.4 查看docker状态:systemctl status docker
1.5 开机启动:systemctl enable docker
配置开机启动后下次启动Linux系统时,会自动启动docker服务
1.6 查看docker概要信息: docker info
1.7 查看docker总体帮助文档: docker --help
1.8 查看docker命令帮助文档: docker 具体命令 --help
2. 镜像命令
2.1 列出本地主机上的镜像 :docker images 【OPTIONS】
列出本地主机上的镜像 docker images
同一个仓库源可以有多个TAG版本,代表这个仓库源的不同个版本,我们使用REPOSITORY:TAG来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用Ubuntu,docker将默认使用Ubuntu:latest镜像 (最新的镜像)
2.2 列出远程仓库相关镜像 :docker search 【OPTIONS】镜像名字
列出远程仓库中redis相关镜像(默认是前25个)
docker search redis
列出远程仓库中redis相关镜像的前5个
docker search --limit 5 redis
2.3 下载镜像 docker pull 镜像名字
docker pull 镜像名字【:TAG】
(指定版本下载)
docker pull 镜像名字
(不指定TAG就下载最新的版本的)
2.4 查看镜像/容器/数据卷所占用的空间:docker system df
2.5 强制删除镜像 docker rmi -f 镜像ID
删除单个
docker rmi -f 镜像ID
删除多个
docker rmi -f 镜像名1:TAG 镜像2:TAG
删除
全部
docker rmi -f $(docker images -qa)
2.6 谈谈docker虚悬镜像是什么?
仓库名,标签都是< none>的镜像,俗称虚悬镜像dangling image
这种没什么用在docker构建的会出现一些问题
3. 容器命令
有镜像才能创建容器,这是根本前提(下载一个Ubuntu镜像学习)
下载Ubuntu镜像:docker pull ubuntu
3.1 新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
启动交互式容器(前台命令行)
OPTIONS说明(常用):有些是一个减号,有些是两个减号
--name="容器新名字" 为容器指定一个名称;
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
-i: 以交互模式运行容器,通常与-t同时使用;
-t: 为容器重新分配一个伪输入终端,通常与-i同时使用;也即启动交互式容器(前台有伪终端,等待交互);
-P: 随机端口映射,大写P
-p: 指定端口映射,小写p
使用ubuntu:latest以
交互模式
启动一个容器,在容器内执行/bin/bash命令:docker run -it ubuntu /bin/bash
使用ubuntu:latest以
交互模式
启动一个容器,并给容器指定名字,在容器内执行/bin/bash命令:docker run -it --name=myu1 ubuntu bash
3.2 列出当前所有正在运行的容器docker ps [OPTIONS]
OPTIONS说明(常用):
-a :列出当前所有正在运行的容器
+历史
上运行过的
-l :显示最近创建的容器。
-n: 显示最近n个创建的容器。
-q: 静默模式,只显示容器编号。
docker ps
docker ps -a
3.3 退出容器
exit
: run进去容器,exit退出,容器停止
Ctrl + p + q
: run进去容器,Ctrl+p+q退出,容器不停止
3.4 启动已停止运行的容器:docker start 容器ID或者容器名字
docker start c269d305b74d
3.5 重启容器: docker restart 容器ID或者容器名字
docker restart c269d305b74d
3.6 停止容器: docker stop 容器ID或者容器名字
docker stop c269d305b74d
3.7 强制停止容器: docker kill 容器ID或者容器名字
3.8 删除已停止的容器: docker rm 容器ID
docker rm c269d305b74d
3.9 强制删除容器: docker rm -f 容器ID
docker rm -f 3b9bfe256607
一次删除全部容器实例
docker rm -f $(docker ps -a -q)
或
docker ps -a -q | xargs docker rm
3.10 重要
有镜像才能创建容器,这是根本前提(下载一个redis镜像学习)
docker pull redis
默认下载最新版的
3.10.1 启动守护式容器(后台服务器)
在大部分的场景下,我们希望docker的服务是在后台运行
的,我们可以过-d
指定容器的后台运行模式
。
docker run -d 容器名
后台服务器
前边我们学习了docker run -it 容器名
:交互模式
使用镜像ubuntu:latest 以后台模式启动一个容器
docker run -d ubuntu
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程容器运行的命令,如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如service nginx start 但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行,常见就是命令行模式,表示我还有交互操作,别中断,o(n_n)O哈哈~
下面我们用redis前后台启动演示:
1. 前台交互式启动 -it
docker run -it redis
在大部分的场景下,我们希望docker的服务是在后台运行的,我们可以过-d
指定容器的后台运行模式。
2. 后台守护式启动 -d
docker run -d redis
3.10.2 查看容器日志 docker logs 容器ID
docker logs 84358a85e4b9
3.10.3 查看容器内运行的进程docker top 容器ID
docker top 84358a85e4b9
3.10.4 查看容器内部细节 docker inspect 容器ID
docker inspect 84358a85e4b9
3.10.5 进入正在运行的容器并以命令行交互: docker exec -it 容器ID bashShell
docker exec -it 84358a85e4b9 /bin/bash
重新进入 docker attach 容器ID
(不推荐使用,他的exec退出会造成容器的停止)
两者的区别:
attach
直接进入容器启动命令的终端,不会启动新的进程用exit退出,会导致容器的停止。
exec
是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器的停止。
docker exec -it 84358a85e4b9 bash
docker exec -it 84358a85e4b9 redis-cli
一般用-d
后台启动的程序,再用exec进入对应容器实例
3.10.5 从容器内拷贝文件到主机上docker cp 容器ID:容器内路径 目的主机路径
docker cp 4cb14f41e75e:/tmp/a.txt /mnt
3.10.6 导入导出容器
docker export 容器ID > 文件名.tar
cat 文件名.tar | docker import -镜像用户/镜像名:镜像版本号
export
导出
容器的内容流作为一个tar归档文件[对应import命令]
import
从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
导出
docker export 4cb14f41e75e >ubuntu.tar
导入
cat ubuntu.tar | docker import - guoguo/ubuntu:3.7
4. 悬空镜像
仓库名、标签均为< none>的镜像被称为虚悬镜像
,一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的。
出现虚悬镜像的原因一般是在docker pull **:latest 时产生。当新版本发布后重新pull,旧的镜像名会被新镜像所占用,旧镜像的名字会变成
4.1 查看所有镜像,包括中间层镜像: docker images -a
当我们使用 docker images -a 命令时,出现的 < none>:< none>中间层镜像(对磁盘空间没有影响);
4.2 查询所有虚悬镜像(未标记的镜像)docker images -f dangling=true
docker iamges
,列出的 : 即为 dangling image(悬空镜像 —— bad < none>:< none>),因为它并没有作为中间映像,已被作为 Docker iamge 的一部分被列出,它会占用磁盘资源!需要被我们删除!
4.3 删除所有dangling image
4.3.1 方法一:使用 docker image prune
4.3.2 方法二:使用 docker rmi 结合 命令:docker rmi $(docker images -f dangling=true -q)
如果你删除了 < none>:< none> image,会提示你释放了多少空间:
Total reclaimed space: 0B # 我这边没有删除,所以为0B。