这篇文章内容有点儿长 … 知识要点以下:下 ↓ ↓ ↓

  ~ 初见 Docker 

  ~ Docker 指令

  ~ Docker 器皿的数据信息卷

  ~ Docker 运用布署

  ~ DockerFile

  ~ Docker 服务编排

  ~ Docker 独享库房

  ~ Docker有关定义

 


 

原始 Docker:↓ ↓ ↓

大家写的编码会触碰到很多自然环境:开发工具、接口测试及其工作环境:

Docker:从0到1学习Docker(笔记)插图

Docker 定义::↓ ↓ ↓

· Docker 是一个开源系统的运用器皿模块

· 问世于2013年初,根据Go语言完成,dotCloud 出品(后更名为 Docker Inc)

· Docker 能够 让开发人员装包她们的运用及其依赖包到一个轻量、生命期的器皿中,随后公布到一切时兴的 Linux 设备上。

· 荣进行彻底应用沙箱机制,相互之间防护

· 器皿特性花销极低

· Docker 从 17.03 版本号后分成 CE (Community Edition:小区版)和 EE (Enterprise Edition:商业版)

总而言之:docker是一种容器技术,处理手机软件跨自然环境转移难题

安裝 Docker:↓ ↓ ↓

Docker 能够 运作在 MacWindowsCentOSUbuntu电脑操作系统上,此次演试根据 CentOS 7 安裝

Docker 官方网站:https://www.docker.com

安裝流程以下:

1、yum 包升级到全新
yum update

2、安裝必须的程序包,yum-utils 给予 yum-comfig-Manager作用,此外2个是devicemapper推动依靠的。
yum install -y yum-utils device-mapper-persistent-data lvm2

3、设定yum 源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4、安裝docker,发生键入的页面都按 y
yum install -y docker-ce

5、查询docker版本号,认证是不是验证通过
docker -v

Docker 构架:↓ ↓ ↓

Docker:从0到1学习Docker(笔记)插图1

配备 Docker 镜像系统网络加速器:↓ ↓ ↓

