更多优质内容
请关注公众号

Docker入门系列(二) 查看、删除、拉取镜像,查看、运行、删除容器,docker容器备份常用命令-张柏沛IT博客

正文内容

Docker入门系列(二) 查看、删除、拉取镜像,查看、运行、删除容器,docker容器备份常用命令

栏目:其他内容 系列:docker入门系列 发布时间:2022-03-30 17:27 浏览量:2126

一、镜像常用命令

命令1:查看本地镜像

# 查看本地镜像
docker images

-a :列出本地所有的镜像(含历史映像层);

-q :只显示镜像ID。

同一仓库只存储同一类镜像,一类镜像源可以有多个 TAG版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。 

如果不指定一个镜像的版本标签,例如你只使用 docker run ubuntu,docker 将默认使用 ubuntu:latest 镜像。

 

命令2:检索远程镜像

# 查看远程仓库是否有某个镜像
docker search 镜像名
docker search --limit 5 redis

 

命令3:拉取镜像

# 拉取/下载某个镜像到本地
docker pull 镜像名称[:TAG]
docker pull redis:6.0.8

没有TAG就是最新版,等价于 docker pull 镜像名:lastest

 

 

命令4:查看镜像和容器占用空间

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

 

 

命令5:删除镜像

# 删除某个镜像 -f可强制删除
docker rmi 镜像名或镜像ID

# 删除多个
docker rmi 镜像1:TAG 镜像2:TAG

# 删除所有镜像(从入门到入狱命令)
docker rmi -f $(docker images -aq)

 

 

虚悬镜像 dangling image

虚悬镜像是执行docker image查看到的 仓库名和标签都为 的镜像,是docker运行过程中发生一些问题产生的,如果发现这种镜像可以将其删除。

 

 

 

二、容器常用命令

 

命令1:运行容器

# 新建并运行一个容器
docker run [--option] 镜像名或镜像ID [命令][参数]

--name="容器名" 为容器指定名称,不指定则随机名称;

-d 后台运行并返回容器ID;

-it 以交互模式为容器分配一个伪输入终端;进入终端后,可以使用 exit/ctrl+c 或者ctrl + p + q 退出当前容器终端,区别是前者会停止容器,后者不会停止容器。

-P随机端口映射;

-p 指定端口映射;

如果不加任何可选项,默认前台运行。

 

例如:

docker run -it ubuntu /bin/bash # 启动一个Ubuntu实例,并执行该容器内的/bin/bash这个Linux命令和用户交互。

 

注意点:

1、每一个创建出来的容器都是一个简易版的Linux环境,具有Linux最基本的功能(如用户空间、root权限、进程调度、网络连接、一些必要命令如bash、source、apt、yum等是镜像自身包含的,但其他linux命令需要我们自行安装,如vim、top等)。

所以如果我们 docker run redis 创建一个redis容器,并不代表这个容器只能运行redis这一个进程,我们还可以在这个容器中安装nginx、php等软件。

2、当启动一个-d后台运行的容器实例时,该容器内部至少运行一个前台进程,否则该容器会自动关闭(停止运行),因为容器觉得自己已经无事可做,没有必要划水,于是就休息去了。

 

例如,docker run -d ubuntu 后台创建运行一个 Ubuntu 容器就会马上停止运行(证据是执行docker ps查不到这个Ubuntu容器),原因是该ubuntu系统内没有运行任何一个进程,但该容器只是停止运行而不会被删除。

 

如果 docker run -d redis 后台运行一个redis 容器(容器在宿主机是后台运行的,但该容器内的redis是前台运行的),则该容器不会停止运行,因为该容器Linux系统内运行了一个redis前台进程。

如果执行 docker run -d redis 'redis-server' '--daemonize yes' '--port 6380',表示启动一个redis 容器,容器内启动一个redis后台进程,则容器会由于没有任何一个前台进程而自动停止运行。

 

 

为什么 docker run -it ubuntu bash 进入终端后,执行exit会使该容器停止。首先exit是个shell命令而不是容器命令,exit会关闭当前前台进程,而该ubuntu容器目前只有一个bash前台进程运行。唯一的前台进程都终止了,容器就会终止。

判断容器是否终止的一个标准就是:该容器是否仍有前台进程在运行。

 

 

命令2:创建容器

如果我们只想创建一个容器而不想运行该容器,可以使用 create 命令

#创建一个容器
docker create 镜像名或镜像ID

 

 

命令3:查看容器列表

# 列出当前所有正在运行的容器
docker ps

-a 列出所有正在运行的容器 + 历史上运行过的容器;

-l 列出最近创建的容器

-n 显示n条;

-q 静默模式,只显示容器ID;

 

命令4:启动、停止、重启、删除容器

# 启动一个已停止的容器
docker start 容器ID或Name

# 停止一个容器
docker stop 容器ID或Name
docker kill 容器ID或Name        # 强制停止

# 重启 restart

# 删除容器
docker rm 容器ID        # -f 强制删除正在运行的容器

# 批量删除
docker rm -f $(docker ps -aq)
docker ps -aq | xargs docker rm

PS:请区分容器退出、停止和删除的区别。

docker run 会创建一个容器实例并运行它。

进入容器的终端再返回主机就是退出,但容器仍在运行;

”docker stop 容器ID“ 就是停止容器的运行,但这个容器实例和容器ID仍在,可以通过docker start 该容器的ID 再次启动这个容器;

而删除一个容器则是容器实例被销毁,容器ID不再存在,无法用docker start再次启动该实例,只能通过docker run新建一个实例;

对于一个退出的实例,docker ps -a 仍然能查看到他的ID,并用该ID再次启动该容器实例;

