前端学习Docker(二) - 镜像

docker 安装

安装

yum install -y yum-utils   device-mapper-persistent-data   lvm2
yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io -y
yum install -y yum-utils   device-mapper-persistent-data   lvm2
yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io -y

启动

systemctl start docker
systemctl start docker

查看 docker 版本

$ docker version
$ docker info
$ docker version
$ docker info

卸载

docker info
yum remove docker
rm -rf /var/lib/docker
docker info
yum remove docker
rm -rf /var/lib/docker

Docker 架构

1629640331876.jpg

阿里云加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fwvjnv59.mirror.aliyuncs.com"]
}
EOF
# 重载所有修改过的配置文件
//daemon-reload: 重新加载某个服务的配置文件
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fwvjnv59.mirror.aliyuncs.com"]
}
EOF
# 重载所有修改过的配置文件
//daemon-reload: 重新加载某个服务的配置文件
sudo systemctl daemon-reload
sudo systemctl restart docker

image 镜像

  • Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器
  • image 文件可以看作是容器的模板
  • Docker 根据 image 文件生成容器的实例
  • 同一个 image 文件,可以生成多个同时运行的容器实例
  • 镜像不是一个单一的文件,而是有多层
  • 容器其实就是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层里。如果容器删除了,最上面的读写层也就删除了,改动也就丢失了
  • 我们可以通过docker history <ID/NAME> 查看镜像中各层内容及大小,每层对应着Dockerfile中的一条指令
命令 含义 语法 案例
ls 查看全部镜像 docker image ls
search 查找镜像 docker search [imageName]
history 查看镜像历史 docker history [imageName]
inspect 显示一个或多个镜像详细信息 docker inspect [imageName]
pull 拉取镜像 docker pull [imageName]
push 推送一个镜像到镜像仓库 docker push [imageName]
rmi 删除镜像 docker rmi [imageName] docker image rmi 2
prune 移除未使用的镜像,没有标记或补任何容器引用 docker image prune docker image prune
tag 标记本地镜像,将其归入某一仓库 docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG] docker tag centos:7 vincent/centos:v1
export 将容器文件系统作为一个 tar 归档文件导出到 STDOUT docker export [OPTIONS] CONTAINER docker export -o hello-world.tar b2712f1067a3
import 导入容器快照文件系统 tar 归档文件并创建镜像 docker import [OPTIONS] file/URL/- [REPOSITORY[:TAG]] docker import hello-world.tar
save 将指定镜像保存成tar文件 docker save [OPTIONS] IMAGE [IMAGE…] docker save -o hello-world.tar hello-world:latest
load 加载 tar 文件并创建镜像 docker load -i hello-world.tar
build 根据 Dockerfile 构建镜像 docker build [OPTIONS] PATH / URL / - docker build -t zf/ubuntu:v1 .
  • 用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库
  • 这两者的区别在于容器(import)快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像(load)存储文件将保存完整记录,体积也要大
  • 此外,从容器(import)快照文件导入时可以重新指定标签等元数据信息

查看镜像

docker image ls
docker image ls
字段 含义
REPOSITORY 仓库地址
TAG 标签
IMAGE_ID 镜像 ID
CREATED 创建时间
SIZE 镜像大小

查找镜像

docker search ubuntu
docker search ubuntu
字段 含义
NAME 名称
DESCRIPTION 描述
STARTS 星星的数量
OFFICIAL 是否官方源

拉取镜像

docker  pull docker.io/hello-world
docker  pull docker.io/hello-world
  • docker image pull 是抓取 image 文件的命令
  • docker.io/hello-world 是 image 文件在仓库里面的位置,其中docker.io是 image 的作者,hello-world 是 image 文件的名字
  • Docker 官方提供的 image 文件,都放在docker.io组里面,所以它的是默认组,可以省略 docker image pull hello-world

删除镜像

docker rmi  hello-world
docker rmi  hello-world

export

  • 将容器文件系统作为一个 tar 归档文件导出到STDOUT
docker export -o hello-world.tar b2712f1067a3
docker export -o hello-world.tar b2712f1067a3

import

docker import hello-world.tar
docker import hello-world.tar

save

docker save -o hello-world.tar hello-world:latest
docker save -o hello-world.tar hello-world:latest

load

docker load -i hello-world.tar
docker load -i hello-world.tar

commit 制作个性化镜像

  • docker commit :从容器创建一个新的镜像。
  • docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • -a :提交的镜像作者
  • -c :使用 Dockerfile 指令来创建镜像
  • -m :提交时的说明文字
  • -p :在 commit 时,将容器暂停
  • 停止容器后不会自动删除这个容器,除非在启动容器的时候指定了 --rm 标志
  • 使用 docker ps -a 命令查看 Docker 主机上包含停止的容器在内的所有容器
  • 停止状态的容器的可写层仍然占用磁盘空间。要清理可以使用 docker container prune 命令
docker container commit -m"我的nginx" -a"vincent" 3695dc5b9c2d vincent/mynginx:v1
docker image ls
docker container run vincent/mynginx /bin/bash
docker container rm b2839066c362
docker container prune
docker image rmi c79ef5b3f5fc
docker container commit -m"我的nginx" -a"vincent" 3695dc5b9c2d vincent/mynginx:v1
docker image ls
docker container run vincent/mynginx /bin/bash
docker container rm b2839066c362
docker container prune
docker image rmi c79ef5b3f5fc