使用docker-compose进行零停机部署?

时间:2019-12-26 03:26:24

标签: docker docker-compose

我已经使用GtkStackSidebar为自己的小型个人项目提供了一个cd解决方案,但是无论我尝试什么,每次重新部署都将有10秒钟的停机时间。

我的CI服务在某些标签下上传新的docker映像,然后点击一个webhook。 Webhook触发以下脚本:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkApplicationWindow">
    <property name="can_focus">False</property>
    <child>
      <placeholder/>
    </child>
    <child>
      <object class="GtkNotebook">
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <child>
          <placeholder/>
        </child>
        <child type="tab">
          <object class="GtkLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">page 1</property>
          </object>
          <packing>
            <property name="tab_fill">False</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
        <child type="tab">
          <object class="GtkLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">page 2</property>
          </object>
          <packing>
            <property name="position">1</property>
            <property name="tab_fill">False</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
        <child type="tab">
          <object class="GtkLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">page 3</property>
          </object>
          <packing>
            <property name="position">2</property>
            <property name="tab_fill">False</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
  <object class="GtkTextBuffer" id="buffer1">
    <property name="text" translatable="yes">placeholder text</property>
  </object>
  <object class="GtkTextBuffer" id="buffer2">
    <property name="text" translatable="yes">placeholder text</property>
  </object>
  <object class="GtkTextBuffer" id="buffer3">
    <property name="text" translatable="yes">placeholder text</property>
  </object>
  <object class="GtkApplicationWindow">
    <property name="can_focus">False</property>
    <property name="window_position">mouse</property>
    <property name="default_width">440</property>
    <property name="default_height">250</property>
    <child>
      <placeholder/>
    </child>
    <child>
      <object class="GtkBox">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkBox">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="orientation">vertical</property>
            <child>
              <object class="GtkBox">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <child>
                  <object class="GtkLabel">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="margin_left">3</property>
                    <property name="margin_right">3</property>
                    <property name="margin_top">3</property>
                    <property name="margin_bottom">3</property>
                    <property name="label" translatable="yes">TABS_HEADER</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkSeparator">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">1</property>
                  </packing>
                </child>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkSeparator">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkStackSidebar">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="stack">stack1</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">2</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkBox">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="orientation">vertical</property>
            <child>
              <object class="GtkLabel">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="margin_left">3</property>
                <property name="margin_right">3</property>
                <property name="margin_top">3</property>
                <property name="margin_bottom">3</property>
                <property name="label" translatable="yes">PAGE_HEADER</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkSeparator">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkStack" id="stack1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="hexpand">True</property>
                <property name="vexpand">True</property>
                <child>
                  <object class="GtkTextView">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="buffer">buffer3</property>
                  </object>
                  <packing>
                    <property name="name">tab1</property>
                    <property name="title" translatable="yes">tab1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkTextView">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="buffer">buffer1</property>
                  </object>
                  <packing>
                    <property name="name">tab2</property>
                    <property name="title" translatable="yes">tab2</property>
                    <property name="position">1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkTextView">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="buffer">buffer2</property>
                  </object>
                  <packing>
                    <property name="name">tab3</property>
                    <property name="title" translatable="yes">tab3</property>
                    <property name="position">2</property>
                  </packing>
                </child>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">2</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

这是我的docker-compose

docker-compose pull
docker-compose up -d

docker-compose似乎被忽略了,因为我没有处于蜂群模式。我不确定100%是群模式。我开始涉足一些不太舒适的领域,并以为我会寻求一些建议。 要实现零停机时间部署该怎么办?

2 个答案:

答案 0 :(得分:0)

Docker-compose可帮助您使用yaml文件运行一个或多个图像。

Docker swarm或Kubernetes是协调器,它们以易于管理许多容器的方式来组织容器。

我对Kubernetes有更多的经验,有了它,您可以管理这些所谓的副本和部署,还可以在停机时间为0的情况下进行重新部署。 Docker swarm应该能够实现相同的目标。

答案 1 :(得分:0)

您可以使用Docker群在不停机的情况下进行滚动部署。