DevOps and Alibaba Cloud Docker (I)

Preface

This article is the first in a series of articles introducing DevOps and Alibaba Cloud Docker. We will cover various scenarios but as we progress keep in mind that there is no silver bullet when it comes to DevOps. You must always select an appropriate solution based on your demands and scenarios as well as your company’s software developing strength and company scale.

What is DevOps

According to Wikipedia, DevOps (a clipped compound of development and operations) is a culture, movement or practice that emphasizes the collaboration and communication of both software developers (Dev) and other information-technology operation professionals (Ops) while automating the process of software delivery and infrastructure changes. DevOps aims at establishing a culture and environment where building, testing, and releasing software can happen rapidly, frequently, and more reliably.

When I first came across DevOps, I asked ten people the same question above and got ten different answers. At the very beginning, I was confused why each DevOps expert has his/her own answers. But after learning more about their own working environments and businesses, I began to develop my own understanding regarding the complexities. Different IT environments, development tools, deployment environments, personnel abilities and objectives all lead to different DevOps methods.

So what's my definition for DevOps?
Strictly speaking, DevOps is more of a culture, and as a means and thought process to addressing lengthy development cycles, limitations to personnel efficiency and varied software capabilities.
DevOps does not have a standard procedure set, because DevOps solutions change with your business scenarios, personnel abilities, complexity of software development and company scale. In the subsequent articles, I will discuss common DevOps practices and solutions for your reference.

Waterfall development model, agile development model and DevOps

At computer courses at university, software engineering teachers will tell you about agile development and waterfall development. After graduation and joining many large companies, students will then start to deal with either the waterfall development model or agile development model in their workspace. The structure of the waterfall development model is roughly as follows:

The core idea is that the software lifecycle is divided into different stages, with each stage to complete different tasks, and in most cases, each stage is completed by different teams.
This development model is more suitable for the development process of traditional large-scale software. Product managers may find it easy to estimate the progress from the beginning of the project. Each stage of the project development is pre-planned, each requirement is confirmed and the project closure is determined before code writing can even determine whether the project's planning is possible. But this ensures that the purpose of the project development is clear.
The shortcomings of the waterfall development model are obvious. Any issues at any stage of the project may affect the entire project.
From the product manager's point of view, waterfall development can improve the overall product planning, but for developers, waterfall development can be a nightmare, especially when developers need to attend to a number of projects.
Agile development is another industry development model. Agile development solves the drawbacks of the waterfall development model to a certain extent, by dividing a large waterfall development process into many small sub-tasks and completing large-scale project development through continuous iterations step-by-step.

As it seems that agile development and waterfall development can solve most operations problems, then what about DevOps? The answer is that from the role of software development to launching a project you require development personnel, Operations & Management personnel and testing personnel.

DevOps serves to solve the close collaboration means between the three roles. So how does it solve the collaboration issue? There are two key parts: holistic view and automation.
By 'holistic view', we mean you have to view the software delivery as a 'whole' or 'big picture' and enhance cooperation between various roles before the delivery.
To be specific, it means software developers, O&M personnel and testers of the project needing to understand the steps and procedures throughout the delivery process. To explain using a more practical example, during the development of a server-side program, developers need to know how to write a test case, the final deployment environment, the rollback scheme and so on.
Testers need to know the test methods and cases for the current software architecture for better testing performance and rapid development of automated testing, and O&M personnel need to be able to provide better O&M tools and O&M systems to facilitate developers to iterate, deploy, and monitor the lifecycle of the entire project.
While humans are creative beings, we are also the root cause of most problems. We should therefore try to use automated scripts or automated tools such as Puppet, Chef and Ansible as much as possible to replace the original manual or semi-manual operations.
Container + DevOps = ContainerOps
Now that we have a foundation understanding of what DevOps is, the next article will look at what issues ContainerOps manages compared with traditional DevOps. Questions to think about are:

1. In ContainerOps scenarios, is the container actually serving as the environment or as the basic unit of continuous integration?
2. For automated deployment tools such as Ansible, what should you do if they are switched to ContainerOps, and what is the alternative solution?
3. How to implement traditional monitoring and logging methods after they are containerized?
4. How to combine the existing continuous integration tools with the container?
5. How to containerize an existing application and use the ContainerOps?
6. How to implement complicated deployment scenarios and procedures in the containerized scenario?

And so on. These questions will be successively answered in the subsequent articles. In the next article, we will first discuss how to implement a simple ContainerOps practice using the container hub and Alibaba Cloud Docker.