默认设置 状况下,未来从docker hub (https://hub.docker.com/)上免费下载docker镜像系统,很慢。一般都是会配备镜像系统加速器:

~ USTC:中科大镜像网络加速器(https://docker.mirrors.ustc.edu.cn)

~ 阿里服务器
~ 网易云音乐

~ 腾讯云服务

此次选用 阿里云服务器 镜像系统网络加速器… 必须登陆自身的阿里云账号 开展获得网络加速器详细地址,由于每一个人的详细地址都不一样。

Docker:从0到1学习Docker(笔记)插图2

Docker 服务项目基本有关指令:↓ ↓ ↓

1、运行 docker 服务项目
Systemctl start docker

2、查询情况
systemctl status docker

3、终止 docker 服务项目
systemctl stop docker

4、重新启动 docker 服务项目
systemctl restart docker

5、开机运行 docker 服务项目
systemctl enable docker

Docker 镜像系统基本有关指令:↓ ↓ ↓

1、查询镜像系统目录
docker images

2、镜像系统检索
docker search redis

3、免费下载镜像系统
docker pull redis:3.2 //:3.2 指的是版本信息、默认设置 不写版本号为 latest

4、删掉镜像系统
docker rmi 镜像系统ID

5、查看全部镜像系统ID
docker images -q

6、删掉全部镜像系统
docker rmi `docker images -q`

Docker 器皿基本有关指令:↓ ↓ ↓

1、查询运作器皿
docker ps
查看器皿(运作与沒有运作的)
docker ps -a
2、建立器皿
docker run -it --name=c1 centos:7 /bin/bach
# -i : 表明(沒有手机客户端联接)一直运作着
# t : 表明给器皿分派一个尾的终端设备
# -id: 表明后台程序
# --name : 给器皿取一个名称
# centos:7 : 依据哪些镜像系统建立器皿
# /bin/bach : 进到器皿后的复位命令
3、进到器皿
docker exec -it 器皿名字 /bin/bash
4、运行器皿
  docker start 器皿名字
5、终止器皿
docker stop 器皿名字
6、删掉器皿
docker rm 器皿名字|器皿ID
docker rm `docker ps -aq`
7、查询器皿信息内容
docker inspect 器皿名字

Docker 器皿的数据信息卷:↓ ↓ ↓

数据信息卷定义及功效:

思索:

~ Docker 器皿删掉后,在器皿中造成的数据信息还在哪儿?(毫无疑问没有了)

~ Docker 器皿和外界设备能够 立即交换文件吗?(外界服务器与宿主机能够 通讯;与器皿没法通讯)

Docker:从0到1学习Docker(笔记)插图3

~ 器皿中间要想开展数据信息互动?

数据信息卷:

~ 数据信息卷是宿主机中的一个文件目录或文档

~ 当器皿文件目录和数据信息卷文件目录关联后,另一方的改动会马上同歩

~ 一个数据信息卷能够 被好几个器皿与此同时初始化

Docker:从0到1学习Docker(笔记)插图4Docker:从0到1学习Docker(笔记)插图5

拥有数据信息卷以后就可以处理上面三个难题了。

数据信息卷功效:

~ 器皿数据信息分布式

~ 外界设备和器皿间接性通讯

~ 器皿中间数据传输

配备数据信息卷:

1、建立运行器皿时,应用 -v 主要参数 设定数据信息卷
docker run ... -v 宿主机文件目录(文档):器皿内文件目录(文档)...

  docker run -id –name=c1 -v /opt/docker/data:/opt/docker/data_c1 centos:7 /bin/bash

 常见问题

~ 文件目录务必是相对路径

~ 假如文件目录不会有,则会全自动建立

~ 能够 初始化好几个数据信息卷

Docker 数据信息卷器皿:↓ ↓ ↓

问题分析:多器皿开展数据信息互动:(二种方法)

  ~ 好几个器皿初始化同一个数据信息卷

     ~ 数据信息卷器皿

添加:c3 器皿卷挂了以后 还能够根据数据信息卷再次通信

Docker:从0到1学习Docker(笔记)插图6

1、建立运行C3数据信息卷器皿,应用 -v 主要参数 设定数据信息卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
-v /volume:器皿文件目录  灶具左侧的不写会默认设置 分派一个 

建立进行之后在宿主机上全自动分派一个数据信息卷文件目录。

2、建立运行 c1 c2 器皿,应用 --volumes-from 主要参数 设定数据信息卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash

在c3开展实际操作 c1 、c2 也会作出相对应的实际操作。

Docker 运用布署:↓ ↓ ↓

~ MySQL 布署

要求以下:

  在docker器皿中布署MySQL,并根据外界MySQL手机客户端实际操作MySQL server

流程以下:

  1、检索MySQL镜像系统

  2、获取MySQL镜像系统

  3、建立器皿

  4、实际操作內容中的MySQL

需求分析报告:

  如今大家将完成,应用手机客户端联接器皿中的MySQL,上面早已说过 器皿与外部不是通信的,那应该怎么办?

~ 器皿内的互联网服务和外界设备不可以立即通讯

Docker:从0到1学习Docker(笔记)插图7

可是外界设备能够 浏览宿主机、并且大家的宿主机和器皿是能够 通信的。

Docker:从0到1学习Docker(笔记)插图8

那麼大家就可以把宿主机的端口号 与 器皿内服务项目端口号 开展一个投射关联。

Docker:从0到1学习Docker(笔记)插图9

外界设备浏览宿主机的该端口号,进而间接性浏览器皿的服务项目。

逐渐布署:↓

1、检索MySQL镜像系统
docker search mysql
2、获取MySQL镜像系统
docker pull mysql:5.6
3、建立器皿,设定端口映射,文件目录投射
# 在 /opt文件目录下建立mysql文件目录用以储存MySQL数据信息
  mkdir /opt/mysql_1
cd /opt/mysql_1
-----------------------------------------------------------
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6

主要参数表明:

$pwd 表明当今所属文件目录

-p:3307:3306                             将器皿的3306端口映射到宿主机的3307端口号

-v $PWD/conf:/etc/mysql/conf.d  将服务器文件列表下的 conf/my.cnf 初始化到器皿的 /etc/mysql/my.cnf 配备文件目录

-v $PWD/logs:logs                       将服务器文件列表下的logs 文件目录初始化到器皿的/logs 日志文件目录

-v $PWD/data:var/lib/mysql          将服务器文件列表下的data文件目录初始化到器皿的 /var/lib/mysql 。数据信息文件目录

-e MYSQL_ROOT_PASSWORD=123456   复位 root 客户的登陆密码。

转换到器皿中:实行 mysql -uroot -p123456  能联接得话表明就成功了。

~ Tomcat 布署

前序流程和以上一样

1、建立器皿,设定端口映射、文件目录投射
#在 /opt 文件目录下建立tomcat文件目录用以储存tomcat数据信息
mkdir /opt/tomcat
cd /opt/tomcat

建立tomcat器皿
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD/Webapps/:/usr/local/tomcat/webapps/ \
tomcat

mkdir /opt/tomcat/webapps/ROOT
vim index.html

#怎么会建立ROOT那 由于Tomcat特点默认设置 回来浏览 ROOT 下的資源

默认设置 自动启动

主要参数表明:

-p : 8080:8080  将器皿的8080端口投射到服务器的8080端口

-v $pwd/webapps:/user/local/tomcat/webapps   将服务器中文件列表初始化到器皿的 webapps

碰到的难题(换一个头脑):传送器 → → 

1、docker运作Tomcat后浏览主页报404 (永久性处理方法)

Nginx 布署:

# 在 /opt 文件目录下建立nginx文件目录用以储存nginx数据信息
mkdir /opt/nginx
cd /opt/nginx
mkdir conf
cd conf
#在/opt/nginx/conf/ 下建立nginx.conf 文档,黏贴下边內容
#user  nobody;
Worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-Stream;

    #log_fORMat  main  '$Remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            alias   /usr/shAre/nginx/html/;
            autoindex on;                 # 开启文件目录访问作用
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # Proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_Session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

 

docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs/:/var/log/nginx/ \
-v $PWD/html/:/usr/share/nginx/html/ \
nginx

系列检测

~ Redis 布署:与以上实际操作一个大道理

1、建立器皿,设定端口映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0

2、应用外界设备联接redis
./redis-cli.exe -h ip -p 6379

DockerFile 镜像原理:↓ ↓ ↓

知识要点:

  ~ Docker 镜像原理

  ~ DockerFile 定义及功效

  ~ DockerFile 关键词

  ~ 实例

思索:来源于灵魂三问 …

  ~ Docker 镜像系统实质是啥?

    解: 是一个分层次系统文件

  ~ Docker 中一个 centos 镜像系统为何仅有200M,而一个centos 电脑操作系统的 iso 文档要好多个G?

              解:centos 的 iso 系统镜像包括 Bootfs 和 rootfs ,而docker的centos镜像系统重复使用电脑操作系统的bootfs,仅有rootfs和其他镜像系统层

  ~ Docker 中一个 tomcat 镜像系统为什么有 500M,而一个 tomcat 安装文件仅有 70多 MB ?

    解:因为docker中镜像系统是分层次的,tomcat 尽管仅有 70多M,但他必须取决于镜像系统和基本镜像系统,

                      因此 全部对外开放曝露的tomcat镜像系统尺寸500多M。

镜像原理:↓

电脑操作系统的构成部分:

· 进程调度分系统

· 过程通信分系统

· 运行内存管理系统

· 机器设备管理系统

· 通信网络分系统

· 作业控制分系统

· 文档机器设备分系统  ↓

Linux 系统文件由 bootfs 和 rootfs 两一部分构成:

Docker:从0到1学习Docker(笔记)插图10

· bootfs :包括 bootloader (正确引导载入程序流程) 和 kernel (核心)

· rootfs:root 系统文件,包括的便是典型性的 Linux 系统软件的 /dev ,/proc ,/bin ,/etc 等规范文件目录和文档。

1):DockerFile 镜像原理:↓ ↓ ↓

~ Docker 镜像系统是由独特的系统文件累加而成。

~ 最少端是bootfs,并应用宿主机的 bootfs

~ 第二层是 rootfs 系统文件 rootfs,称之为base image

~ 随后直往上能够 累加别的的系统镜像

~ 统一系统文件(Union File System)技术性可以将不一样的层融合成一个系统文件,为这种层给予一个统一的角度

   那样就掩藏了双层的存有,在客户的视角来看,只存有一个系统文件。

~ 一个镜像系统能够 放到另一个镜像系统上边。位于下面的镜像系统称之为父镜像系统,最底端的镜像系统变成基本镜像系统。

 

Docker:从0到1学习Docker(笔记)插图11

 

Docker 镜像系统不可以改动,改动了他人就不能用了 …

~ 当从一个镜像系统运行器皿时,Docker 会在最高层载入一个读写能力系统文件做为器皿。

Docker:从0到1学习Docker(笔记)插图12

较大功效便是 重复使用 。

2):DockerFile 镜像系统制做:↓ ↓ ↓

