Michael.W谈Docker 第二期-docker的镜像管理和容器管理

1 Docker的镜像管理

1.1 镜像的搜索

	# 查看docker中的所有指令
	docker --help
	# 命令
	$ docker search 镜像名

在这里插入图片描述
NAME: 镜像名字
DESCRIPTION: 描述信息
STARS: 下载量
OFFICIAL: 镜像是否为官方发行
AUTOMATED: 是否会启动一些脚本之类的程序

1.2 镜像的获取

	# 下载远程仓库(如Docker Hub)中的镜像
	$ docker pull 镜像名
	# 下载完成之后, 就存储到了本地的镜像仓库 /var/lib/docker

镜像名为docker search xxx中Name字段对应的名字

1.3 镜像的查看

	# 查看所有的镜像
	$ docker images
	$ docker image ls
	# 查看某个镜像
	$ docker images 镜像名
	$ docker image ls 镜像名字

在这里插入图片描述
REPOSITORY: 镜像的名字
TAG: 镜像版本
IMAGE ID: 镜像ID(唯一)
CREATED: 创建时间
SIZE: 镜像的大小
注:在docker中描述一个镜像的时候,必须用镜像名:版本号(TAG)的方式来描述。如果TAG为latest,TAG可以省略不写。即:ubuntu 等价于 ubuntu:latest

1.4 镜像的别名

	$ docker tag 现在的名字:tag 别名:tag 

不同的名字对应的ID相同。镜像并没有复制, 只是多了一个别名而已。
镜像名中必须是小写字母

1.5 镜像的删除

	$ docker rmi [OPTIONS] 镜像名/镜像ID
  1. 如果镜像有别名, 只能够按照镜像名:tag 进行删除, 不能根据ID进行删除
  2. 如果镜像有多个名字, 删除任意一个名字,如果镜像有多个名字,删除任意一个名字,名字会删除,镜像还在;
  3. 当镜像只剩下一个名字的时候,对其进行删除,镜像可被删除。当镜像只剩下一个名字的时候,对其进行删除,镜像可被删除;
  4. 可以一次删除多个镜像。
    在这里插入图片描述

1.6 镜像的导入和导出

像将自己仓库中的镜像文件做备份或者传给其他人需要做镜像的导入和导出。
注:镜像存储的仓库目录为/var/lib/docker,但是在该路径下都是很多琐碎的文件,并没有完整的文件。所以不要尝试去路径下直接考走。
导入

	$ docker load -i 仓库中的镜像名
	$ docker load < 仓库中的镜像名

在这里插入图片描述
导出

# 将本地仓库中的镜像导出的磁盘目录
	$ docker save -o 导出之后镜像名字(自己起名) 仓库中的镜像名	

1.7 镜像的历史和详细信息

	# 制作镜像的时候的操作步骤
	$ docker history 仓库中的镜像名

在这里插入图片描述

	# 镜像的属性信息, 以json格式输出的
	$ docker inspect 镜像名/镜像ID

关于Docker --format 格式化输出概要操作说明可访问:https://yq.aliyun.com/articles/230067

2 Docker的容器管理

启动Docker的镜像文件就会得到一个容器。一个容器可以被看做一个运行的操作系统。
启动的每个容器都是一个进程

扫描二维码关注公众号,回复: 5463944 查看本文章

2.1 容器的查看

	# 命令, 只能看到正在运行的容器的状态
	$ docker ps
	#参数:
	#  -a, --all: 显示所有容器, 默认只显示running状态的
	#  -q, --quiet: 只显示容器ID

在这里插入图片描述
CONTAINER ID: 容器启动之后的ID, 唯一;
IMAGE: 当前容器是基于那个镜像启动的;
COMMAND: 容器启动之后, 默认执行了什么命令;
CREATED: 容器的创建时间;
STATUS: 容器当前状态。容器一共有四种状态:

  1. created: 容器被创建, 但是不能使用
  2. runing: 运行状态
  3. pause: 暂停状态
  4. exited: 终止运行
    PORTS: 映射端口,具体指主机和容器之间的端口映射;
    NAMES: 容器启动之后的名字, 如果没有指定, 会随机生成一个, 这个名字不能重复。

2.2 容器的创建

容器被创建, 但是还不能使用,需要启动!

	$ docker create [OPTIONS] 仓库中的镜像名 [COMMAND] 
	#	OPTIONS:
	#		-a, --attach list   给容器关联 STDIN, STDOUT or STDERR
	#		-t, --tty: 给容器绑定终端
	#		-i, --interactive: 关联标准输入
	#		--rm: 容器终止运行的时候, 自动被删除
	#		--name string: 手动指定容器的名字
	# 	COMMAND: 可以不写, 或许写个bash
	#	例子
	$ docker create -it --rm --name myubuntu ubuntu bash

在这里插入图片描述
可见创建后的容器并不是运行状态,需要docker ps -a 才可以显示出来。

2.3 启动创建的容器

	$ docker start [OPTIONS] 容器名或者容器ID [CONTAINER...]
		OPTIONS:
			-a, --attach    	Attach STDOUT/STDERR and forward signals
	  		-i, --interactive  	Attach container's STDIN
	 # 例子
	 $ docker start -i ubuntu

在这里插入图片描述
启动后,直接进入容器内的系统中

2.4 创建并启动容器

