# :-: docker基础镜像制作-服务器版
| 适用范围 | 适用版本 | 人员 | 发布时间 | 文档版本 |备注 |
| --- | --- | --- | --- | --- |--- |
| 服务器操作系统 | V10-SP1、V10-SP2 | 王国武 |2022.3.22| V1.0|发布|
| 服务器操作系统 | V10-SP1、V10-SP2 | 张志勇 |2022.3.22| V1.1|模板调整|
### 经测试,该方案有效可行
*****
## 1. 背景
客户的一些应用需要部署运行在docker上,常需要服务器系统的docker基础镜像来制作docker应用镜像,以往可以通过将系统根目录打包的方式直接制作镜像,但这种方式制作的docker镜像过大,即使裸系统也差不多达到10个G大小,这样不方便后续扩展维护,本篇描述制作小型化docker系统镜像的方式,大小可以缩减为1个G左右。为描述方便本文用银河麒麟V10高级服务器系统x86镜像为例,arm及其他CPU架构制作方式类似。
## 2. 制作过程
### 1.搭建本地yum源
外网源有很多更新部分,因此不利于缩减镜像大小,因此最好用原始系统镜像制作docker基础镜像,这就需要将外网yum源暂时关闭使用本地源,这也符合一些客户内网环境的需求。
#### 1)将镜像通过光盘或U盘挂载到/mnt目录下
如`mount /media/kylin/xxx.iso /mnt`
#### 2)修改/etc/yum.repo.d/ kylin_x86_64_local.repo文件内容如下
`cd /etc/yum.repos.d`
`cp –a kylin_x86_64.repo kylin_x86_64_local.repo`
`vim kylin_x86_64_local.repo`

关闭外网yum源,修改/etc/yum.repo.d/ kylin_x86_64.repo,将其中的enabled项值都改为0

查看所有仓库状态如下,则正常切换到本地源

### 2. 配置docker系统镜像本地源
#### 1)在指定目录中生成根目录文件
`cd /`
`mkdir /ky10-docker-server`
`yum -y --installroot=/ky10-docker-server install yum`
执行完上述命令后/ky10-docker-server目录中就生成了根目录文件

#### 2)修改制作根目录中的yum源为本地yum源
该步必须有,不然无法连接外网时,会报yum源有问题,无法使用命令将软件安装到docker镜像中。
与前面配置本地yum源的方式相同,只不过是修改/ky10-docker-server/etc/yum.repo.d中的yum配置文件

### 3. 将基础软件安装到docker系统镜像中
如果用上述目录制作成系统镜像,几乎是什么都没有安装,很多命令都无法使用,而且也没有常用的jdk环境,因此我们需要安装一些常用的软件,以方便之后的使用,这里安装4个软件,net-tools、iproute、openjdk、vim,这样制作好的镜像作为容器启动后就可以正常使用网络命令、编辑配置文件并拥有jdk环境了。可以使用chroot /ky10-docker-server/ 来将系统根目录切换到/ky10-docker-server/ 再执行相关命令,来测试安装软件是否成功。
`yum -y --installroot=/ky10-docker-server install net-tools iproute java-1.8.0-openjdk vim`
将系统环境变量拷贝到docker镜像中
`cp /etc/skel/.bash* /ky10-docker-server/root/`
`echo "" > /ky10-docker-server/root/.bash_history`
### 4. 将根目录打包
`cd /ky10-docker-server/`
`tar -cvpf /root/system.tar --directory=/ky10-docker-server/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .`
此时的system.tar文件其实就是docker基础镜像了
### 5. 将tar包导入docker
V10服务器系统默认docker是启动的,执行systemctl status docker 看是否docker正常运行
`docker import /root/system.tar ky10-server:src `
`docker images`

可以看到基础镜像只有1个G左右
### 6. 用docker镜像启动容器
`docker run -it ky10-server:src /bin/bash`

