2013
年诞生,推荐单容器只运行一个程序或进程,形成一个分布式的应用模型。
总结下来就是: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'
具体的安装步骤可以参考我的之前文章:mac harbor。
centos
的镜像,并进入容器,安装常用的工具docker pull centos
# 建议这种方式启动,巨坑,centos容器会闪退
docker run -itd -p 22:22 --name my-centos centos /bin/bash
# 进入容器
docker exec -it xxx /bin/bash
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 自动扫描,上游自动缓存
docker update xxx --restart=always
docker filedir xxx:container_dir
docker cp 容器名:容器地址 本机地址
docker stats
docker commit -m "描述信息" -a "镜像作者" 容器名 镜像名:版本号
# 将镜像备份
docker save 镜像名:版本号 -o xxx.tar
# 加载镜像
docker load -i xxx.tar