docker run 等价于 docker create + docker start ,一般开发中都使用docker run

	# 通过一个命令创建容器, 并且启动
	$ docker run  [OPTIONS] 仓库中的镜像名 [COMMAND] 
	# OPTIONS: 
	#	-d, --detach: 以守护进程的形式运行
	#	-a, --attach list   给容器关联 STDIN, STDOUT or STDERR
	#	-t, --tty: 给容器绑定终端
	#	-i, --interactive: 关联标准输入
	#	--rm: 容器终止运行的时候, 自动被删除
	#	--name string: 手动指定容器的名字

在这里插入图片描述
创建并运行。参数-d是docker run特有的,即启动容器后并不进入容器

2.5 容器的暂停和重启

	# 暂停
	$ docker pause 容器名或ID [CONTAINER...]
	# 取消暂停
	$ docker unpause 容器名或ID [CONTAINER...]
	# 重启
	$ docker restart [OPTIONS] 容器名或ID [CONTAINER...]
    # Options:
    #  -t, --time int: 延时时间, 默认10s

重启容器后,其STATUS选项重新从0开始计时。
这三个指令都可以接多个容器。
pause后容器状态为paused,unpause和restart后容器状态为running。

2.6 容器的关闭、终止和删除

	# 关闭容器:状态, 容器还在, 有延时
	$ docker stop [OPTIONS] 容器名或ID [CONTAINER...]
    # Options:
    #  -t, --time int: 延时时间, 默认10s

关闭容器后,状态从running变成exited。
在这里插入图片描述

	# 终止容器:容器还在, 直接关闭, 没有延时
	$ docker kill [OPTIONS] 容器名或ID [CONTAINER...]
    # Options:
    #  -s, --signal string: 指定发出的信号, 一般不用

终止容器后,状态从running变成exited。

	# 删除未运行的容器
	$ docker rm 容器名或ID
	# 删除运行中的容器
	$ docker rm 容器名或ID -f
	# 批量删除容器(二者均可)
	$ docker rm $(docker ps -aq) -f
	$ docker rm `docker ps -aq` -f

关于批量删除容器的解释:
docker ps -aq 是显示当前所有的容器的ID。把这个返回值作为docker rm 的一个参数,达到一键删除所有容器的功效。
这个需要记住,在开发中很有用!
在这里插入图片描述

2.7 容器的进入和退出

	# 创建并启动容器。前面提到过,例子如下:
	$ docker run -itd --rm --name myubuntu ubuntu bash
	# 手动进入容器中
	$ docker exec [OPTIONS] 容器名字或ID COMMAND [ARG...]
	# OPTIONS:
	#	-i, --interactive          保持与标注输入的连接
  	#	-t, --tty                  将容器与终端绑定
  	# COMMAND: shell指令 -> bash
  	# [ARG...]: shell命令的参数

注:docker run这种创建、启动并直接进入容器的方式使用频率很低。建议多多使用docker exec这种方式。如果docker exec不加-it参数,在终端将无法显示出进入容器的效果。
同时COMMAND位置这次不是可选填项。没有任何操作,请添bash。
在这里插入图片描述

	# 容器内输入
	$ exit
	# 或直接按Ctrl+D,均可退出容器

2.8 容器的日志、信息、端口和重命名

	# 查看容器日志
	$ docker logs 容器名或ID
	# 查看容器的详细信息
	$ docker inspect 容器名或ID
	# 查看本机和容器的端口映射
	$ docker port 容器名或ID
	# 容器重命名
	$ docker rename 容器名 新的容器名

在这里插入图片描述

  1. 容器运行一段时间后才会有日志生成,。如果没有生成, 是看不到的;
  2. 查看容器详细信息返回的是json对象。关于输出格式的设定,可查阅:https://yq.aliyun.com/articles/230067

2.9 基于容器的镜像导入和导出

导出容器的镜像文件

	# 第一种
	$ docker export -o 导出的镜像的名字(自定义) 容器名或ID
	# 第二种				
	$ docker export 容器名或ID > 导出的镜像的名字(自定义)

镜像导入到本地的镜像仓库中

	$ cat 要导入的镜像文件 | docker import - 新的镜像名:tag

在这里插入图片描述

2.10 对比

docker save 和 docker export:

  1. 使用save是基于仓库内的镜像导出文件, 不能对镜像进行修改;
  2. export通过容器导出, 原始镜像可以通过启动容器进行修改;
  3. 通过export导出镜像, 会丢失镜像的历史记录
  4. 如果没有通过容器对进行做任何修改, export导出的镜像小

docker load 和 docker import:

  1. 都是将导出的镜像导入到本地镜像仓库
  2. 如果使用load进行导入: 镜像名无法修改
  3. 如果使用import进行导入: 镜像名是可以修改的。

在网上找到一个图把这些指令的操作关系描述的很到位。最后分享给大家:
在这里插入图片描述

ps:
本人热爱图灵,热爱中本聪,热爱V神,热爱一切被梨花照过的姑娘。
以下是我个人的公众号,如果有技术问题可以关注我的公众号来跟我交流。
同时我也会在这个公众号上每周更新我的原创文章,喜欢的小伙伴或者老伙计可以支持一下!
后现代泼痞浪漫主义奠基人
公众号名称:后现代泼痞浪漫主义奠基人

猜你喜欢

转载自blog.csdn.net/michael_wgy_/article/details/88081487