Image
IT 领域,镜像通常是指一系列文件或一个磁盘驱动器的精确副本,和 ZIP 压缩文件类似
docker images
列出当前 Docker 主机所拥有的镜像列表
Dockerfile
默认使用 Dockerfile 文件来描述镜像,Docker 引擎通过读取文件中的指令自动构建镜像
官方示例:
FROM scratch # 定义基础镜像
COPY hello / # 将本机目录所在的文件复制到镜像文件系统的根目录
CMD ["/hello"] # 通过镜像来启动容器时执行的命令
基础镜像与父镜像
传统镜像分层
基于Dockerfile的镜像分层
docker pull <镜像>
命令 | 说明 |
---|---|
docker image ls | 显示本地镜像列表 |
docker images | 显示本地镜像列表 |
docker images -a | 显示所有镜像 |
docker images --no-trunc | 显示完整的镜像信息 |
docker images -q | 只显示镜像的ID |
docker images --digests | 显示镜像的摘要值等信息 |
docker images centos | 基于具体的镜像标识来显示镜像信息 |
docker images -f dangling=true | 显示没有TAG的镜像信息 |
docker tag 源镜像的标识 目标镜像的标识
:也就是个镜像重命名一下,不影响原来的镜像
命令 | 说明 |
---|---|
docker tag busybox:latest demo:v1 | 给镜像重新打上标签 |
docker tag df8662dadd4f demo:v2 | 通过镜像ID重新打上标签 |
docker inspect <镜像标识>
命令 | 说明 |
---|---|
docker inspect 9211bbaa0dbd | 通过镜像ID查看镜像的详细信息 |
docker inspect centos:7 | 通过镜像名称查看镜像的详细信息 |
docker inspect --format=‘{{.Architecture}}’ 9211bbaa0dbd | 可以指定格式显示(感觉不好用) |
docker history <镜像标识>
命令 | 说明 |
---|---|
docker history centos:7 | 查看镜像构建历史 |
docker history centos:7 --no-trunc | 查看镜像构建历史饼显示完整的操作命令(显示不够友好) |
docker history centos:7 -H=false | 镜像大小和构建时间格式输出,更具体 |
docker search <镜像标识>
:可以搜索DockerHub中的镜像
--limit
可以限制搜索条数,默认好像是25个显示信息 | 说明 |
---|---|
NAME | 镜像仓库源的名称 |
DESCRIPTION | 镜像描述 |
STARS | 星星数,有点像github那种 |
OFFICIAL | 是否官方发布,【OK】表示官方发布的 |
AUTOMATED | 是否自动构建,【OK】表示自动构建 |
命令 | 说明 |
---|---|
docker rmi <镜像标识1> <镜像标识2> <镜像标识3> | 删除镜像1、镜像2、镜像3 |
docker rmi -f <镜像标识1> <镜像标识2> <镜像标识3> | 强制删除 |
docker image prune | 清理未使用过的镜像(只包括虚悬镜像:就是没有TAG且没被其他引用的镜像) |
docker images prune -a | 清理未使用的镜像,虚悬镜像+没有被容器使用的镜像 |
命令 | 说明 |
---|---|
docker save -o <导出镜像文件的名称> <需要导出的本地镜像标识> | 将本地存在的镜像导出一个特定的文件里面 |
docker save <需要导出的本地镜像标识> > <导出镜像文件的名称> | 同上,只是取消了-o选项,使用重定向方式到文件里面 |
docker load -i <导出镜像文件的名称> | 将上述导出的镜像进行导入操作 |
可以根据镜像的公开程度
环境说明
环境:RockyLinux8.6
网络环境:联网
内网IP:192.168.1.236
资源:10C10G
基础设置
安装docker
下载二进制包
mkdir /opt/software ; cd /opt/software
curl -o docker-24.0.7.tgz \
https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz
解压安装
tar xzvf docker-24.0.7.tgz
cp docker/* /usr/bin/
useradd -s /usr/sbin/nologin -M docker
生成启动文件
### 1
cat > /usr/lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target
EOF
### 2
cat > /usr/lib/systemd/system/docker.socket << EOF
[Unit]
Description=Docker Socket for the API
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=docker
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
启动验证
systemctl daemon-reload
systemctl enable docker --now
docker run hello-world
安装 docker-compose
cd /opt/software
wget https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v
安装 cfssl 证书工具
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.0/cfssl_1.6.0_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.0/cfssljson_1.6.0_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.0/cfssl-certinfo_1.6.0_linux_amd64
mv cfssl_1.6.0_linux_amd64 /usr/local/bin/cfssl
mv cfssljson_1.6.0_linux_amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_1.6.0_linux_amd64 /usr/local/bin/cfssl-certinfo
chmod +x /usr/local/bin/cfssl*
cfssl version
颁发证书
生成 CA 证书机构
mkdir -p /opt/software/harbor/ssl/
cfssl print-defaults config > /opt/software/harbor/ssl/ca-config.json
cat >/opt/software/harbor/ssl/ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"harbor": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
生成并修改默认请求文件
cfssl print-defaults csr >/opt/software/harbor/ssl/ca-csr.json
cat >/opt/software/harbor/ssl/ca-csr.json <<EOF
{
"CN": "harbor",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Chengdu",
"L": "chengdu"
}
]
}
EOF
初始化 CA 证书
cfssl gencert -initca /opt/software/harbor/ssl/ca-csr.json | cfssljson -bare /opt/software/harbor/ssl/ca
创建修改 Harbor 证书请求文件
cfssl print-defaults csr >/opt/software/harbor/ssl/harbor-csr.json
### 注意修改IP地址
cat >/opt/software/harbor/ssl/harbor-csr.json <<EOF
{
"CN": "harbor",
"hosts": [
"127.0.0.1",
"192.168.1.236"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Chengdu",
"L": "Chengdu"
}
]
}
EOF
CA 向 Harbor 颁发证书
cfssl gencert -ca=/opt/software/harbor/ssl/ca.pem \
-ca-key=/opt/software/harbor/ssl/ca-key.pem \
-config=/opt/software/harbor/ssl/ca-config.json \
-profile=harbor /opt/software/harbor/ssl/harbor-csr.json \
| cfssljson -bare /opt/software/harbor/ssl/harbor
安装 harbor
下载离线安装包
cd /opt/software
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgz
### 解压
tar -xf harbor-offline-installer-v2.9.0.tgz
导入镜像
docker load -i harbor.v2.9.0.tar.gz
修改配置文件
cp harbor.yml.tmpl harbor.yml
### 修改配置文件
hostname: 192.168.1.236
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /opt/software/harbor/ssl/harbor.pem ### 证书路径
private_key: /opt/software/harbor/ssl/harbor-key.pem ### 证书路径
data_volume: /opt/software/harbor/data ### 数据目录
metric: ### 打开监控
enabled: true
port: 9090
path: /metrics
加载配置
### 注意目录
./prepare
安装启动
./install.sh --with-trivy
检查服务状态
docker-compose ps
访问验证:默认密码Harbor12345
配置注册中心到docker
### cat /etc/docker/daemon.json 新增即可
{
"registry-mirrors": ["https://xpd691zc.mirror.aliyuncs.com"],
"insecure-registries":["https://192.168.1.236"]
}
### 还需要复制注册中心的证书到docker
mkdir -p /etc/docker/certs.d/192.168.1.236
cd /etc/docker/certs.d/192.168.1.236
cp /opt/software/harbor/ssl/harbor* ./
### 重启即可
systemctl daemon-reload
systemctl restart docker
启停服务
解压后的目录–》docker-compose down
–》docker-compose up -d
数据监控
浏览器访问9090的/metrics路径
推送镜像到注册中心的公共仓库
### 登陆注册中心
docker login 192.168.1.236
### tag一下后推送
docker tag mysql 192.168.1.236/library/mysql:v1
docker push 192.168.1.236/library/mysql:v1
前端查看
扫描一下
harbor实例复制到另一个 harbor 实例的过程
部署另一套 harbor
配置镜像复制
浏览器访问 192.168.1.236的注册中心地址后台
【仓库管理】:新建目标
【复制管理】:新建规则(每个选项都有一定的说明,根据实际情况选择即可)
验证一下:
总结性
?