~ Docker 镜像系统怎么制作?

1、器皿变为镜像系统

docker commit 器皿ID 镜像系统名字:版本信息

 Docker:从0到1学习Docker(笔记)插图13

镜像系统不可以立即传送:能够 将系统镜像转化成文档开展传送。

docker save -o 压缩包名字 镜像系统名字:版本信息

Docker:从0到1学习Docker(笔记)插图14

 

 复原镜像系统

docker load -i 压缩包名字

2、dockerfile 定义

~ Dockerfile  是一个文本文档

~ 包括了一条条命令

~ 每一条命令搭建一层,根据基本镜像系统,最后搭建出一个新的镜像系统

~ 针对开发者:能够 为开发设计精英团队给予一个完全一致的开发工具

~ 针对测试工程师:能够 立即拿着开发设计时需搭建的镜像系统或是根据Dockerfile 文档

   搭建一个新的镜像系统开始工作了。

~ 针对运维管理工作人员,在布署时,能够 完成运用的无缝拼接移殖

Dochub网址:https://hub.docker.com

 举例说明:contos

FROM scratch                 # centos 根据一个空镜像系统
ADD centos-7-x86_64-docker.tar.xz /   # 把centos 相匹配的压缩包 加上到当今的网站根目录

LABEL \                                      # 申明一些标识信息内容(可忽视掉)
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00 00:00"

