Docker学习笔记—day004(Docker常用基础命令)

一、帮助启动类命令

# 启动命令
systemctl start docker
# 停止docker
systemctl stop docker
# 重启docker
systemmctl restart docker
# 查看docker状态
systemctl status docker
# 开机自启
systemctl enable docker
# 查看docker信息
docker info
# 查询docker的帮助文档
docker --help
# 查询docker指定命令的帮助文档
docker 具体命令 --help

二 、镜像命令

2.1、列出本地主机上的所有镜像

列出本地主机上的所有镜像:docker images
同一个仓库员可以有多个TAG版本,代表这个仓库源的不同版本,一般使用Repository:TAG来定义不同的镜像
不指定,那么就会用默认最新的进行版本(如ubuntu:latest)

docker images -a  # 列出本地所有的镜像(含历史映像层)
docker images -q  # 只显示镜像ID 

在这里插入图片描述

2.2、查询某个镜像

查询某个镜像 :docker search 镜像名

# 例如:在远程仓库查询redis的镜像
docker search redis
docker search --limit 5 redis  # 只查询点赞数最多的前5个发布的镜像

在这里插入图片描述

2.3、拉取某个镜像(pull)

简单使用方法:docker pull 镜像名字
具体使用方法:docker pull 镜像名称:某个具体版本

docker pull mysql  #默认拉取mysql的最新版本Latest'
docker pull mysql:5.7  # 指定mysql的5.7版本进行拉取mysql镜像

2.4、查看镜像/容器/数据卷所占的空间(docker system df)

docker system df # 查看镜像/容器/数据卷所占的空间

各类参数名所代表的含义:
在这里插入图片描述

2.5、删除某个镜像

使用方法:docker rmi ID/镜像名

docker rmi hello-world  # 根据镜像的名称进行删除
docker rmi 1b44b5a3e06a  # 依据ID删除hello-world的镜像(具有唯一性)
docker rmi -f hello-world # 强制删除hello-world的镜像(尽管有容器在使用它)
docker rmi -f 镜像名1:TAG 镜像名2:TAG  # 删除多个镜像
docker rmi -f $(docker images -qa) # 删除全部镜像
# $起了一个引用的作用

遇到的问题:普通删除无法删除
在这里插入图片描述

2.6、docker中的虚悬镜像

定义:仓库名、标签都是None镜像,俗称虚悬镜像
一般需要删除,没有什么大用

在这里插入图片描述

三、容器命令

镜像是模版,真正干活的是容器实例

3.1、新建+启动容器

使用方法:docker run [options] image [COMMAND] [ARG]

OPTIONS说明(常用常用):有些是一个减号有的是两个减号

-- name="容器的新镜子"     # 为容器指定一个新名称
-d  #后台运行容器并返回容器ID,也即启动守护式容器(后天运行)
-i # 以交互模式运行容器,通常与-t同时使用
-t # 为容器重新分配一个伪输入终端,通常与-i同时使用
# 也即启动交互式容器(前台有伪终端,等待交互)
-P # 随机端口映射,大写P
-p # 指定端口映射,小写p
参数说明
-p hostPort:containerPort端口映射 -p 8080:80
-p ip:hostPort:containerPort配置监听地址 -p 10.0.0.100:8080:80
-p hostPort:containerPort:udp指定协议 -p 8080:80:tcp
-p 81::80 -p 443:443指定多个

启动交互式容器(前台命令行)

使用ubuntu镜像ubuntu:latest 以交互模式启动一个容器,在容器内执行/bin/bash命令

docker run -it ubuntu /bin/bash   # it: 交互式的伪终端 
# 参数说明:
	# -i 交互模式
	# -t 终端
	# /bin/bash 放在镜像后的命令,交互式shell
	# 直接退出终端,输入exit,容器会停止
	# ctrl + p + q 退出,容器不停止

在这里插入图片描述

3.2、列出所有正在运行的容器

使用方法docker ps [OPTIONS]

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

在这里插入图片描述

3.3、启动已经停止运行的容器

使用方法:docker start 容器ID或者容器名

docker start a303752bfe41

3.4、重启容器

使用方法:docker restart 容器ID或者容器名

docker restart a303752bfe41

3.5、停止容器和强制停止容器

停止容器:docker stop 容器ID或者容器名
强制停止容器:docker rm 容器ID或者容器名

docker stop 3ab9cfa1013b # 停止该容器
docker kill 3ab9cfa1013b # 强制停止该容器

3.6、删除已停止的容器

注意:不能删除正在运行的容器(必须先停止,再删除)
使用方法:docker rm 容器ID
强制删除正在运行的容器:docker rm - f 容器ID(不推荐使用)

docker rm 3ab9cfa1013b # 删除已停止的容器
docker rm -f 3ab9cfa1013b # 尽管容器正在运行,但还是可以删除的

3.7、启动守护式容器(-d 后台服务器)

有镜像才能创建容器(以redis6.0.8为镜像示例)
背景:在大部分场景下,希望docker的服务是在后台运行的,我们可以通过-d 指定容器的后台运行模式
使用方法:docker run -d 容器名
问题1:守护式启动后,通过docker ps并没有发现启动的容器(启动失败)

docker run -d ubuntu

在这里插入图片描述
原因:Docker容器后台运行,就必须有一个前台进程。容器的命令如果不是那些一直分挂起的命令(如 tail、top),就会自动退出。
解决办法:将你要运行的程序以前台进程的形式运行
常见的就是命令行模式,表示我们还有交互操作,别终端。

redis的前后台启动演示:

前台交互式启动:docker run -it redis:6.0.8(导致一退出,redis服务终端)
后天守护式启动:docker run -d redis:6.0.8

docker run -d redis
3.7.1、查看容器日志:docker logs 容器ID
docker logs 83169a8c50ec

查看redis容器实例的后台工作日志
在这里插入图片描述

3.7.2、查看容器内运行的进程:docker top 容器ID

在这里插入图片描述

3.7.3、查看容器内部细节

docker inspect 容器ID(每个容器都是一个mini版的linux内核)

3.7.4、进入正在运行的容器并以命令行交互(重点)

docker exec -it 容器ID bashshell
重新进入docker attach 容器ID

上述两个的区别:

  • attach直接进入容器启动命令终端,不会启动新的进程,用exit退出,会导致容器的停止
  • exec是在容器中打开新的终端,会启动新的进程,用exit退出,不会导致容器停止

注意:推荐大家使用docker exec这个命令

3.7.5、将容器的内部的文件拷贝的主机上

docker cp 容器ID:容器内部路径文件 主机目录

# 将ID为cadb48b24333 在/tmp下面的a.txt文件拷贝到 /etc/docker当中
docker cp cadb48b24333:/tmp/a.txt /etc/docker

在这里插入图片描述

3.7.6、导入和导出容器

export导出容器的内部留作为一个tar归档文件
import从tar包中的内容创建一个新的文件系统再导入为镜像

docker export cadb48b24333 > abcd.tar    # 将容器导出为对应归档文件
cat abcd.tar | docker import - radan/ubuntu:latest  # 将归档文件还原为一个镜像
docker images # 查看镜像
docker run -it radan/ubuntu bash # 利用镜像再回复原本的ubuntu容器 

在这里插入图片描述

更多推荐