可以看到命令可以正常执行
-it 后面也可以接IMAGE ID,如这里可以
`docker run -it 7f657787425f /bin/bash`
注意前2个docker run 命令是用镜像新建容器并进入,如果想进入已存在的容器就不能用上述命令了,需要使用docker exec 命令,可以使用exit命令退出当前容器。
`docker ps -a 查看所有容器`
`docker ps 查看正在运行的容器`

启动并进入已存在的容器,使用容器号(CONTAINER ID)进入
`docker start 29f31b9a3bae && docker exec -it 29f31b9a3bae /bin/bash`

&&符可以连接多条命令进行多步操作
停止容器
`docker stop 29f31b9a3bae`
### 7. 将容器导出成docker基础镜像
进入容器后可以做一些配置,安装软件,然后将容器导出成文件方便后续使用,这里我们不做任何操作,直接将该容器导出做成基础镜像。
`docker export -o /root/ky10-server-base.tar 29f31b9a3bae`
后面也可以接容器对应的名字(NAMES)

导出成文件后也可以导入测试一下

这样基础镜像就制作完成了,可以把制作的tar包拷贝到需要的地方供需要时使用。
制作镜像时为了简化步骤也可以用Dockerfile来完成,然后用docker save –o命令来导出镜像,可以根据项目需要选择对应的解决方案,这里不再做详细说明。
### 8. docker端口映射
在启动docker容器时一般需要做端口映射,以使外部网络可以通过宿主机网络访问到docker的端口,也是通过这种方法外部网络可以访问到docker内部。
如docker上运行tomcat,要外部访问到docker的8080端口,可以用下命令实现
`docker run -it -d -p 8888:8080 --name mytomcat ky10-server-base /bin/bash`
这条命令也是通过镜像创建容器并启动容器,之后再访问该容器不能再使用docker run命令,可以通过docker exec 命令来进入容器。
- 常见问题
- 进入救援模式
- 进入单用户模式
- grub引导修复
- V10SP1-biosdevname解析
- 外设挂载和卸载
- audit关闭解决方案
- 终端无法切换
- 救援模式取数据
- 网卡更名操作
- 问题复现解决类
- xgboost复现解决步骤
- 激活类
- 麒麟服务器激活常用命令
- 服务器故障激活问题--须知
- 激活权限获得方式
- V10-SP系列服务器激活
- 银河麒麟高级服务器操作系统V7&V10激活手册
- shell脚本类
- 多网卡队列绑定CPU脚本
- 服务器健康检查脚本
- 服务安装配置类
- 银河麒麟高级服务器操作系统V10(sp1)安装手册
- LVM创建
- Chrony时间同步配置
- 搭建网络yum源
- PXE部署实施
- Man手册安装
- 部署VNC服务
- Kylin-Server-V10-SP1-0711-DNS服务单机部署文档
- 麒麟ks文件定制-封装iso文件
- iptables端口配置
- V10-SP1-aarch64安装jdk1.7
- 工具使用类
- cyclictest测试工具
- e2fsprogs工具介绍
- Logrotate工具说明
- nmon工具安装与使用
- 升、降级类
- rsyslog升级报告
- 性能优化类
- 日志轮转
- 大页内存与透明大页详解
- 优化磁盘IO调度方式
- core文件设置
- 分析报告类
- bond模式4协商不通排查
- audit内存泄露问题分析报告
- mate-indicators内核占用过高问题分析报告
- ansible问题-hostname以及lvol报错
- 关于Linux内存计算的说明
- 磁盘IO调度算法
- 硬件相关类
- 串口
- 网络相关类
- bond创建
- 在已配置好网络情况下添加路由
- 网卡配合网桥实现内网互通KVM虚拟机
- Bond模式4协商不通排查过程
- HA高可用
- kylin HA shell实践
- kylin HA概念性及shell使用
- 虚拟化
- KVM创建虚拟机(图形化操作)
- KVM创建虚拟机(命令操作)
- 容器类
- docker-runc升级
- docker基础镜像制作-服务器版
- 麒麟云平台
- USB3.0设备穿透方法(针对win10云主机穿透)
- 麒麟云平台开关机操作说明
- 技术演练
