中文乱码问题
默认的docker中的centos并不支持中文,而且我谷歌了一大堆,默认的方法都没啥用,最后终于找到解决办法,所以在这里记录下。[highlight lanaguage=”bash”]
#先判断是否下载了中文编码(看下有没有zn_CH开头的) locale -a ######如果是下面这样说明不支持中文 [root@f6179ac439f2 /]# locale -a C POSIX en_US.utf8 ###### #安装语言包 yum install kde-l10n-Chinese -y #更新gitbc包(防止镜像阉割了该包的部分功能) yum reinstall glibc-common -y #设置系统语言包 localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 #在/etc/profile/中新加 export LC_ALL="zh_CN.UTF-8" export LANG="zh_CN.UTF-8" #环境生效(这一步可能出错,不过我们可以不管它) source /etc/profile #设置一下/etc/locale.conf,在里面加上 LANG="zh_CN.UTF-8" #然后自己重启下容器,在进来,如果发现还是没用,在更新一下环境 source /etc/profile
[/highlight]
开机自启动脚本
我自己到网上查了一下,发现docker是没有什么开机和关机的概念的,所以我写在这里没用,不过还是在这里写一下把,以后或许用的着。开启自启某项服务
centos中开机自启某项服务非常方便,只需要下面两个命令就可以了[highlight lanaguage=”bash”]
systemctl enable jenkins.service #设置jenkins服务为自启动服务 sysstemctl start jenkins.service #启动jenkins服务
[/highlight]
开机自启脚本
首先我们先写好脚本注意:description必须要写,要不然无法加到自启列表里面
[highlight lanaguage=”bash”]
#!/bin/bash #description:开机自启脚本 /usr/local/tomcat/bin/startup.sh #启动tomcat
[/highlight]
方法1
[highlight lanaguage=”bash”]
#赋予脚本可执行权限(/opt/script/autostart.sh是你的脚本路径)
chmod +x /opt/script/autostart.sh
#打开/etc/rc.d/rc.local或/etc/rc.local文件,在末尾增加如下内容
su - user -c ‘/opt/script/autostart.sh’
#在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限
chmod +x /etc/rc.d/rc.local
[/highlight]
方法2
[highlight lanaguage=”bash”]
#将脚本移动到/etc/rc.d/init.d目录下
mv /opt/script/autostart.sh /etc/rc.d/init.d
#增加脚本的可执行权限
chmod +x /etc/rc.d/init.d/autostart.sh
#添加脚本到开机自动启动项目中
cd /etc/rc.d/init.d
chkconfig –add autostart.sh
chkconfig autostart.sh on
[/highlight]
自定义服务
1.写服务文件[Unit]:服务的说明 Description:描述服务 After:描述服务类别[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径
[Install]服务安装的相关设置,可设置为多用户示例:nginx.service
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop[Install]
WantedBy=multi-user.targetredis.service
[Unit]
Description=Redis
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecStop=kill -INTcat /tmp/redis.pid
User=www
Group=www[Install]
WantedBy=multi-user.target
[highlight lanaguage=”bash”]
#保存服务(754权限,在下面这个文件夹里) /usr/lib/systemd/system #设置开机自启 systemctl enable nginx.service #其他命令 #启动服务 systemctl start nginx.service #设置开机自启动 systemctl enable nginx.service #停止开启自启 systemctl disable nginx.service #查看服务状态 systemctl status nginx.service #重启服务 systemctl restart nginx.service #查看所有已经启动的服务 systemctl list-units --type=service
[/highlight]
docker自启动执行脚本
docker比较特殊,我们可以使用下面的方法。[highlight lanaguage=”bash”]
#用下面的命令打开一个容器就可以了 docker run -d -it -p 8889:8889 bcde81929337 /bin/bash -c "bash -i /root/notebook/autorun.sh;/bin/bash" #-c 参数就是容器启动时要执行的命令。后面 /bin/bash的作用就是让容器一直保持运行状态 #bash -i的命令是以交互式指令执行,我们这里不加-i的话就无法使conda生效 #bash后面跟的是容器内的自启动脚本,自己提前在容器里面写好久可以了
[/highlight]
当然还有一种方法:通过DockerFile重新构建镜像,指定启动运行的服务
我们需要自己新建一个dockerfile,然后写下面的命令
[highlight lanaguage=”bash”]
FROM centos MAINTAINER Johnnian<johnnian@126.com> RUN <填写构建Docker时需要运行的命令> ENV MYENV /XX/XX CMD <容器每次启动时运行的命令, 只能有一个CMD>
[/highlight]
自己打包镜像的时候输入下面的命令
[block]
docker build -t 镜像名:标签 <Dockerfile所在的目录>
[/block]