Hey, guys, welcome to Alibaba Cloud Coursera courses. Today's topic is about something new technology now, actually which is very popular in the recent years whose name is Docker container. Today is the first class and we will have some basic concepts for Docker container, and maybe previously you don't have any understanding for Docker container, and after this, you will at least become a beginner on the Docker container technology. Let's get started. For this topic, we will have three sections. Firstly, we will have a brief introduction about what is Docker container, you will know some basic definition of Docker container. Let's move on. Let's see the definition of Docker container. Docker is a tool designed to make it easier to create, deploy, and run applications by using containers. Here is something you need to pay attention. At many time, people always say a Docker container, it seems like Docker is equal to container. But actually it is not. The fact is, container is a common use the technology on a Linux operating system and Docker is a tool which can take advantage of container technology. This is one point we need to know. But generally, most of the people are using Docker container instead of other container services. Generally, we call Docker as the name of container technology at most of the time. Next, let's see what is container used for. Containers allow the developer to package up application with all the parts it needs such as libraries and other dependencies, and ship it all out as one package. From this sentence, we can know that basically container is designed to deliver application and make it easier. Later we will know what I will declared this point, you will know why. On the right side of this slide, you can see some other introductions of Docker containers. Here, there are one point that maybe we should pay more attention, is that, basically Docker container is a kind of virtualization technology. But actually, there are something different from the traditional virtualization that we use to know. What's the difference? Then let's move on. From here we can see the comparison between the Docker container and the virtual machine. In some way, maybe Docker is a little bit like the virtual machine, but unlike a virtual machine, rather than creating the whole virtual operating system, Docker allow applications to use same Linux kernel as the host system that you are running and only require the applications be shipped with the dependent stuffs like the library files and some calculations files which are not already running on the host computers. Means that it will only share the Linux kernel always the host operating system, but on its own libraries, some dependent files. In this way, Docker container will actually run in a more lightweight compared with the traditional virtual machine. This literally gives a significant performance boost and reduces the size of the application. With the lightweight features mentioned just now, we can take advantage of Docker container in some scenarios and benefit from it. Firstly by using Docker container, it will be easier to deploy the applications. In the traditional way the application and the runtime environment is separated. Every time if you want to finish a deployment, you need to do their own time environment deployment first, also some dependencies, and rather than you can do the application deployment. But in Docker container style, some container has included all the stuffs about the application. It make the deployment very easy and also impossible to automate it. Secondly, with Docker container, we can easily boot up a PAAS service library. In the traditional way, if we want to test the environment and we want to deploy some middleware or database, we need to manually install the software package, and then create the instance. But now with Docker container, we can just put the PAAS service in the Docker container and then when we need a database service for our testing and just the several seconds, you can get the vertebral database service without any manual configuration or installation. This is very convenient. Thirdly, note this, CI/CD which means continuous integration and a continuous delivery, are quite widely used in the software we're developing. With Docker container since every step in the software building, testing, or development is automated, we can make the CI/CD procedure more easy to achieve. Lastly, in the distributed application scenario, scaling and scaling out is quite commonly used. With the lightweight feature of the Docker container, we can make the scaling and scaling out activity very quickly and then the capacity and the performance of the distributed cluster, we are scaling in a very short time. This is the big advantage that you can get from the Docker container technology. After we've known the basic definition and the advantage of Docker container, let's come to the next section about the architecture of Docker. Then let's move on. The first part of Docker that we need to know is that the Docker Engine. Actually, if you are installing the Docker software on some Linux Operating System, in fact what you are installing is Docker Engine. You need to know is that Docker Engine is the client and a server application with the following major components. The first and the most important one is Docker daemon, which is a long-running server process on the operating system to process the Docker back end tasks. Actually, all the major tasks of the Docker container software is done by the Docker daemon Cloud, likely running the Docker container. The second is a REST API. It specifies our interfaces that's the outside programs can use to talk to the Docker daemon and instruct it wanted to do. Basically, the outside application we are not talked to the Docker daemon directly, but talk to the REST for API. The REST API will handle all the requests. Then the last one is the command line client which is a common to software tool, provide all kinds of commands and then the user can use the commands to do the operations of the Docker daemon out. We can also use the command line to connect to the Docker daemon with all the related contents. Later on, we will have detailed introduction about all the continents and then let's move on. We can see this diagram shows the overall architecture of Docker app. Just the as shown previously, Docker use a client and server architecture and the Docker client talks to the Docker daemon which does the heavy lifting and building around and distributing your Docker containers. The Docker client and daemon can run on the same system or you can just connect Docker client to the remote Docker daemon app. The Docker client and the daemon communicate using the REST API over the Unix sockets or the network interface, verbose way is support it. After we have known the overall architecture of Docker for the last section, let's have understanding about the key component of the Docker container. There are three most important members that constructed the whole Docker container ecosystem, which are Docker container, and the Docker repository, and Docker image. Let's go through them one by one. The first one is Docker image. Basically image is a read only template with the instructions for creating a Docker container. Often, image is based on another image with some additional customization. For example, you may build image which is based on the Ubuntu image, but installs the Apache Web server, and your application as well as the configuration details need to make your application wrong. The next accompaniment of the Docker is Docker container. A container actually is a runnable instance of image. Actually, for the Container image has a very close relationship. You can create, start, stop, move, or delete a container, use the Docker API or CI. You can connect to the Docker to one or more that works attached storage to it or even create a new image based on its current state. By default a container is relatively well isolated from other containers and it's host machine. You can control how isolated container's network and storage, or other underlaying subsystems are from other containers or from the host machine. A container is defined by its image as well as some configuration options you provide prior to it when you create or start it. When the container is removed, any changes to its state that are not stored in persistent storage disappear. This is the mechanism of the container. Finally, the last components of the Docker is Docker repository. Docker repositories lets you share images with coworkers, customers, or the Docker Community. Docker Hub is the biggest public Docker registry in the world which contains a very big amount and all kinds of Docker images. You can also build your own private Docker registry as you will. If you are building your image internally, either on your own Docker daemon or using your own Continuous Integration Services, you can push them to the Docker repository. Or alternatively for the public Docker Hub service, if the source code for your Docker image is on GitHub or Bitbucket, you can use the automated build repository which is build by the Docker Hub Services. This is the feature that is provided by the Docker Hub.