1 使用docker镜像创建容器时同时启动服务
1.1 创建服务应用程序启动脚本
首先我们需要创建一个shell脚本用于启动我们的服务应用程序。
在某个目录下创建一个名为start_server.sh
的脚本,并在脚本内写服务启动命令,假设服务可执行程序为my_websocket_server
,则依次执行以下命令,
创建start_server.sh
# 创建文件
nano start_server.sh
在start_server.sh
写入启动服务命令
#!/bin/bash
/xxx/xxx/my_websocket_server -c /xxx/xxx/server.conf
exit 0
修改start_server.sh
权限,修改为可执行
chmod 777 ./start_server.sh
1.2 使用docker镜像创建容器时同时启动服务
在使用docker镜像创建容器时同时启动服务有两种方式,
- 一种是在使用docker run时后面直接执行1.1节中的服务脚本
- 另一种是将服务脚本加入到docker的开机启动中,在docker内部的系统启动时执行服务脚本
1.2.1 docker run执行服务脚本
假设docker镜像名为ubuntu:v3
,服务启动脚本在docker内部的路径为/usr/bin/start_server.sh
,则可以使用以下命令在启动容器时同时执行服务启动脚本
docker run -itd ubuntu:v3 -p 8080:8080 /usr/bin/start_server.sh
1.2.2 docker内部系统启动时执行服务脚本
使用docker镜像创建一个容器,其实就是一个开机的过程,所以要在docker镜像创建容器时同时启动服务其实就是将服务加入到开启启动中,在进行完这些操作之后,将当前容器再commit
为一个新的docker镜像保存,下一次在使用docker run
时docker内部就会自动执行服务脚本启动服务了。
Linux系统在启动时会加载以下配置文件:
- /etc/profile
- /root/.bash_profile
- /etc/bashrc
- /root/.bashrc
- /etc/profile.d/*.sh
- /etc/profile.d/lang.sh
- /etc/sysconfig/i18n
- /etc/rc.local(/etc/rc.d/rc.local)
所以在linux系统启动时运行一个shell脚本有很多种方法,比如
- 修改开机启动文件/etc/rc.d/rc.local文件,使用bash xxx.sh执行服务脚本
- 自定义服务文件,添加到系统服务,并通过Systemctl设置服务开机自启动
- 将写好的shell脚本放到目录 /etc/profile.d/下,系统启动后会自动执行该目录下的所有shell脚本
- 将写好的shell脚本放到目录/etc/init.d/或者/etc/rc.d/init.d/下,然后使用chkconfig命令设置
我们已经在1.1节中写好了服务的shell脚本,所以将该脚本直接复制或者移动到/etc/profile.d/目录下是最简单的添加服务开机启动的方式。
在/etc/rc.local或者/etc/rc.d/rc.local增加服务脚本执行命令
打开/etc/rc.local或者/etc/rc.d/rc.local,然后在exit前加入服务启动脚本代码
nano /etc/rc.d/rc.local
# 增加shell脚本执行代码
bash /xxx/xxx/start_server.sh
保存退出即可。
参考
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Docker – docker内服务自启动,使用镜像创建容器时同时启动服务
原文链接:https://www.stubbornhuang.com/2800/
发布于:2023年09月11日 14:38:52
修改于:2023年09月11日 14:38:52
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52