docker+harbor

437 阅读4分钟

docker

2013年诞生,推荐单容器只运行一个程序或进程,形成一个分布式的应用模型。

总结下来就是:docker带来启动流程更快,运行效率较高、资源损耗较小,属于轻量级的服务。

docker的安装

推荐的一键化安装的脚本:

这个脚本很好的解决了安装过程中出现的很多问题,同时,配置了很多的镜像加速器,实现docker pull的加速。

 #!/bin/bash
 Version="20.10.4-3.el7"
 ​
 # 下载docker安装源
 wget -P /etc/yum.repos.d/ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 ​
 # 安装docker
 yum -y install docker-ce-$Version || echo -e '\033[1;31m安装失败,请检查网络和yum源配置!\033[0m'
 ​
 # 使用国内镜像加速
 # 阿里云(需要登录账号分配地址)
 # 网易云 https://vgunv6qp.mirror.aliyuncs.com
 # 腾讯云 https://mirror.ccs.tencentyun.com
 # 中科大 https://docker.mirrors.ustc.edu.cn
 # docker中国 https://registry.docker-cn.com
 mkdir -p /etc/docker
 tee /etc/docker/daemon.json <<-'EOF'
 {
     "registry-mirrors": [
         "https://mirror.ccs.tencentyun.com",
         "https://docker.mirrors.ustc.edu.cn",
         "https://registry.docker-cn.com"
     ]
 }
 EOF
 ​
 # 重新加载配置并启动docker
 systemctl daemon-reload
 systemctl enable --now docker
 ​
 docker version && echo -e "\033[1;32m${Version}安装成功!\033[0m" || echo -e '\033[1;31m安装失败!\033[0m'

docker自己的镜像仓库

  1. 第三方的仓库存在网速的限制
  2. 可以存储自己的镜像

具体的安装步骤可以参考我的之前文章:mac harbor。

上传本地的镜像

私有仓库镜像的下载

实际的验证

上传本地的镜像

  • 在docker harbor上新建项目

  • 本地拉取centos的镜像,并进入容器,安装常用的工具
 docker pull centos
 # 建议这种方式启动,巨坑,centos容器会闪退
 docker run -itd -p 22:22 --name my-centos centos /bin/bash
 ​
 # 进入容器
 docker exec -it xxx /bin/bash
  • 安装linux常用的工具
 yum install -y  curl wget vim nano gzip tar net-tools

发现了如下的异常:基本确定是镜像源的问题。

 Failed to set locale, defaulting to C.UTF-8
 CentOS Linux 8 - AppStream                                                                                                     17  B/s |  38  B     00:02
 Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

于是找到了一篇文章很好的解决了这个问题:问题解决:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist:...

基本上都是直接复制粘贴命令:

 cd /etc/yum.repos.d/
 sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
 ​
 sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
 ​
 yum clean all
 ​
 yum makecache

这样子的就算成功了,继续执行我的命令。

很神速就安装完成了。不放心的可以再次验证一下:

  yum list installed | grep vim
  
  # 后期再次验证容器
  echo 'hello shigen-centos' > readme.txt

在此致敬阿里云,提供了镜像,为开发者节省了很多的时间。


所以,现在我们看到我的centos拥有了阿里云的镜像,拥有了这么多常用的工具,我想要保存一份,供内部使用或者日后自己使用怎么办?barbor很好的解决了这个问题。

现在演示怎么上传到harbor的镜像仓库。

 # 生成离线的镜像
 docker save -o centos.tar.gz centos
 # 查看
 ll | grep centos
 ​
 # 加载离线的镜像包
 docker load -i centos.tar.gz
 ​
 # 上传镜像打标签
 docker tag centos:latest xxxxx/test/centos:v1
 docker push xxxx/test/centos:v1

上述的教程存在问题,打包和上传的其实是和官方的镜像一样的,坑!我研究发现:我们需要自己把容器整成新镜像,推送到harbor

 docker commit --author 'shigen' --message 'add tools and mirrors for centos' 89a shigen-centos:v1
 # 查看所有的镜像,已经可以看到了我commit好的
 docker images

现在就是推送了

 # 重新命名一下标签
 docker tag shigen-centos:v1 xxxxx/test/shigen-centos:v1
 docker push xxxxx/test/shigen-centos:v1

在控制台中可以看到上传的进度。在harbor管理页面验证一下:

可以看到上传成功了。

私有仓库的下载

在拉取之前,为了验证效果,我先把本地的全部删除了,包括镜像、容器。

 docker images
 # 确保本地没有任何的镜像和容器
 ocker pull xxxxx/test/shigen-centos:v1

运行容器

 docker run -itd --name shigen-centos-v1 -p 22:22 699 /bin/bash
 docker exec -it 22f /bin/bash
 ​
 cat ~/readme.txt
 yum list installed | grep vim

可以看到可之前的一摸一样啦,OK,大功告成!

一些高级的玩法,或者视频教程,推荐:【老湿基】Docker 必知必会 (1): Harbor 容器镜像托管服务!CVE 自动扫描,上游自动缓存

其它的一些技巧

1. docker镜像开机自启

 docker update xxx --restart=always

2. docker文件的添加

  • 本机文件放到docker容器
 docker filedir xxx:container_dir
  • docker容器文件放到主机
 docker cp 容器名:容器地址 本机地址

3. 查看docker的内存、网络等状况

 docker stats

4. 将容器打包成镜像

 docker commit -m "描述信息" -a "镜像作者" 容器名 镜像名:版本号
 ​
 # 将镜像备份
 docker save 镜像名:版本号 -o xxx.tar
 # 加载镜像
 docker load -i xxx.tar