CMD ["/bin/bash"]                      # 运行器皿实行的命令

Docker:从0到1学习Docker(笔记)插图15

Docker:从0到1学习Docker(笔记)插图16

3):DockerFile 实例:↓ ↓ ↓

~ 界定 dockerfile,公布Springboot 新项目

完成流程:↓

1、定义父镜像系统:FROM Java:8
2、界定创作者信息内容:MAINTAINR itheima<ixxx#xx.cn>
3、将jar包加上到器皿:ADD SpringBoot.jar  app.jar
4、界定器皿运行实行的指令:CMD java -jar app.jar
5、根据dockerfile搭建镜像系统:docker bulid -f dockerfile 文件路径 -t镜像系统名字:版本号

界定 dockerfile 文档:

FROM  java:8
MAINTAINER itheima <mlq@cc.cn>
ADD docker-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar

Docker:从0到1学习Docker(笔记)插图17 

Docker:从0到1学习Docker(笔记)插图18

Docker:从0到1学习Docker(笔记)插图19

 

Docker:从0到1学习Docker(笔记)插图20

DockerFile 实例自定:↓ ↓ ↓

实例要求:

~ 自定centos7镜像系统;

  · 默认设置 登陆途径为  /usr

  · 能够 应用 vim

~ 完成流程;

  · 定义父镜像系统:FROM centos:7

  · 界定创作者信息内容:MAINTAINER itheima <itheima@itcast.cn>

  · 实行安裝 win 指令:RUN yum install -y vim

  · 界定默认设置 的工作中文件目录:WORKDIR/usr

    · 界定器皿运行实行的指令:CMD/bin/bash

dockerfile:↓

FROM centos:7
MAINTAINER itheima <cc@.cn>
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash

Docker 服务编排:↓ ↓ ↓

~ 服务编排定义:

  分布式架构的软件系统中一般包括多个微服务架构,每一个微服务架构一般都是会布署好几个案例,假如每一个微服务架构都需要手动式起停,维护保养的劳动量会非常大。

  要从Dockerfile build image 或是去 dockerhub 获取 image

  要建立好几个 container

  要管理方法这种 container (运行终止删掉)

  服务编排:依照一定的业务流程标准大批量管理方法器皿

~ Docker Compose 简述:

  Docker Compose 是一个编辑多器皿分布式部署专用工具,给予命令集管理方法容器化运用的详细开发进度,包括服务项目搭建,运行和终止。

  应用流程:↓

  1、运用 Dockerfile 界定软件环境镜像系统

  2、应用 docker-compose.yml 界定构成运用的各服务项目

  3、运作 docker-compose up 运行运用

  Docker:从0到1学习Docker(笔记)插图21

~ 安裝 Compose:

