Docker
- install Docker
参照官网
- install kubernetes
安装 kubernetes 的时候,需要安装 kubelet, kubeadm 等包,但 k8s 官网给的 yum 源是 packages.cloud.google.com,国内访问不了,此时我们可以使用阿里云的 yum 仓库镜像。
阿里云上没有附 Help 说明连接,简单摸索了下,如下设置可用(centos)。注意不要开启 check。
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
开发思路
1 寻找基础镜像
2 基于基础镜像编写 Dockerfile 脚本
3 根据 Dockerfile 脚本创建项目镜像
4 将创建的镜像推送到 docker 仓库 (根据自身需要,可做可不做)
5 基于项目镜像创建并运行 docker 容器 (实现最终部署)
思路:使用 centos 容器安装对应的软件环境,最后将环境导出。
操作步骤
- 创建容器
$ docker pull centos
$ sudo docker run --privileged --cap-add SYS_ADMIN -e container=docker -it --name my_centos -p 80:8080 -d --restart=always centos:7 /usr/sbin/init
- 启动容器
$ docker exec -it my_centos /bin/bash
- 导出和导入
$ docker export my_centos > /data/app/meifen/my_centos-export-0428.tar
$ docker import /data/app/meifen/my_centos-export-0428.tar
- 保存 save
格式:docker save IMAGE(镜像)
使用 docker images 查看本机已有的镜像(也可以使用 docker commit <CONTAIN-ID> <IMAGE-NAME> 命令把一个正在运行的容器保存为镜像)
$ docker save 9610cfc68e8d > /data/app/meifen/my_centos-export-0428.tar
- 加载 load
有点慢,稍微等待一下,没有任何 warn 信息就表示保存 OK。9610cfc68e8d 是镜像 ID
现在就可以在任何装 docker 的地方加载 刚保存的镜像了
$ docker load < /home/my_centos-export-0428.tar
其他说明
镜像和容器 导出和导入的区别
1 容器导入 是将当前容器变成一个新的镜像
2 镜像导入 是复制的过程
save 和 export 区别
1 save 保存镜像所有的信息 - 包含历史
2 export 只导出当前的信息
export 导出的镜像文件大小 小于 save 保存的镜像。export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史,所以无法进行回滚操作(docker tag <LAYER ID> <IMAGE NAME>);而 save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。(查看方式:docker images –tree)。export 只导出当前的信息
提交 Docker-hub
- 提交镜像
$ docker commit -a "cristic" -m "commit content" 801a40ffa673 cristicmei/name:v1.0.0
- 查看镜像
$ docker images
- 登录 docker-hub
$ docker image
前提是用户有 docker-hub 的账号
- 提交远程仓库
$ docker push cristicmei/name:v1.0.0
精简 Docker 镜像大小的必要性
Docker 镜像由很多镜像层(Layers)组成(最多 127 层),镜像层依赖于一系列的底层技术,比如文件系统(filesystems)、写时复制(copy-on-write)、联合挂载(union mounts)等技术,可以查看 Docker 社区文档以了解更多有关 Docker 存储驱动的内容,这里不再赘述。总的来说,Dockerfile 中的每条指令都会创建一个镜像层,继而会增加整体镜像的尺寸。
下面是精简 Docker 镜像尺寸的好处:
减少构建时间
减少磁盘使用量
减少下载时间
因为包含文件少,攻击面减小,提高了安全性
提高部署速度
- 最重要的因素是减少镜像的层数,这样能大大减小镜像的大小;
使用链式代码“&&”把多行指令结合成一行
- 清除 yum 缓存
$ yum clean headers
$ yum clean packages
$ yum clean all
- 清除无用的 tar.gz 安装包
- 选择更小的基础镜像
ISSUE
/var/lib/docker/overlay2 占用很大,清理 Docker 占用的磁盘空间,迁移 /var/lib/docker 目录
1. 命令查看磁盘使用情况
$ du -hs /var/lib/docker/
用于查看 Docker 的磁盘使用情况
$ docker system df
- 清理磁盘
$ docker system prune
可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及 dangling 镜像(即无 tag 的镜像)。
$ docker system prune -a
- 迁移 /var/lib/docker 目录