docker 容器内部服务自启动

要让docker容器内的服务能在开机加电后自动启动,要解决三个问题:

1.docker服务能随OS启动而启动

2.docker容器能随docker服务启动而启动

3.docker容器内的服务能随docker容器启动而启动

执行带 --restart=always参数和初始化脚本路径的docker run命令创建运行容器,例如:

docker run -it -p 80:80 --restart=always --name nginx1 -d nginx:1.0 /home/linuxbrew/start.sh
对于第3步,一个新创建的容器里肯定是没有这种初始执行的脚本的例如:/home/linuxbrew/start.sh
一般是需要在容器内部编辑好一个这样的启动脚本,然后使用docker commit 将容器制作成为镜像。
然后使用带有--restart=always参数和初始化脚本路径参数的命令,将这个镜像运行为一个新的容器,
容器启动后立即执行这个指定的初始化执行脚本。
这个初始执行脚本的写法也有需要注意的地方,不是随便写个里面执行启动你需要的服务的shell脚本就行,至少需要做三件事:
1.设置服务所需要的环境变量
2.以后台方式启动服务
3.执行bash
三者缺一不可

没有第一项你的服务启动不了或者启动后不能正常运行(例如,不设置中文字符集可能你的服务遇到中文就傻了或者直接因解析错误而崩溃),
如果没有第三项,启动docker容器后容器立即退出或者永远处于restarting状态,无法连接上去。

示例:
#!/bin/bash

export LANG=C.UTF-8
export CUDA_HOME=/usr/local/cuda
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
cd /home/model_serving_flask
nohup python -u efficientdet_fire_model_server.py >nohup.fire.log &
/bin/bash

注意:
给脚本执行权限
执行脚本,确定脚本达到预期的效果
docker commit 容器id 新名:tag
docker run

参考文档:https://zhuanlan.zhihu.com/p/383382470

你可能感兴趣的:(docker,容器,运维)