# Compose 现阶段早已彻底适用 Linux 、 Mac OS 和 Windows,在大家安裝Compose以前,必须先安裝Docker。
# 下边大家以编译程序好的二进制包方法安裝在Linux系统软件中。

curl -L https://Github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 设定文档可实行管理权限
chmod x /usr/local/bin/docker-compose

# 查询版本信息
docker-compose -version

#卸载掉Docker Compose
# 二进制包方法安裝的,删掉二进制文件就可以
rm /usr/local/bin/docker-compose

# 应用Docker Compose 编辑 nginx SpringBoot新项目

1、建立 docker-compose 文件目录
   mkdir /opt/docker/docker-compose
   cd /opt/docker/docker-compose

2、撰写 docker-compose.yml 文档
version:'3'
services:
nginx:
image: nginx
ports:
- 80:80
links:
- app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"

3、建立 ./nginx/conf.d 文件目录
mkdir -p ./nginx/conf.d
4、在 ./nginx/conf.d 文件目录下 撰写 itheima.conf 文档

server{
   listen 80;
   access_log off;
   location / {
      proxy_pass http://app:8080; 
   }
}
5、在 /docker-compose 文件目录下 应用 docker-compose 运行器皿
docker-compose up

6、检测浏览
http://192.168.211.102/api/docker

Docker 独享库房:↓ ↓ ↓

  docker 官方网的 Docker hub (https://hub.docker.com) 是一个用以管理方法公共性镜像系统的库房,我们可以从上边获取镜像系统到当地,还可以把我们自己的镜像系统消息推送上来。

可是,有时大家的网络服务器无法打开互联网技术,或是你没期待将自身的镜像系统放进外网地址之中,那大家就必须构建自身的独享库房来存储和控制自己的镜像系统。

# 独享库房构建

# 1、获取独享库房镜像系统
docker pull registry

# 2、运行独享库房器皿
docker run -id --name=registry -p 5000:5000 registry

# 3、浏览器打开 键入详细地址 http://独享库房服务器ip:5000/v2/_catalog,见到{"repositories":[]}表明独享库房 构建取得成功

# 4、改动 daemon.json
vim /etc/docker/daemon.json

# 在以上文档中加上一个key ,储存撤出。此步用以让 docker 信赖独享库房详细地址;留意将独享库房服务器ip改动给自己独享网络服务器真正详细地址ip
{"insecure-registries":["独享库房服务器ip:5000"]}

# 5、重新启动 docker 服务项目
systemctl restart docker
docker start registry

# 将镜像系统提交至独享库房

#1、标识镜像系统为独享库房的镜像系统
docker tag centos:7 独享库房服务器ip:5000/centos:7

#2、提交标识镜像系统
docker push 独享库房网络服务器IP:5000/centos:7
# 从独享库房获取镜像系统

docker pull 192.168.211.102/cc_centos:1

Docker 有关定义:↓ ↓ ↓

器皿便是将软件打包成规范化模块,以用以开发设计,交货和布署。

  · 器皿镜像系统是轻量的、可实行的单独程序包,包括手机软件运作所必须的的全部內容:编码、运作时自然环境、系统软件、系统库和设定。

  · 容器化手机软件在一切自然环境上都可以始终如一地运作。

  · 器皿授予了手机软件自觉性,使其免遭外在自然环境差别的危害,进而有利于降低精英团队间在同样基础设施建设上运作不一样手机软件的矛盾。

Docker:从0到1学习Docker(笔记)插图22

 

~ docker 器皿虚拟化技术 与 传统式vm虚拟机较为:

同样:

  器皿和vm虚拟机具备类似的資源防护和分派优点

不一样:

  器皿虚拟化技术的是电脑操作系统,vm虚拟机虚拟化技术的是硬件配置。

  传统式vm虚拟机能够 运作不一样的电脑操作系统,器皿只有运作同一种类电脑操作系统。

Docker:从0到1学习Docker(笔记)插图23

 

Docker:从0到1学习Docker(笔记)插图24Docker:从0到1学习Docker(笔记)插图25

 

 

 

Face your past without regret. Handle your present with confidence.Prepare for future without fear. keep the faith and drop the fear.

应对以往义无反顾,珍惜当下满怀信心,迎战将来义无反顾。维持信心,战胜恐惧!一点一滴的累积,一点一滴的沉积,学习技术必须持续的积累!