- ?
Docker 入门教程
骗子
展开
2013年发布至今,Docker一直广受瞩目,被认为可能会改变软件行业。
但是,许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?本文就来详细解释,帮助大家理解它,还带有简单易懂的实例,教你如何将它用于日常开发。
一、环境配置的难题
软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?
用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。
如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发者常常会说:"它在我的机器可以跑了"(It works on my machine),言下之意就是,其他机器很可能跑不了。
环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。
二、虚拟机
虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。
虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点。
(1)资源占用多
虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。
(2)冗余步骤多
虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。
(3)启动慢
启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。
三、Linux 容器
由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
由于容器是进程级别的,相比虚拟机有很多优势。
(1)启动快
容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。
(2)资源占用少
容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。
(3)体积小
容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。
总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。
四、Docker 是什么?
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
五、Docker 的用途
Docker 的主要用途,目前有三大类。
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
六、Docker 的安装
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。下面的介绍都针对社区版。
Docker CE 的安装请参考官方文档。
安装完成后,运行下面的命令,验证是否安装成功。
$ docker version# 或者$ docker info
Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组(官方文档)。
$ sudo usermod-aG docker$USER
Docker 是服务器----客户端架构。命令行运行docker命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动(官方文档)。
# service 命令的用法$ sudo service docker start# systemctl 命令的用法$ sudo systemctl start docker
六、image 文件
Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。
# 列出本机的所有 image 文件。$ docker image ls# 删除 image 文件$ docker image rm[imageName]
image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。
为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库Docker Hub是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。
七、实例:hello world
下面,我们通过最简单的 image 文件"hello world",感受一下 Docker。
首先,运行下面的命令,将 image 文件从仓库抓取到本地。
$ docker image pull library/hello-world
上面代码中,docker image pull是抓取 image 文件的命令。library/hello-world是 image 文件在仓库里面的位置,其中library是 image 文件所在的组,hello-world是 image 文件的名字。
由于 Docker 官方提供的 image 文件,都放在library组里面,所以它的是默认组,可以省略。因此,上面的命令可以写成下面这样。
$ docker image pull hello-world
抓取成功以后,就可以在本机看到这个 image 文件了。
$ docker image ls
现在,运行这个 image 文件。
$ docker container run hello-world
docker container run命令会从 image 文件,生成一个正在运行的容器实例。
注意,docker container run命令具有自动抓取 image 文件的功能。如果发现本地没有指定的 image 文件,就会从仓库自动抓取。因此,前面的docker image pull命令并不是必需的步骤。
如果运行成功,你会在屏幕上读到下面的输出。
$ docker container run hello-worldHello from Docker!This message shows that your installation appears to be working correctly.......
输出这段提示以后,hello world就会停止运行,容器自动终止。
有些容器不会自动终止,因为提供的是服务。比如,安装运行 Ubuntu 的 image,就可以在命令行体验 Ubuntu 系统。
$ docker container run-it ubuntu bash
对于那些不会自动终止的容器,必须使用docker container kill命令手动终止。
$ docker container kill[containID]
八、容器文件
image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。
# 列出本机正在运行的容器$ docker container ls# 列出本机所有容器,包括终止运行的容器$ docker container ls--all
上面命令的输出结果之中,包括容器的 ID。很多地方都需要提供这个 ID,比如上一节终止容器运行的docker container kill命令。
终止运行的容器文件,依然会占据硬盘空间,可以使用docker container rm命令删除。
$ docker container rm[containerID]
运行上面的命令之后,再使用docker container ls --all命令,就会发现被删除的容器文件已经消失了。
九、Dockerfile 文件
学会使用 image 文件以后,接下来的问题就是,如何可以生成 image 文件?如果你要推广自己的软件,势必要自己制作 image 文件。
这就需要用到 Dockerfile 文件。它是一个文本文件,用来配置 image。Docker 根据 该文件生成二进制的 image 文件。
下面通过一个实例,演示如何编写 Dockerfile 文件。
十、实例:制作自己的 Docker 容器
下面我以koa-demos项目为例,介绍怎么写 Dockerfile 文件,实现让用户在 Docker 容器里面运行 Koa 框架。
作为准备工作,请先下载源码。
$ git clone https://github/ruanyf/koa-demos.git$ cd koa-demos
10.1 编写 Dockerfile 文件
首先,在项目的根目录下,新建一个文本文件.dockerignore,写入下面的内容。
.gitnode_modulesnpm-debug.log
上面代码表示,这三个路径要排除,不要打包进入 image 文件。如果你没有路径要排除,这个文件可以不新建。
然后,在项目的根目录下,新建一个文本文件 Dockerfile,写入下面的内容。
FROM node:8.4COPY./appWORKDIR/appRUN npm install--registry=https://registry.npm.taobao.orgEXPOSE3000
上面代码一共五行,含义如下。
FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
WORKDIR /app:指定接下来的工作路径为/app。
RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。
10.2 创建 image 文件
有了 Dockerfile 文件以后,就可以使用docker image build命令创建 image 文件了。
$ docker image build-t koa-demo.# 或者$ docker image build-t koa-demo:0.0.1.
上面代码中,-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。
如果运行成功,就可以看到新生成的 image 文件koa-demo了。
$ docker image ls
10.3 生成容器
docker container run命令会从 image 文件生成容器。
$ docker container run-p8000:3000-it koa-demo/bin/bash# 或者$ docker container run-p8000:3000-it koa-demo:0.0.1/bin/bash
上面命令的各个参数含义如下:
-p参数:容器的 3000 端口映射到本机的 8000 端口。
-it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
koa-demo:0.0.1:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
/bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。
如果一切正常,运行上面的命令以后,就会返回一个命令行提示符。
root@66d80f4aaf1e:/app#
这表示你已经在容器里面了,返回的提示符就是容器内部的 Shell 提示符。执行下面的命令。
root@66d80f4aaf1e:/app# node demos/01.js
这时,Koa 框架已经运行起来了。打开本机的浏览器,访问 http://127.0.0.1:8000,网页显示"Not Found",这是因为这个demo没有写路由。
这个例子中,Node 进程运行在 Docker 容器的虚拟环境里面,进程接触到的文件系统和网络接口都是虚拟的,与本机的文件系统和网络接口是隔离的,因此需要定义容器与物理机的端口映射(map)。
现在,在容器的命令行,按下 Ctrl + c 停止 Node 进程,然后按下 Ctrl + d (或者输入 exit)退出容器。此外,也可以用docker container kill终止容器运行。
# 在本机的另一个终端窗口,查出容器的 ID$ docker container ls# 停止指定的容器运行$ docker container kill[containerID]
容器停止运行之后,并不会消失,用下面的命令删除容器文件。
# 查出容器的 ID$ docker container ls--all# 删除指定的容器文件$ docker container rm[containerID]
也可以使用docker container run命令的--rm参数,在容器终止运行后自动删除容器文件。
$ docker container run--rm-p8000:3000-it koa-demo/bin/bash
10.4 CMD 命令
上一节的例子里面,容器启动以后,需要手动输入命令node demos/01.js。我们可以把这个命令写在 Dockerfile 里面,这样容器启动以后,这个命令就已经执行了,不用再手动输入了。
FROM node:8.4COPY./appWORKDIR/appRUN npm install--registry=https://registry.npm.taobao.orgEXPOSE3000CMD node demos/01.js
上面的 Dockerfile 里面,多了最后一行CMD node demos/01.js,å®...
- ?
成人钢琴基础教学入门篇
荒凉
展开
关于成人钢琴教学,我一直想出一套完整的教材,但种种原因吧,现在还不够成熟。但教学模式和思路已经成熟了,所以,在这里,我先用文字的形式尝试着把它写出来。
首先,大家要认识最基本的七个乐音:1 2 3 4 5 6 7。七个阿拉伯数字就是音乐里的do re mi fa sol la si(xi)。大家可以拿出笔写一写,读一读。一般正常顺着读都会,倒着读回去的话,稍微困难些。但只要写出来读一读,五分钟即可分清哪个数字对应唱什么音。
如图
再就是高音,低音,中音的区别。大家只需记住,单纯的数字就是中音。数字的上面加一个点,代表高音。数字的下面加一个点,代表低音。
如图
其次,就是节奏型,音的时值,即音的长短。一般情况下,一个数字就是一拍。数字的右边加一个短横线,代表延长时值,即两拍。加两个横线代表三拍。加三个横线代表四拍。数字的下方加一个横线代表减少时值,即半拍。一个数字下面加两个横线,代表这个新是四分之一拍。
如图
如上图,最右下边的两个数字下面一个横线,代表他们两个为一拍。四个数字下面两个横线,代表他们四个为一拍。
那么,关于钢琴键盘的认识是这样的。钢琴共八十八个黑键,有黑白两种琴键凑成。初级的我们,只需弹奏白键即可。
如图
大家看好黑键的构造,由左向右,两个黑键,三个黑键,两个 三个!
大家记住,两个黑键左边第一个白键是do。或者这样记住,两个黑键下面对应着三个白键:do re mi,三个黑键下面对应四个白键:fa sol la xi。
现在大家对简谱和键盘都已经熟悉了吧。那么接下来就是如何弹奏了。当然,前提是你自己要有一台钢琴或者电子钢琴,至少有个电子琴也可以,也可以在网上买一个手卷钢琴。
伸出右手,半握拳,让你的手像钩子一样去弹琴。你有五个手指,大拇指开始到小拇指,分别是12345指。然后一个一个的弹奏出来就是do re mi fa sol
如图
大家可以用右手单独弹奏十遍
do re mi fa sol sol fa mi re do
之后是左手,左手和右手相反,小拇指开始对着低音do,后面以此类推,54321指分别对应低音区的do re mi fa sol。按着右手的方式弹奏十遍。
这个时候大家就可以双手进行弹奏曲子了。我给大家准备的曲目如下图。
大家可以先用右手弹奏一下。作为零基础的你,只要前面的知识点都可以看懂,现在就可以弹琴了。当然图片里面还有一些知识点。但是并不影响大家弹琴。那些竖线代表小节,最后粗细的竖线代表终止,相当于结束标记。
那么左手怎么办呢,其实很简单。大家都会鼓掌打拍子对不对,那么就想唱歌用鼓掌的形式打拍子一样。左手就是负责节拍的作用。大家需要用左手的小拇指(5指)和大拇指(1指)同时弹奏低音do和低音sol即可,如图
简单的左手弹奏方法,就是一小节弹奏一次。或者按着每小节四拍,左手DuangDuangDuangDuang弹奏四下,代表四拍。
两首配合着弹奏既可了。
那么到这里,恭喜大家已经会弹简单的曲目了。如果你身边有钢琴,不妨试试。顺便发个朋友圈,显摆一下。
过几天,看看直接发送视频教程,这样更直观一些。
- ?
水彩基础入门教程:关于人物的水彩画法,需要了解这些才能画好
紊乱
展开
梵高之所以画了那么多自画像,其中一个原因是他没钱请模特。生活在这个有照片又有网络的时代,我们不仅不必为请不到模特担心,而且可以轻松找到许多美好的照片来画,虽然参考别人的照片画出的画不能作为自己的独立作品,但是在练习阶段画一画还是大有裨益的。
很多人会觉得人物难画,和画静物、风景不同、人物画得像与不像、是否神似直接影响着作品的品质。为了让你大家把人物画好,我们有必要先来了解和掌握相关的知识。
所以,我们现在简单的来了解脸部主要部位的画法。
面部
面部比例可以被概括成“三庭五眼”。简单来说,“三庭”就是纵向划分,发际线到眉毛、眉毛到鼻尖、鼻尖到下巴这三段每一段叫做一停,它们的长度是基本一样的。“五眼”就是横向划分,脸的宽度大约等于五只眼睛的宽度。
眼睛的位置在整个头部的二分之一处(注意要把头发厚度去掉),嘴巴的位置基本在鼻子到下巴的二分之一处。
了解“三庭五眼”,一是为了避免作画时走形,二是知道了标准才能更敏锐地观察到每个人相貌的不同特点。卡通或者插画的人物造型,为了塑造面膜特征鲜明的角色,还会经常打破这个比例。
当然,仅仅了解“三庭五眼”还是不够的,我们再来分别从侧面、四分之三侧面和正面看一下头部形态特点吧。首先,头部最重要的两大体块是颅骨和下颌骨,头顶圆形的部分以及面部的上半部是颅骨塑造的,这部分的骨骼是固定不动的。做张嘴动作时,活动的是下颌骨,下颌骨主要决定头部下半部的形状。
眉眼
在我们看一个人的相貌的时候,最关注的通常是眉眼和嘴巴,因为它们是脸上最传神的部分。下面我们就来看看眉眼、嘴和鼻子的画法分解吧。
1、勾勒好轮廓线条之后,用中黄+永固玫瑰红画肤色,画出眼睛周围的结构,眼珠是嵌在眼窝中的球体,所以画的时候要注意球体感的表现。
2、画出下眼睑的厚度和双眼皮形成的暗部(永固玫瑰红+中黄)。上眼睑也是有厚度的,但是一般要仰视才会看到,所以通常只画下眼睑。画双眼皮时,要把它理解成一道皱褶,而不是附着在皮肤表面的一根线。
3、用群青画出白眼球上的阴影,使眼珠更有立体感和层次感。用群青+熟赭画出有球体感的黑眼珠(虹膜)部分,留出高光。
4、画上深色的瞳孔(熟赭+佩恩灰)。加深眼珠和上眼睑交界处(熟赭+佩恩灰),虹膜的轮廓,双眼皮皱褶最深处以及内外眼角也进一步加深(中黄+永固玫瑰红+熟赭)。
5、按眼球结构画上放射状生长的睫毛(熟赭+佩恩灰),注意睫毛是顺着眼睑外侧生长的。
6、画上眉毛(熟赭+佩恩灰)。眉毛是一簇顺着眉弓结构生长的毛发,但是它们常被概括画成一个深色条状的整体。
关于参考照片画人物脸部的简述就讲到这了,大家有什么疑问或是想要沟通交流的,可以在评论区留言哦。
- ?
初学者水彩画入门教程,通过三个步骤可以让小白变大神
卢如蓉
展开
转载自百家号作者:聆微绘画艺术创作
初学者水彩画入门教程,通过三个步骤可以让小白变大神
我发现大家都很喜欢水彩画,但是对于新人而言,水彩是一种难以把控的画材。它对作者下笔的要求极高,基本上下笔后不可逆转修改。
这是一幅水彩肖像,作者是用非常浅淡的颜色起稿,让画面富有层次,在刻画上也会有更多的空间,那么就有朋友问了,我不能用铅笔起稿吗?
在这里小编解答一下,是可以的。但是,水彩的图层是半透明的,覆盖性很差,水彩无法覆盖线稿,一旦上色, 橡皮也无法擦差掉铅笔的痕迹。
所以高手们都是直接用浅色起稿。
那么选用那种浅色呢?
一般,我们常会选用与画面想协调而且稳定性比较好的颜色。比如赭石色、浅褐色等。
该作品用到的是浅赭石色,色彩稳定,而且色感美感很足。
然后对画面进行深入塑造, 先从眼睛开始,这是百分之七十的人绘画者选择的地方,因为眼睛是心灵的窗口,喜欢画眼睛的作者,都是非常讨巧的作者,因为只有画好一双眼睛,这幅画基本上成功一半了。
然后再从周围的配饰下手,为什么不直接从面部深入呢?这也是该作者讨巧的地方,先画自己最感兴趣,并且最出效果的地方,蝴蝶作为配饰出现,首先人们对其特征概念是其实是比较模糊的,只要颜色鲜艳并且对称,这蝴蝶就在人颜值算是精品了。
反观人像,稍微有点问题,人们敏锐的目光可以迅速挑出来,并且放大点评。
因为水彩不可以反复的上色修改,可能一张画的图层都不会超过五层,所以塑造起来小心翼翼。
有人把水彩比作水墨,因为两者的颜色其实非常的相近,都是主要由水和矿物颜色组成,唯一要说不同的,那就是水彩的用倒的纸是类似素描纸的纸张,而水墨则是宣纸,宣纸吸水性很强,所以比水彩更加难以控制。
所以水彩这种颜色其实比起水墨,还不算最难的绘画工具,而难在哪里呢?
难在造型上,所谓造型,就是讲客观事实准群的还原在纸上,除去颜色关系,造型最基本的地方就是起大形。
然后就是明暗关系,如果明暗关系也都掌握了,才是色彩关系。这是造型概念的一个整体的范畴。
所以乍一听水彩,好像只是说色彩,其实又要包含素描上的知识。
所以想要学好水彩,素描一定要扎实,这种造型环节只是基础,这幅画中还体现出了空间关系和疏密关系,这些又可以让一个小白连一段时间了。
那么小白想要学好水彩关系应该怎么办呢?
第一步,系统的学习素描知识,学会用铅笔去刻画任何东西。
第二步,学习水粉的色彩概念,水粉画作为入门级的色彩对新人有很强的指导作用。可以快速学会调色知识,让你调什么颜色,像什么颜色。
第三步,学习色彩构成,这是可以让你学会配色,因为即使你学会调色,在一些创作上,比如本次讲解的案例,真实的模特什么怎么可能会有这么一堆花和蝴蝶为伴,这是作者通过资源整合,进行的二次加工创作才得出的画面。其中对颜色的应用更是加了很作作者自己的想法。
从细节图上看,颜色清新淡雅,蝴蝶栩栩如生。人物面对刻画也点到为止,画面十分的唯美,像一场梦境一样。
这样的画可以算是上品,没有几年的创作功底,是很难达到这种水平的。初学者可以先临摹感受一下色彩的魅力。
- ?
Docker(一):Docker入门教程
任老五
展开
如今Docker的使用已经非常普遍,特别在一线互联网公司。使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力。在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如今在微服务架构越来越流行的情况下,微服务+Docker的完美组合,更加方便微服务架构运维部署落地。
本文详细解释介绍Docker入门相关内容,后期重点关注Docker在微服务体系中的使用。在了解Docker之前我们先考虑几个问题:1、Docker是什么?2、为什么要使用Docker,它有什么优势?带着这些问题我们来看看下面的内容。
什么是Docker?
Docker 是世界领先的软件容器平台。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟。
Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。
为什么要使用Docker
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
具体说来,Docker 在如下几个方面具有较大的优势。
1、更快速的交付和部署
对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
2、更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
3、更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
4、更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
Docker vs VM
从下图可以看出,VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。但Docker目前还不够完善,比如隔离效果不如VM,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多;Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
相关概念
Docker是CS架构,主要有两个概念:
Docker daemon: 运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)与Docker daemon交互Docker client: Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon
了解了Docker的组成,再来了解一下Docker的三个主要概念:
Docker image:镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。Docker container:容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。Docker hub/registry: 共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为 https://registry.hub.docker/,也可以搭建自己私有的Docker registry。镜像就相当于打包好的版本,镜像启动之后运行在容器中,仓库就是装存储镜像的地方。
Docker安装
建议在linux环境下安装Docker,window环境搭建比较复杂且容易出错,使用Centos7+yum来安装Docker环境很方便。
Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令:
yum install docker安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:
service docker startchkconfig docker onLCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,如下:
service docker startchkconfig docker on测试
docker version输入上述命令,返回docker的版本相关信息,证明docker安装成功。
Hello World
下面,我们通过最简单的 image 文件"hello world",感受一下 Docker。
因为国内连接 Docker 的官方仓库很慢,因此我们在日常使用中会使用Docker 中国加速器。通过 Docker 官方镜像加速,中国区用户能够快速访问最流行的 Docker 镜像。该镜像托管于中国大陆,本地用户现在将会享受到更快的下载速度和更强的稳定性,从而能够更敏捷地开发和交付 Docker 化应用。
Docker 中国官方镜像加速可通过 registry.docker-cn访问。该镜像库只包含流行的公有镜像,私有镜像仍需要从美国镜像库中拉取。
修改系统中docker对应的配置文件即可,如下:
vi /etc/docker/daemon.json#添加后{"registry-mirrors":["https://registry.docker-cn"],"live-restore":true}运行下面的命令,将 image 文件从仓库抓取到本地。
docker pull library/hello-world上面代码中,docker image pull是抓取 image 文件的命令。library/hello-world是 image 文件在仓库里面的位置,其中library是 image 文件所在的组,hello-world是 image 文件的名字。
抓取成功以后,就可以在本机看到这个 image 文件了。
docker pull image_name查看宿主机上的镜像,Docker镜像保存在/var/lib/docker目录下:
docker images删除镜像
docker rmi docker.io/tomcat:7.0.77-jre7 或者 docker rmi b39c68b7af30查看当前有哪些容器正在运行
docker ps查看所有容器
docker ps -a启动、停止、重启容器命令:
docker start container_name/container_iddocker stop container_name/container_iddocker restart container_name/container_id后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:
docker attach container_name/container_id删除容器的命令:
docker rm container_name/container_id查看当前系统Docker信息
docker info从Docker hub上下载某个镜像:
docker pull centos:latestdocker pull centos:latest执行docker pull centos会将Centos这个仓库下面的所有镜像下载到本地repository。
- ?
电子琴与钢琴快速0基础入门教程
宓夜蕾
展开
钢琴是西方音乐一种键盘乐器,被称作乐器之王,钢琴一共有88键,分别为52个白键,36个黑键,由金属弦音板组成,钢琴的音域相当广泛,范围为A0-c8,钢琴广泛用于独奏,重奏,合奏,作曲排练中,钢琴音色优美音域范围广泛深受广大爱好者喜爱。
键盘乐器有钢琴,电子琴,风琴,合成器,midi键盘,双排键,手风琴,统称键盘乐器,钢琴的基本构造有,延音踏板、柔音踏板,滑音踏板,琴槌,调音钉,琴键,音板,击弦机组成。
钢琴键盘乐器演奏姿势与手型
坐姿时,身体自然放松,身体坐直,一般坐在凳子三分之一处,不要把凳子坐满,身体不要过于僵硬或者稀松,身体要自然,座位高低要根据演奏者而定,手要与键盘保持一个平行高度或者略高于键盘。弹奏钢琴时候手要保持放松状态,手型成为自然握球状态。大臂自然下垂,不要加紧,腕部与键盘似平行,弹奏过程要保持放松。
键盘基础知识与指法
钢琴c1位置为中央c位置,钢琴组别分别是大字二组,大字一组,大字组,小字组,小字一组,小字二组,小字三组,小字四组,小字五组。
钢琴右手弹奏基本指法123分别是大拇指,食指,中指,45671分别是大拇指,食指,中指,无名指,小拇指。
钢琴左手弹奏基本指法12345为,小拇指,无名指,中指,食指,大拇指,671为中指,食指,大拇指。
钢琴键盘黑白键的关系与音之间的关系
1 2 3 4 5 6 7 叫做音阶,对应下面为调名 C D R F G A B 关系是全全半,全全全半。
所以两个白键之间加一个黑键既是全音,白键和相邻挨着的黑键叫做半音关系。两个黑键之间加一个白键是全音关系,黑键到白键是半音关系,两个白键中间没有黑键为半音关系,自然的音阶为3 4 与7 1就是半音。
当我们知道音的关系后,自然就会排列出各调的音阶1234567,弹奏不同调式的曲目。
在钢琴弹奏中,需要左右手分工,双手分工是不同的,右手主要演奏主旋律,左手主要做伴奏,演奏钢琴主要是练习手指的灵活度与强弱关系和双手配合,在钢琴等键盘乐器演奏中,乐曲组成为右手主旋律,左手编配,其组成知识是,单音,音程,和弦有在和弦与音程分为,旋律音程,和声音程,柱式和弦与分解和弦。练习钢琴要慢练熟悉指法,双手配合时候要根据乐谱节奏演奏,练习钢琴要有耐性,不要急躁,只要掌握基础,练习好基本工后,才能孰能生巧。
- ?
hadoop入门基础教程操作篇
马可可
展开
关于hadoop的分享此前一直都是零零散散的想到什么就写什么,整体写的比较乱吧。最近可能还算好的吧,毕竟花了两周的时间详细的写完的了hadoop从规划到环境安装配置等全部内容。写过程不是很难,最烦的可能还是要给每一步配图,工程量确实比较大。
原计划准备接上一篇内容写dkhadoop的监控页面的参数,突然觉得还是有必要把上两周写的内容做一个汇总,这样方便需要的朋友浏览。上两周写的五篇内容,汇总到一起就算是hadoop新手入门的一个基础性教程吧(持续更新中)。
hadoop入门基础教程五篇文章讲什么?
前两周时间写的五篇文章,其实都在讲一件事情——hadoop运行环境安装部署!可能口头描述几分钟就可以把整个过程说完了,但一旦使用文字来表述就发现每一个部分都写的好长。五篇文章分别介绍了集群管理系统的搭建规划、虚拟机安装、Linux操作系统安装、操作系统服务器配置、DKhadoop下载安装。这五篇文章按照上面的顺序汇总到一起才是完整。
1. 《hadoop集群管理系统搭建规划说明》
2. 《最新虚拟机搭建hadoop环境详细图文教程》
3. 《Hadoop伪分布式环境搭建之Linux系统安装教程》
4. 《hadoop服务器基础环境搭建之Hadoop服务器配置教程》
5. 《超详细hadoop下载安装教程(附图文)》
适合什么人?
Hadoop的大神们可以直接忽略翻过的,当然对于能够无意中看完并且提供宝贵意见的甚是感谢!分享的这些内容只能说是适合hadoop新手入门以及hadoop爱好者吧!而且可能由于使用的hadoop发行版不同的原因,如果你直接按照分享的步骤操作可能也会有“惊喜”!毕竟所有的文章也是我个人操作时的步骤截图整理出来的,而且可能会在后续整理码字的时候忘掉了某些细微的设置,影响最终的执行效果!
Hadoop用的什么发行版
Hadoop版本是比较多的,目前用的是国产的一款发行版(免费的)DKHadoop。3月份的时候在大快搜索站点上下载的3节点的一个版本。好像大快网站在改版,下载链接目前不能用了。应该在改版完成后就可以正常申请下载了。如果有朋友要的可以留言说一下,我把下载的这个版本打包给你!
DKhadoop给我的感觉是对新手入门级的算是很友好的,简单来说就是易用性做得很好!你不需要每次用到一个新东西的时候就可能要重新配置环境。置于易用性到何种程度,以后有空写一篇对比的文章吧!
- ?
五线谱入门基础教程
不尤
展开
五线谱是记录音乐的一种语言,是一种记谱方法。五线谱,顾名思义是由五条平行线组成的,当然还包括每相邻两条平行线之间的“间”。五条线的顺序是由下往上数的。最下面第一条线叫做“第一线”,往上数第二条线叫“第二线”,再往上数是“第 三线”、“第四线”,最上面一条线是“第五线”。“间”也是自下往上数的。最下面的一间叫做“第一间”。往上数是第二间、第三间、第四间。
如果五线四间不够用,还可以添加平行线,如“上加一间”、“上加 一线”、“上加二间”、“上加二线”、“下加一间”、“下加 一线”、“下加二间”、“下加二线”等等。
在钢琴上,为便于称呼,把每12个键(包括黑白两种键)分成一组,如大字组(倍低音组)、小字组(低音组)、小字一组(中音组)、小字二组(高音组)等等。每组的白键从左到右依次用C、D、E、F、G、A、B七个字母表示,不过有的大写,有的小写,有的还有上标或下标(详见下图),方便称呼不同的键。在钢琴上,琴键发出的声音从左到右是由低到高的,即相邻的两个键(无论黑白)发出的声音总是左低右高,右比左高半音。五线谱与钢琴有着密不可分的关系(见下图)。五线谱上的“线”和“间”表示的音高与钢琴的白键是一一对应的,即五线谱上所标音符的音高,只要弹一下对应的琴键就听到了。 那么,钢琴上的黑键与五线谱上的什么对应呢?是与五线谱上标记了升(或降)音记号的线或间对应。例如,小字一组左起第一个黑键对应于标记了升音记号#的下加一线(升高半音),或对应于标记了降音记号b的下加一间(降低半音),也就是说,五线谱上标记了升(或降)音记号的线或间表示的音高等于用黑键弹出来的声音。用类似的方法同样可知其余黑键弹出的声音分别等于五线谱上标记了升(或降)音记号的线或间所表示的音高。
五线谱是由音符、谱号、谱表三个主要的部分组成的。 谱表 在五线谱中,由五条平行横线所组成的图形叫做谱表。谱表有许多种类,比较常用的有高音谱表(又叫G谱表)、低音谱表(又叫F谱表)、大谱表和联合谱表。谱表不同,各线各间的音高位置就不同。
谱号 在五线谱上确定音高的位置——也就是音名位置的符号叫做谱号。通常用的谱号有三种:高音谱号(G谱号):
表示小字一组的g,记在五线谱的第二线上,叫高音谱号;另外有记在第一线上的,叫古法国式高音谱号。 高音谱表一线mi 二线sol 三线si 四线re 五线fa低音谱号(F谱号):
表示小字组的f,记在五线谱的第四线上,叫低音谱号; 另外还有记在第五线上的,叫倍低音谱号。 低音谱表一线la 二线fa 三线re 四线si 五线sol 一定要根据键盘来背这些线上的音,高音谱表上的一线mi是在中央C右侧的那个MI,低音谱表上的一线la 是在中央C左侧的那个la ,然后高音谱表上的线和间按照从下到上的顺序,表示的音依次向右侧排列;低音谱表上的线和间按照从上到下的顺序,表示的音依次向左侧排列。C谱号:
C谱号上下均等,最中间的部分对准哪一条线,在这条线上标出的音就唱(do)。以此上下类推。C谱号 表示小字一组的c,可记在五线谱的任何一线上。目前被采用的C谱号有C三线谱号(中音谱号)为中音提琴所用,有时也为长号所用。C四线谱号(次中音谱号)为大提琴、大管和长号所用。其他C谱号一般较少应用。使用许多谱号的目的是为了避免过多的加线,以使写谱和读谱更加方便。各种谱号可以单独使用,也可以连接起来使用,如高、低音谱号所组成的大谱表便是。一般用高音谱表 的乐器大部分是属于高音乐器,象小提琴、二胡、高胡、长笛、小号、双簧管、笛子等等,还有包括人声的男女高音声部,通常高音谱表用得较为普遍,除了特殊乐 器声部以外,大部分用高音谱表来标写。使用低音谱表的一般是一些低音乐器和人声的低音声部,比如象大提琴,大管、大号、低音黑管等等。而C谱表则多用于中 音提琴等等……
作者:gjh0927
- ?
Python基础教程(一) - 快速入门
修一郎
展开
从今天开始学习python,会将学习到的相关知识整理到这里。今后的所有内容都基于Ubuntu系统中进行的,和其他语言一样,让我们先来"Hello World!"吧。
Hello world!
#!/usr/bin/python为Linux系统下Python解释器的路径,通常python解释器的路径安装在/usr/local/bin或/usr/bin目录下。
程序输入和raw_input()内建函数
从用户得到数据输入的最好方式使用raw_input()函数,它读取标准输入,并将读取到的数据赋值给指定的变量。
注释
和大部分脚本及Unix-shell语言一样,python也使用 # 符号标示注释,从#开始直到一行结束的内容都是注释
操作符
和其他大多数语言一样,Python中的标准算数操作符以你熟悉的方式工作。加、减、乘、除、取余都是标准操作符,Python当然也有标准比较操作符,比较运算根据运算的真假返回布尔值。例如:
>>> 2 > 4 True
>>>2< 4 False
变量和赋值
和大多数高级语言一样,都受C语言的影响。变量名仅仅是一些字符开头的标识符--意指大写或者小写字母,另外还包括下划线(_)。变量名是大小写敏感的。'case'和'CaSe'是两个不同的变量。
Python是动态类型语言,不需要预先生命变量类型。
数字&字符串
Python支持五种基本数字类型,其中有三种整形类型。
有符号整型 - 长整型、布尔值 浮点值 复数
Python中字符串被定义为引号之间的字符集合。支持使用成对的单引号或双引号,三引号(三个连续的单引号或双引号)可以用来包含特殊字符。使用索引操作符([])和切片操作符([:])可以得到子字符串。索引规则:第一个字符的索引是0,最后一个字符的索引是-1。
加号(+)用于字符串连接运算,星号(*)则用于字符串重复。
列表和元组
可以将列表和元组当成普通的“数组”,可以保存任意数量任意类型的Python对象。通过从0开始的数字索引访问元素。
列表和元组有几处重要的区别。列表元素用中括号([])包裹,元素的个数及元素值可以改变。元组用小括号(())包裹,不可以更改。通过切片元素([]和[:])可以得到子集,这点与字符串使用方法一致。
字典
字典是Python中的映射数据类型,关联数组或哈希表,由键值对构成。一般以数字或字符串最为键,值可以是任意类型的Python对象,字典元素用大括号({})包裹。
文件和内建函数open(),file()
如何打开文件 handle = open(filename, access_mode = 'r')
filenam变量包含我们系统打开的文件的名字,access_mode中'r'表示读取,'w'标示写入,'a'表示添加。其他可能用到的标识还有'+', 'b'表示二进制访问。如果open成功,一个文件对象句柄会被返回。所有后续的文件操作都必须通过此文件句柄进行。比如readlines()和close()。
上面的代码适用于文件大小适中的文件。对于很大的文件来说,上面的代码会占太多的内存,这时你最好一次读一行。
函数
定义一个函数的语法由def关键字及紧随其后的函数名,在加上函数的几个参数组成。函数参数是可选的,这个语句由一个(:)结束,之后的函数体,例如:
类
如何定义类,使用class关键字进行定义。可以提供一个可选的父类,如果没有合适的父类,那就使用object做为父类。class行之后是可选的文档字符串、静态成员定义和方法定义。
上面的类中,我们定义了一个静态变量version,可以被所有实例和3个方法共享,__init()__方法有一个特殊的名字,当上面的类实例被创建时,__init__()方法自动执行。目的是执行一些初始化的工作。每个方法都有一个参数self,它是类实例自身引用。其他面向对象语言有的使用this。
模块
模块是一种组织形式,它将彼此有关系的代码组织到一个个独立的文件中。当你创建了一个python源文件,模块的名字就是.py后缀前的文件名字。一个模块创建后,你可以从另一个模块中使用import来导入它。
导入模块很简单,import module_name,完成导入后,一个模块的属性(函数和变量)可以通过熟悉的句点属性标识法访问,module.function()、module.variable,使用sys模块输出函数做个例子。
- ?
简谱怎么看?五线谱入门基础教程来了
詹碧琴
展开
大家想看的简谱教程终于来了,其实对于很多朋友来说,简谱并不陌生。
学习乐器,学习唱歌,都需要看简谱。
看简谱绝对是最基础的乐理知识,不会看简谱怎么办?
两个办法:要么一直不会看简谱,要么就学呗!
我们常说的简谱,也就是数字简谱,由数字1-7组成,唱作“do,re,mi,fa,sol,la,si”
接下来我们根据下面这张简谱图来一一讲解,简谱中的常见符号都是什么意思?
(1)1=C,表示这首曲子是C调的。
4/4,是表示这首曲子是44拍。
(2)音符下面有一条横线。这个表示的是节奏。下面没有线的音符,叫做四分音符,也就是一拍。下面有一根横线的,叫八分音符,是半拍。
(3)音符上面有一个点。上面有点的是高音,下面有点的是低音,没有点的是中音。对应的音区,我们称之为低音区,中音区,高音区。
比如第一句中:长亭外,外是发音最高的,古道边,道是发音最高的。
在音符上标点,在演奏乐器或者唱歌的时候,帮助你找准音的高低。
(4)音符后面有一根短横线。这个叫做延音线,意思就是唱到这里得拖长音。比如:长亭外~(此处用波浪表示延长)古道边~。
(5)两个音符上面有一个弧线。这个叫做连音线,一般是给唱歌看的,表示一个字要对应几个音,中间不断开。
解读:这句话的意思就是说,当你看到弧线,就要将对应的字的读音分解开始唱。
比如第一句:长亭外,“亭”字上有连音线,亭的读音大家知道,ting=t+ing。
所以唱的时候要这么唱:长亭(拖ing的音)外~
看懂的话,我们接着唱后面的:长亭(拖ing的音)外~古道边~芳草(拖ao的音)碧连(拖an的音)天~
(6)0。叫做休止符,就是停顿不唱,等待下一段节奏再唱。吹奏乐器的时候,看到休止符,就可以停止吹奏,然后等下一段节奏再吹奏。
(7)音符后面有一个点,这个叫做附点。简单点说,就是告诉你,这个音要多唱半拍。
比如此处,本来“拂”只需要唱一秒,现在你要唱1.5秒的延长音。本来要唱2秒,现在要唱3秒。
不管是吹奏乐器,还是唱歌,简谱都起到一定的引导和矫正的作用。
大家可以根据刚刚小爱讲解的,再将经典儿歌小红帽唱一遍,会不会感觉之前只能根据音乐来停顿,现在却可以通过看简谱来有意识的适当停顿拖长来改变唱歌的节奏了?
喜欢本文就来关注我们吧~关注之后点开我们的个人主页,不定期免费放送唱歌教学视频。
在评论区写下您想要学习的唱歌/乐器技巧,本号的更新会参考您留下的评论。
爱歌者学音乐,为您人生添魅力。感谢您的关注与支持。
入门基础教程
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
初入新手村 — 演示者视图的操作步骤 0102
-
初入新手村 — 鼠标的交互的方法 0103
-
初入新手村 — 如何快速访问工具栏 0104
-
初入新手村 — 文件选项卡、保存等基础 0105
-
第二关 :内容整理与处理 — 导航区操作技巧 0201
-
第三关 :文字工具与段落 — 如何给你的文字加特效 0301
-
文字工具与段落— 段落工具使用 0302
-
第四关:绘图与形状效果 — 基本形状的绘制方法 0401
-
绘图与形状效果 — 给你的图形加特效 0402
-
绘图与形状效果 — 快速排列多种图形 0403
-
第五关:合并形状与图标 — 用好合并形状轻松获得更多创意图形 0501
-
第六关:图片的神奇 — 教你PPT如何实现抠图 0601
-
图片的神奇 — 使用图片裁剪让图片为你所用 0602
-
第七关:表格与逻辑图表 — 教你画一个简洁大方的表格 0701
-
表格与逻辑图表 — SmartArt快速生成逻辑图表 0702
-
表格与逻辑图表 — 一招SmartArt走遍天下 0703
-
第八关:形象化市场数据 — PPT中数据图表怎么做?0801
-
形象化市场数据 — 教你做好看的条形图和柱状图 0802
-
形象化市场数据 — 饼图的美化技巧 0803
-
第十关:终成商务演示高手
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101