对于一个删除的实例,docker ps -a 则无法显示它的容器ID;

 

命令5:查看容器日志

# 查看容器日志
docker logs 容器ID

例如执行 docker run -d redis 'redis-server --port 6380' 发现启动容器失败了,就可以docker logs 容器ID 查看redis日志,提示不存在redis-server --port 6380这个命令,原来命令和参数是分开的,应该执行 docker run -d redis 'redis-server' '--port 6380' 才对。

 

命令6:查看容器进程

# 查看容器内所有进程状况
docker top 容器ID

 

 

命令7:对容器内执行命令

# 对某容器执行命令
docker exec -it 容器ID [命令][参数]

# 重新进入已退出的容器
docker exec -it 容器ID bash

# 重新进入已退出的容器2
docker attach 容器ID

两个重新进入容器的命令的区别:

exec 在容器中新创建一个新进程执行bash终端命令,因此exit或者ctrl+c退出终端只是结束该bash进程,不会导致容器停止;

attach是直接进入容器启动命令的终端(例如 docker run -d redis 启动了一个redis前台进程,则attch会让用户直接进入到redis前台进程的终端) ,exit或者ctrl+c会导致容器停止运行。

工作中经常使用exec进入容器,很少用attach。一般用-d后台启动的程序,再用exec进入对应容器实例。

 

 

命令8:查看容器细节

# 查看容器内部细节(包括所属镜像,配置,状态,容器卷等)
docker inspect 容器ID

 

 

命令9:容器备份

# 拷贝容器上的文件到主机上
docker cp 容器ID:容器内路径 目的主机路径

# 将容器实例导出为tar文件(但这个tar文件不是)
docker export 容器ID > 文件名.tar

# tar文件导入为镜像(只会生成一个本地镜像,但不会生成一个容器实例,仍需要docker run)
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

其中”镜像用户/镜像名:镜像版本号“全是自定义的。

 

一个导出和导入redis镜像的例子:

docker export 容器ID > my-redis.tar

# 导入my-redis镜像
docker import - zbp/my-redis:v1 < ./my-redis.tar

# 创建 my-redis 容器
docker run -d zbp/my-redis:v1 "redis-server"

需要注意:

1、docker run 一个 export/import 的镜像必须完整的指定 ”镜像用户/镜像名:镜像版本号“ ,否则会认为不存在这个镜像。

2、docker run 一个 export/import 的镜像必须指定一个运行命令,比如这里是”redis-server"表示启动redis实例。

如果不指定一个命令,就会报错:

/usr/bin/docker-current: Error response from daemon: No command specified

 

PS:还可以使用 save 和 load 命令完成容器的导入和导出,详情请参考文档。

不能用import 命令导入一个 save 命令导出的容器文件。

 

 

常用命令总结:

attach    Attach to a running container                 # 当前 shell 下 attach 连接指定运行镜像 
build     Build an image from a Dockerfile              # 通过 Dockerfile 定制镜像 
commit    Create a new image from a container changes   # 提交当前容器为新的镜像 
cp        Copy files/folders from the containers filesystem to the host path   #从容器中拷贝指定文件或者目录到宿主机中 
create    Create a new container                        # 创建一个新的容器,同 run,但不启动容器 
diff      Inspect changes on a container s filesystem   # 查看 docker 容器变化 
events    Get real time events from the server          # 从 docker 服务获取容器实时事件 
exec      Run a command in an existing container        # 在已存在的容器上运行命令 
export    Stream the contents of a container as a tar archive   # 导出容器的内容流作为一个 tar 归档文件[对应 import ] 
history   Show the history of an image                  # 展示一个镜像形成历史 
images    List images                                   # 列出系统当前镜像 
import    Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export] 
info      Display system-wide information               # 显示系统相关信息 
inspect   Return low-level information on a container   # 查看容器详细信息 
kill      Kill a running container                      # kill 指定 docker 容器 
load      Load an image from a tar archive              # 从一个 tar 包中加载一个镜像[对应 save] 
login     Register or Login to the docker registry server    # 注册或者登陆一个 docker 源服务器 
logout    Log out from a Docker registry server          # 从当前 Docker registry 退出 
logs      Fetch the logs of a container                 # 输出当前容器日志信息 
port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT    # 查看映射端口对应的容器内部源端口 
pause     Pause all processes within a container        # 暂停容器 
ps        List containers                               # 列出容器列表 
pull      Pull an image or a repository from the docker registry server   # 从docker镜像源服务器拉取指定镜像或者库镜像 
push      Push an image or a repository to the docker registry server    # 推送指定镜像或者库镜像至docker源服务器 
restart   Restart a running container                   # 重启运行的容器 
rm        Remove one or more containers                 # 移除一个或者多个容器 
rmi       Remove one or more images       # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除] 
run       Run a command in a new container              # 创建一个新的容器并运行一个命令 
save      Save an image to a tar archive                # 保存一个镜像为一个 tar 包[对应 load] 
search    Search for an image on the Docker Hub         # 在 docker hub 中搜索镜像 
start     Start a stopped containers                    # 启动容器 
stop      Stop a running containers                     # 停止容器 
tag       Tag an image into a repository                # 给源中镜像打标签 
top       Lookup the running processes of a container   # 查看容器中运行的进程信息 
unpause   Unpause a paused container                    # 取消暂停容器 
version   Show the docker version information           # 查看 docker 版本号 
wait      Block until a container stops, then print its exit code   # 截取容器停止时的退出状态值 

 




更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > Docker入门系列(二) 查看、删除、拉取镜像,查看、运行、删除容器,docker容器备份常用命令

热门推荐
推荐新闻