Docker容器镜像介绍及应用

一、Docker容器镜像操作

1、查看本地镜像

csharp 复制代码
[root@VM-3-8-centos ~]# docker images
[root@VM-3-8-centos ~]# docker image list
#repository仓库 tag标记-最新的 image-id镜像id created创建时间 size大小
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    c20060033e06   2 weeks ago    187MB
centos        latest    5d0da3dc9764   2 years ago    231MB

2、查看docker容器镜像本地存储位置

考虑到docker容器镜像会占用本地存储空间,建议搭建其它存储系统挂载到本地以便解决占用大量本地存储的问题。

arduino 复制代码
[root@VM-3-8-centos ~]# ls /var/lib/docker
buildkit  containerd  containers  engine-id  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes

3、docker搜索镜像

csharp 复制代码
[root@VM-3-8-centos ~]# docker search centos

官网镜像链接:hub.docker.com/search

4、docker镜像的下载本地

csharp 复制代码
[root@VM-3-8-centos ~]# docker pull mysql:5.7
#默认下载最新的镜像latest

4、docker镜像的删除

提示:容器停止-》容器删除-》删除镜像

csharp 复制代码
[root@VM-3-8-centos ~]# docker rmi bdba757bc933
Untagged: mysql:5.7
#bdba757bc933->docker images查询

二、Docker容器镜像介绍

1、Docker lmage

  • Docker 镜像是只读的容器模板,是Docker容器基础
  • 为Docker容器提供了静态文件系统运行环境 (rootfs)
  • 是容器的静止状态
  • 容器是镜像的运行状态

2、docker存储

联合文件系统定义

联合文件系统是实现联合持载技术的文件系统

联合挂载技术可以实现在一个挂载点同时挂载多个文件系统,将挂载点的原目录与被挂载内容进行整合,使得是终可见的文性系统包合整合之后的各层文件和目录(类似于文件夹)

容器文件系统有多种存储驱动实现方式: aufs,devicemapper,overlay,overlay2等,本次以overlay2为例进行说明

  • registry/repository: registry 是repository 的集合,repository 是镜像的集合
  • image: image 是存境像相关的元数据,包括镜像的架构,镜像默认配置信息,镜像的容置信息等等。它是"逻辑"上的概念,并无物理上的镜像文件与之对应。
  • layer: layer(镜像层) 组成了镜像,单个layer 可以被多个镜像共享。
yaml 复制代码
[root@VM-3-8-centos ~]# docker info | grep overlay
 Storage Driver: overlay2
  Network: bridge host ipvlan macvlan null overlay
  
#docker info:这个命令用于获取 Docker 的系统信息,包括容器、镜像、存储驱动等相关信息。
#grep:这是一个文本搜索工具,用于在输入中查找匹配的行。
#overlay:这是一个关键词,用于指定要搜索的模式。

3、容器与镜像的关系

perl 复制代码
[root@VM-3-8-centos ~]# mount | grep overlay
mount:这是一个命令,用于显示已挂载的文件系统列表。
|:这是管道符号,用于将一个命令的输出作为另一个命令的输入。
grep overlay:这是一个命令,用于在输入中搜索包含 "overlay" 的行,并将其输出。

可以看到,启动容器会 mount 一个 overlay 的联合文件系统到容器内,这个文件系统由三层组成:

  • lowerdir: 只读层,即为镜像的镜像层
  • upperdir: 读写层,该层是容器的读写层,对容器的读写操作将反映在读写层。
  • workdir: overlayfs 的内部层,用于实现从只读层到读写层的 copy_up 操作.
  • merge: 容器内作为同一视图联合挂载点的目录.

三、Docker容器镜像操作

1、docker commit

docker 通过 commit 和 build 操作实现镜像的构建。commit 将容器提交为一个镜像,build 在一个镜像的基础上构建镜像便用 commit将上节的容器提交为一个镜像:

csharp 复制代码
[root@VM-3-8-centos ~]# docker commit 6643da25662c centos:msb
sha256:c1207ac05baa969a4eae09409f7ff5cd5b1d178cd00a369848853d71ae6748fb
[root@VM-3-8-centos ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
centos        msb       c1207ac05baa   9 seconds ago   187MB
​
#centos:msb:这是新镜像的名称和标签。在这种情况下,新镜像的名称是 centos,标签是 msb。

2、docker save

导出容器镜像,方便分享

csharp 复制代码
[root@VM-3-8-centos ~]# docker save -o centos.tar centos:latest
[root@VM-3-8-centos ~]# ls
centos.tar
#-o centos.tar:这是选项,用于指定输出文件的名称和路径。在这种情况下,输出文件的名称是 centos.tar,它将保存在当前目录下。

拷贝给其他主机

csharp 复制代码
[root@VM-3-8-centos ~]# scp centos.tar 192.168.10.154:/root
#scp:用于在不同的主机之间进行安全的文件传输。

3、docker load

把他人分享的容器镜像导入到本地,这通常是容器镜像分发方式之一

arduino 复制代码
[root@VM-3-8-centos ~]# docker load -i centos.tar 
Loaded image: centos:latest

4、docker export

把正在进行中的容器导出

csharp 复制代码
[root@VM-3-8-centos ~]# docker export -o nginx.tar 6643da25662c

5、docker import

导入使用docker export导入的容器做为本地容器镜像

csharp 复制代码
[root@VM-3-8-centos ~]# docker import nginx.tar nginx:v1
sha256:e226094bdc9e13a1a54977a874f8890a7629aeee4fbc31f9aae612db58467222
[root@VM-3-8-centos ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
nginx         v1        e226094bdc9e   13 seconds ago   185MB

四、容器镜像加速器

腾讯云镜像加速配置

reload-加载------registry-仓库------mirrors-镜像------release-版本

csharp 复制代码
[root@VM-3-8-centos ~]# vim /etc/docker/daemon.json
{
   "registry-mirrors": [
   "https://mirror.ccs.tencentyun.com"
  ]
}
[root@VM-3-8-centos ~]# systemctl daemon-reload
[root@VM-3-8-centos ~]# systemctl restart docker

五、容器镜像仓库

公共镜像仓库-docker hub

1、注册hub.docker.com/

2、创建镜像仓库

3、登录容器仓库

makefile 复制代码
[root@VM-3-8-centos ~]# docker login
Username: 
Password: 
WARNING! Your password will be stored unencrypted in 
Login Succeeded

要将新标签镜像推送到镜像仓库

ini 复制代码
[root@VM-3-8-centos ~]# docker tag centos:latest wushishu1/centos:v1
[root@VM-3-8-centos ~]# docker push wushishu1/centos:v1
The push refers to repository [docker.io/wushishu1/centos]
#提示:很卡是对的

从镜像仓库拉取镜像

csharp 复制代码
[root@VM-3-8-centos ~]# docker pull wushishu1/centos:v1

私有镜像仓库-harbor

1、获取进制文件docker compose二进制文件

私有仓库服务器建议:cpu2核;内存4G;disk 100G

perl 复制代码
[root@VM-80-61-centos ~]# wget https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64
#下载很慢->碰到这种问题可以买一台海外的服务器,硅谷下载速度贼亏
[root@VM-2-17-centos ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@VM-2-17-centos ~]# mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
#移动并且更名可执行目录
[root@VM-2-17-centos bin]# chmod +x /usr/bin/docker-compose
#执行权限
[root@VM-2-17-centos bin]# docker-compose version
docker-compose version 1.25.0, build 0a186604
docker-py version: 4.1.0
CPython version: 3.7.4
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

2、获取harbor安装文件

代办:学磁盘分区and挂载点知识

官网链接:github.com/goharbor/ha...

csharp 复制代码
[root@VM-2-17-centos bin]# df -h
/dev/vda1        99G  2.4G   92G   3% /
#df -h 是一个用于显示文件系统磁盘空间使用情况的命令
​
[root@VM-2-17-centos /]# wget https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz
[root@VM-2-17-centos /]# tar -xf harbor-offline-installer-v2.4.1.tgz

3、获取TLS文件

上传证书文件,解压unzip,把key和pem移动到harbor/目录下

arduino 复制代码
购买域名:https://buy.cloud.tencent.com/domain

配置免费SSL证书:https://console.cloud.tencent.com/ssl

配置DNS解析:https://console.cloud.tencent.com/cns/detail

4、修改配号文件

yaml 复制代码
[root@VM-2-17-centos harbor]# vim harbor.yml.tmpl
#更改文件
5 hostname: 自己的域名
​
17   certificate: 证书pem绝对路径
18   private_key: 证书key绝对路径
​
34 harbor_admin_password: 改密码
​
[root@VM-2-17-centos harbor]# mv harbor.yml.tmpl harbor.yml

5、执行预备脚本

确保本机安装docker

csharp 复制代码
[root@VM-2-17-centos harbor]# ./prepare

6、执行安装脚本

csharp 复制代码
[root@VM-2-17-centos harbor]# ./install.sh

7、验证运行情况

后面验证使用:docker ps 9个容器

8、访问harbor U界面

  • 虚拟机模式:手动添加解析
csharp 复制代码
[root@VM-3-8-centos ~]# vim /etc/hosts
  • 云服务器模式:增加DNS解析
ruby 复制代码
因为默认云服务器安全组配置TCP不放通过443和80端口,导致无法使用web服务器
安全组新建地址:https://console.cloud.tencent.com/vpc/security-group
给域名配置DNS解析:<https://console.cloud.tencent.com/cns/detail>

使用浏览器进行访问

默认:admin;12345

9、docker镜像上传至Harbor及从harbor下载

bash 复制代码
添加/etc/docker/daemon.json文件,里认不存在,需要手动添加
# vim /etc/docker/daemon.json
# cat /etc/docker/daemon.json
{
      "insecure-registries": ["私有仓库域名"]
}
重启加载daemon配置
# systemctl daemon-reload
重启docker
# systemctl restart docker
​
[root@VM-2-17-centos harbor]# docker ps
#此时你会发现容器不为9个

提示:解决办法

csharp 复制代码
[root@VM-2-17-centos harbor]# cd /harbor
[root@VM-2-17-centos harbor]# docker-compose down
[root@VM-2-17-centos harbor]# docker-compose up -d
[root@VM-2-17-centos harbor]# docker ps
#运行中的容器为9个

上传至Harbor服务器

shell 复制代码
为已存在镜像重新添加tag
# docker tag centos:latest 你的域名/library/centos:v1
验证结果
# docker images
登录Harbor服务器~~默认admin;12345~~logout等出
# docker login 你的域名
# docker push 你的域名/library/centos:v1

从Harbor服务器拉取镜像

bash 复制代码
# 添加hosts解析
# docker pull 你的域名/library/centos:v1
```# 容器镜像介绍及应用
相关推荐
成都古河云36 分钟前
智慧场馆:安全、节能与智能化管理的未来
大数据·运维·人工智能·安全·智慧城市
算法与编程之美38 分钟前
文件的写入与读取
linux·运维·服务器
Amelio_Ming1 小时前
Permissions 0755 for ‘/etc/ssh/ssh_host_rsa_key‘ are too open.问题解决
linux·运维·ssh
心灵彼岸-诗和远方1 小时前
Devops业务价值流:软件研发最佳实践
运维·产品经理·devops
JuiceFS2 小时前
好未来:多云环境下基于 JuiceFS 建设低运维模型仓库
运维·云原生
Ven%2 小时前
centos查看硬盘资源使用情况命令大全
linux·运维·centos
景天科技苑2 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
萨格拉斯救世主3 小时前
戴尔R930服务器增加 Intel X710-DA2双万兆光口含模块
运维·服务器
Jtti3 小时前
Windows系统服务器怎么设置远程连接?详细步骤
运维·服务器·windows
yeyuningzi3 小时前
Debian 12环境里部署nginx步骤记录
linux·运维·服务器