在Centos7容器中启用中文支持

19 篇文章 1 订阅
3 篇文章 0 订阅

从dockerhub拉取的Centos7容器底包不包含中文字符集,因此需要加装中文字符集,本文讲解如何基于centos:centos7的底包,制作启动即支持中文的镜像。

一、拉取centos:centos7的底包

[root@localhost opt] # docker pull centos:centos7

二、通过原始镜像启动容器并制作新的容器

  1. 从原始镜像启动容器。

[root@localhost opt]# docker run -itd --name intsrv centos:centos7             
6fb2ad86f4e1ff0e40f1337a3c05a078264b8523f4b58c9bac9e0c4ad2634e33
  1. 进入容器,将容器内的yum源换为合适的源,因Centos7已停止支持,可以用ISO光盘作源。

[root@localhost opt]# docker exec -it intsrv /bin/bash
[root@6fb2ad86f4e1 /]# rm /etc/yum.repos.d/* -rf
[root@6fb2ad86f4e1 /]# vi /etc/yum.repos.d/http.repo
"/etc/yum.repos.d/http.repo" [New] 5L, 84C written
  1. 查看系统自带的字符集,可见没有中文字符集zh_CN.utf8

[root@6fb2ad86f4e1 /]# locale -a
C
POSIX
en_US.utf8
  1. 安装中文支持包,主要是kde-l10n-Chinese和glibc-common,网上有装fonts的方案,实测也可以,但是安装的附加包相比本方案太多了,不利于容器的轻量化。

[root@6fb2ad86f4e1 /]# yum install kde-l10n-Chinese
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
os                                                                                                                                   | 3.6 kB  00:00:00     
(1/2): os/group_gz                                                                                                                   | 153 kB  00:00:00     
(2/2): os/primary_db                                                                                                                 | 3.3 MB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package kde-l10n-Chinese.noarch 0:4.10.5-2.el7 will be installed
--> Processing Dependency: kde-l10n = 4.10.5-2.el7 for package: kde-l10n-Chinese-4.10.5-2.el7.noarch
--> Running transaction check
---> Package kde-l10n.noarch 0:4.10.5-2.el7 will be installed
--> Processing Dependency: kde-filesystem for package: kde-l10n-4.10.5-2.el7.noarch
--> Running transaction check
---> Package kde-filesystem.x86_64 0:4-47.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================================
 Package                                     Arch                              Version                                  Repository                     Size
============================================================================================================================================================
Installing:
 kde-l10n-Chinese                            noarch                            4.10.5-2.el7                             os                            3.5 M
Installing for dependencies:
 kde-filesystem                              x86_64                            4-47.el7                                 os                             48 k
 kde-l10n                                    noarch                            4.10.5-2.el7                             os                             13 k
...
Installed:
  kde-l10n-Chinese.noarch 0:4.10.5-2.el7                                                                                                                    

Dependency Installed:
  kde-filesystem.x86_64 0:4-47.el7                                              kde-l10n.noarch 0:4.10.5-2.el7                                             

Complete!
[root@6fb2ad86f4e1 /]# yum install glibc-common  
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package glibc-common.x86_64 0:2.17-307.el7.1 will be updated
--> Processing Dependency: glibc-common = 2.17-307.el7.1 for package: glibc-2.17-307.el7.1.x86_64
---> Package glibc-common.x86_64 0:2.17-317.el7 will be an update
--> Running transaction check
---> Package glibc.x86_64 0:2.17-307.el7.1 will be updated
---> Package glibc.x86_64 0:2.17-317.el7 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================================
 Package                                  Arch                               Version                                   Repository                      Size
============================================================================================================================================================
Updating:
 glibc-common                             x86_64                             2.17-317.el7                              os                              11 M
Updating for dependencies:
 glibc                                    x86_64                             2.17-317.el7                              os                             3.6 M

...

Updated:
  glibc-common.x86_64 0:2.17-317.el7                                                                                                                        

Dependency Updated:
  glibc.x86_64 0:2.17-317.el7                                                                                                                               

Complete!
  1. 再次核查仍并没发现中文字符集,需用localedef命令编译语言环境的定义文件

[root@6fb2ad86f4e1 /]# locale -a
C
POSIX
en_US.utf8
root@6fb2ad86f4e1 /]# localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
  1. 继续检查,这个字符集有了

[root@6fb2ad86f4e1 /]# locale -a
C
POSIX
en_US.utf8
zh_CN.utf8
  1. 修改系统启动后默认使用中文字符集语言环境

网上有多种修改方法,实测以下两种在容器环境中不适用,判断应是容器启动后不会自动加载相应文件:

[root@6fb2ad86f4e1 /]# vi /etc/locale.conf 
[root@6fb2ad86f4e1 /]# cat /etc/locale.conf 
LANG="zh_CN.UTF-8"
[root@6fb2ad86f4e1 /]# echo 'export LANG="zh_CN.utf8"' >>/etc/profile
[root@6fb2ad86f4e1 /]# echo 'export LC_ALL="zh_CN.utf8"' >>/etc/profile      
[root@6fb2ad86f4e1 /]# tail -n2 /etc/profile         
export LANG="zh_CN.utf8"
export LC_ALL="zh_CN.utf8"
  1. 实测在容器中以下方案可行:

[root@6fb2ad86f4e1 /]# echo 'export LANG="zh_CN.utf8"' >>~/.bashrc
[root@6fb2ad86f4e1 /]# echo 'export LC_ALL="zh_CN.utf8"' >>~/.bashrc
[root@6fb2ad86f4e1 /]# tail -n2 ~/.bashrc
export LANG=zh_CN.utf8
export LC_ALL=zh_CN.utf8
  1. 重启容器进行测试

[root@6fb2ad86f4e1 /]# exit
exit
[root@localhost opt]# docker restart intsrv           
intsrv
[root@localhost opt]# docker exec -it intsrv /bin/bash
[root@6fb2ad86f4e1 /]# locale
LANG="zh_CN.utf8"
LC_CTYPE="zh_CN.utf8"
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
LC_COLLATE="zh_CN.utf8"
LC_MONETARY="zh_CN.utf8"
LC_MESSAGES="zh_CN.utf8"
LC_PAPER="zh_CN.utf8"
LC_NAME="zh_CN.utf8"
LC_ADDRESS="zh_CN.utf8"
LC_TELEPHONE="zh_CN.utf8"
LC_MEASUREMENT="zh_CN.utf8"
LC_IDENTIFICATION="zh_CN.utf8"
LC_ALL=zh_CN.utf8
  1. 此时即可通过切换输入法进行中文输入测试

[root@localhost opt]# 中文输入正常

可见当前容器对中文语言已能正常支持。

三、docker commit 提交当前容器为一个新的支持中文环境的镜像

  1. 提交新镜像

[root@localhost opt]# docker commit -m "centos7 with zh_CN.UTF8 20230209" -a "daijianbing"  6fb2ad86f4e1 centos-zh:V7.8.2003
  1. 导出镜像为本地文件便于保存和分发

[root@localhost opt]# docker save -o centos-zh-V7.8.2003.tar centos-zh:V7.8.2003
  1. 通过新镜像重新生成启动一个容器,测试如下,没有问题

通过制作centos7的中文支持镜像,一些老旧的代码又可以迁移到容器中正常运行了,能用就不改,是不变的真理,😄。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代先生.重庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值