当前位置: 首页 > news >正文

在 linux 中实现开机自动启动 Docker 并自动运行特定镜像的容器

在 CentOS 7 中实现开机自动启动 Docker 并自动运行特定镜像的容器,有以下两种推荐方法:

方法 1:使用 Docker 的 --restart 策略(简单高效,推荐)

这是最简洁直接的方案,利用 Docker 内置的重启策略来实现:

  1. 确保 Docker 开机启动​:

    sudo systemctl enable docker
  2. 启动容器时添加重启策略​:

    docker run -d \--name my-container \--restart=unless-stopped \  # 关键参数!nginx:latest
  3. (可选)如果容器已存在,更新配置:

    docker update --restart=unless-stopped my-container
重启策略行为
unless-stopped除非手动停止,否则系统重启后自动运行(推荐)
always总是重启(即使手动停止后也会自动重启)
on-failure仅当容器非正常退出时重启

方法 2:使用 Systemd 服务(更精细控制)

当需要更复杂的启动顺序或参数时使用:

  1. 创建服务文件​:

    sudo vi /etc/systemd/system/docker-myapp.service
  2. 添加以下内容​(替换为你的镜像和参数):

    [Unit]
    Description=My Docker Container Service
    After=docker.service  # 确保在 Docker 启动后运行
    Requires=docker.service[Service]
    Type=simple
    # 确保先移除旧容器(清理)
    ExecStartPre=-/usr/bin/docker rm -f my-container
    # 启动新容器
    ExecStart=/usr/bin/docker run \--name my-container \-p 80:80 \nginx:latest
    # 停止命令
    ExecStop=/usr/bin/docker stop my-container
    # 清理命令
    ExecStopPost=/usr/bin/docker rm my-container
    TimeoutStartSec=90
    Restart=on-failure[Install]
    WantedBy=multi-user.target
  3. 启用服务​:

    sudo systemctl daemon-reload
    sudo systemctl enable docker-myapp.service
    sudo systemctl start docker-myapp.service

🔍 常见镜像启动示例

1. 启动 MySQL 容器
docker run -d \--name mysql-db \--restart=unless-stopped \-e MYSQL_ROOT_PASSWORD=123456 \-p 3306:3306 \-v /data/mysql:/var/lib/mysql \mysql:8.0
2. 启动 Nginx 容器
docker run -d \--name web-server \--restart=unless-stopped \-p 80:80 \-p 443:443 \-v /path/to/html:/usr/share/nginx/html \-v /path/to/nginx.conf:/etc/nginx/nginx.conf \nginx:alpine
3. 启动自定义应用
docker run -d \--name my-app \--restart=unless-stopped \-p 8080:3000 \-e ENV=production \my-registry.com/my-custom-image:v1.2

⚠️ 重要注意事项

  1. 安全加固​:

    # 限制容器权限
    --security-opt="no-new-privileges" \
    --read-only \
    --cap-drop=ALL
  2. 资源限制​:

    --cpus="1.0" \
    --memory="512m" \
    --memory-swap="1g"
  3. 日志管理​:

    --log-opt max-size=10m \
    --log-opt max-file=3
  4. 健康检查​:

    docker inspect --format='{{json .State.Health}}' my-container

🧪 验证和调试

  1. 检查服务状态​:

    systemctl status docker-myapp.service
  2. 查看容器日志​:

    docker logs -f my-container
  3. 测试重启​:

    sudo reboot
    # 重启后验证
    docker ps
    curl http://localhost
  4. 诊断启动问题​:

    journalctl -u docker-myapp.service -b -n 100 --no-pager

✅ 最佳实践建议

  1. 使用 Docker Compose(生产推荐)​​:

    version: '3'
    services:web:image: nginx:alpinerestart: unless-stoppedports:- "80:80"db:image: mysql:8.0restart: unless-stoppedenvironment:MYSQL_ROOT_PASSWORD: secret

    然后设置 systemd 启动 compose:

    ExecStart=/usr/local/bin/docker-compose -f /path/to/docker-compose.yml up
  2. 版本控制​:

    • 始终指定容器标签(如 nginx:1.23-alpine 而非 nginx:latest
    • 在 Dockerfile 或 compose 文件中固化版本
  3. 数据持久化​:

    -v mysql_data:/var/lib/mysql  # 使用命名卷

通过以上方法,您可以确保 CentOS 7 启动时自动运行 Docker 并启动指定的容器镜像。对于大多数场景,方法 1 的 --restart=unless-stopped 是最简单可靠的解决方案。

相关文章:

  • Netty实战:从核心组件到多协议实现(超详细注释,udp,tcp,websocket,http完整demo)
  • 开源大型语言模型的文本记忆新突破!
  • 腾讯云轻量级服务器Ubuntu系统与可视化界面
  • 人机融合智能 | 人智交互语境下的设计新模态
  • 【C++详解】STL-vector使用底层剖析和实现
  • 解锁身心密码:从“心”拥抱健康生活
  • MOS管和比较器
  • M1芯片macOS安装Xinference部署大模型
  • Android | 签名安全
  • camel-ai Agent模块- CriticAgent
  • OpenCV——直方图与匹配
  • 【Mini-F5265-OB开发板试用测评】2、PWM驱动遥控车RX2接收解码带马达驱动控制IC
  • 啊啊啊啊啊啊啊啊code
  • 《思维力:高效的系统思维》
  • Linux中的阻塞信号与信号原理
  • ULS23 挑战:用于计算机断层扫描中 3D 通用病变分割的基准模型及基准数据集|文献速递-深度学习医疗AI最新文献
  • 【Redis】Sentinel哨兵
  • 【css】设置了margin-top为负数,div被img覆盖的解决方法
  • 基于springboot的宠物服务预约系统
  • craw14ai 框架的入门讲解和实战指南——基于Python的智能爬虫框架,集成AI(如NLP/OCR)实现自动化数据采集与处理
  • wordpress充值卡/开封网站优化公司
  • 物流网站开发公司/培训心得体会万能模板
  • 王晴儿网站建设/西安网站建设排名
  • wordpress旋转文字/广东seo
  • 搭建网站费用/精准营销系统
  • 广州建外贸网站公司/站长工具查询官网