四十二、Docker-虚拟化入门
1、虚拟化概述
通俗的说,虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒,计算元件运行在虚拟的基础上而不是真实的基础上,可以扩大硬件的容量,简化软件的重新配置过程。
允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率,是一个为了简化管理,优化资源的解决方案。 目前主流的虚拟化技术主要有:KVM、Xen、VMware Esxi、VirtualBox、Docker。
虚拟化原理:虚拟化解决方案的底部是要进行虚拟化的物理机器,这台机器可能直接支持虚拟化,也可能不会直接支持虚拟化,那么就需要系统管理程序层的支持。系统管理程序(Virtual machine monitor),或称为 VMM,可以看作是平台硬件和操作系统的抽象化。在某些情况中,这个系统管理程序就是一个操作系统,此时它就称为主机操作系统。
完全虚拟化技术实际上是通过软件实现对操作系统的资源再分配,比较成熟,例如我们的KVM、VirtualBOX。
半虚拟化技术则是通过代码修改已有的系统,形成一种新的可虚拟化的系统,调用硬件资源去安装多个系统,整体速度上相对高一点,代表产品有Xen。
轻量级虚拟化,Docker虚拟化(介于完全虚拟化、半虚拟化之间),轻量级虚拟化;
2、Docker 虚拟化简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中支持 Docker,Google 也在其 PaaS 产品中广泛应用。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在LXC的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
Docker虚拟化有三个概念需要理解,镜像、容器、仓库。
镜像:Docker的镜像其实就是模板,跟我们常见的ISO镜像类似,是一个样板。镜像中包含了各种应用程序、软件服务、数据等内容的模板文件,是静止、只读的,不能被修改,是用于启动Docker容器(轻量级的虚拟机)。
容器:使用镜像常见的应用或者系统,我们称之为一个容器。容器是基于镜像运行之后的实例,没有镜像就没有容器,容器是可读、可写的,容器启动之后一直需要底层镜像的支持,镜像文件不能删除。容器所需的数据、文件可以从镜像模板中读取和调用,镜像是容器系统的底层基石。
仓库:仓库是存放镜像的地方,分为公开仓库(Public)和私有仓库(Private)两种形式。
Docker 引擎架构图:
Server是一个常驻进程,REST API 实现了client和server间的交互协议,CLI 实现容器和镜像的管理,为用户提供统一的操作界面。
Docker使用C/S架构,Client 通过接口与Server进程通信实现容器的构建,运行和发布。client和server可以运行在同一台集群,也可以通过跨主机实现远程通信,架构如图所示:
Docker 与传统VM比较:
优点:操作启动快、轻量级虚拟化、开源免费
缺点:目前知道的人比较少、相关的中文技术资料欠缺、Go语言还未完全成熟
为什么使用 Docker?
更快速的交付和部署:Docker在整个开发周期都可以完美的辅助你实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
高效的部署和扩容:Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。你可以快速扩容或方便的下线的你的应用和服务,这种速度趋近实时。
更高的资源利用率:Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
更简单的管理和使用:使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
3、Docker 镜像原理
一个完整的Docker镜像可以支撑一个Docker容器的运行,在Docker容器运行过程中主要提供文件系统数据支撑。Docker镜像作为docker中最基本的概念,有以下几个特性:
镜像分层,每个镜像都由一个或多个镜像层组成;
可通过在某个镜像加上一定的镜像层得到新镜像(此过程可通过编写dockerfile或基于容器Commit实现;
每个镜像层拥有唯一镜像ID;
镜像在存储和使用时共享相同的镜像层(根据ID),所以在pull镜像时,已有的镜像层会自动跳过下载;
每个镜像层都是只读,即使启动成容器,也无法对其真正的修改,修改只会作用于最上层的容器层。
Docker容器,可以理解为一个或多个运行进程,而这些运行进程将占有相应的内存,相应的CPU计算资源,相应的虚拟网络设备以及相应的文件系统资源。而Docker容器所占用的文件系统资源,则通过Docker镜像的镜像层文件来提供。基于每个镜像的json文件,Docker可以通过解析Docker镜像的json的文件,获知应该在这个镜像之上运行什么样的进程,应该为进程配置怎么样的环境变量,Docker守护进程实现了静态向动态的转变。
4、Docker 部署安装
Docker官方要求部署Docker平台的底层Linux系统对应的Linux内核版本(uname -a 指令查看内核版本)至少在3.8+,实际的企业生产环境中,推荐Linux内核版本:3.10+,对应企业Linux操作系统发行版本分别为:RHEL7.x、CentOS7.x、Ubuntu16.x 。
阿里源安装:
# 安装阿里docker-ce源
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# yum install -y docker-ce*
epel-release 源安装
# 安装第三方扩展源 epel-release
[root@localhost ~]# yum install -y epel-release
[root@localhost ~]# ll /etc/yum.repos.d/ |grep -w epel
-rw-r--r--. 1 root root 664 5月 11 2018 epel.repo
-rw-r--r-- 1 root root 1050 9月 18 2019 epel.repo.rpmnew
-rw-r--r-- 1 root root 1149 9月 18 2019 epel-testing.repo# yum 安装docker软件包
[root@localhost ~]# yum install -y docker*# 启动
[root@localhost ~]# systemctl start docker.service# 查看版本
[root@localhost ~]# docker version
Client:Version: 1.13.1API version: 1.26Package version: docker-1.13.1-109.gitcccb291.el7.centos.x86_64Go version: go1.10.3Git commit: cccb291/1.13.1Built: Tue Mar 3 17:21:24 2020OS/Arch: linux/amd64Server:Version: 1.13.1API version: 1.26 (minimum version 1.12)Package version: docker-1.13.1-109.gitcccb291.el7.centos.x86_64Go version: go1.10.3Git commit: cccb291/1.13.1Built: Tue Mar 3 17:21:24 2020OS/Arch: linux/amd64Experimental: false
5、Docker 更新仓库源
Docker默认连接的国外官方镜像,通常根据网络情况不同,访问时快时慢,大多时候获取速度非常慢,为了提示效率可以自建仓库或者先修改为国内仓库源,提升拉取镜像的速度。
Docker可以配置的国内镜像有很多可供选择,例如:Docker中国区官方镜像、阿里云、网易蜂巢、DaoCloud等,这些都是国内比较快的镜像仓库。
修改方式如下:
[root@localhost ~]# vim /etc/docker/daemon.json
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
[root@localhost ~]# systemctl restart docker.service
修改完重启Docker服务即可,修改仓库地址为国内仓库后,获取镜像速度快很多。
6、Docker 常用命令
docker search 在docker hub中搜索镜像;
docker pull 从docker镜像源服务器拉取指定镜像或者库镜像;
docker push 推送指定镜像或者库镜像至docker源服务器;
docker history 展示一个镜像形成历史;
docker images 列出系统当前镜像;
docker run 创建一个新的容器并运行一个命令;
docker start 启动容器;
docker stop 停止容器;
docker attach 当前shell下attach连接指定运行镜像;
docker build 通过Dockerfile定制镜像;
docker commit 提交当前容器为新的镜像;
docker cp 从容器中拷贝指定文件或者目录到宿主机中;
docker create 创建一个新的容器,同run,但不启动容器;
docker diff 查看docker容器变化;
docker events 从docker服务获取容器实时事件;
docker exec 在已存在的容器上运行命令;
docker export 导出容器的内容流作为一个tar归档文件[对应import];
docker import 从tar包中的内容创建一个新的文件系统映像[对应export];
docker info 显示系统相关信息;
docker inspect 查看容器详细信息;
docker kill 指定docker容器;
docker load 从一个tar包中加载一个镜像[对应save];
docker login 注册或者登陆一个docker源服务器;
docker logout Dockerregistry退出;
docker logs 输出当前容器日志信息;
docker port 查看映射端口对应的容器内部源端口;
docker pause 暂停容器;
docker ps 列出容器列表;
docker restart 重启运行的容器;
docker rm 移除一个或者多个容器;
docker rmi 移除一个或多个镜像;
docker save 保存一个镜像为一个tar包[对应load];
docker tag 给源中镜像打标签;
docker top 查看容器中运行的进程信息;
docker unpause 取消暂停容器;
docker version 查看docker版本号;
docker wait 截取容器停止时的退出状态值;
7、Docker 部署Nginx容器
方式一:官网下载
# 仓库搜索nginx镜像
[root@localhost ~]# docker search nginx
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/nginx Official build of Nginx. 12861 [OK]
docker.io docker.io/jwilder/nginx-proxy Automated Nginx reverse proxy for docker c... 1755 [OK]
docker.io docker.io/richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... 760 [OK]
docker.io docker.io/linuxserver/nginx An Nginx container, brought to you by Linu... 98
docker.io docker.io/bitnami/nginx Bitnami nginx Docker Image 79 [OK]
docker.io docker.io/tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rt... 66 [OK]
docker.io docker.io/jc21/nginx-proxy-manager Docker container for managing Nginx proxy ... 46
docker.io docker.io/nginxdemos/hello NGINX webserver that serves a simple page ... 43 [OK]
docker.io docker.io/nginx/unit NGINX Unit is a dynamic web and applicatio... 36
docker.io docker.io/jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 35 [OK]
docker.io docker.io/nginx/nginx-ingress NGINX Ingress Controller for Kubernetes 28
docker.io docker.io/privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & ... 23 [OK]
docker.io docker.io/schmunk42/nginx-redirect A very simple container to redirect HTTP t... 18 [OK]
docker.io docker.io/nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 13
docker.io docker.io/centos/nginx-112-centos7 Platform for running nginx 1.12 or buildin... 12
docker.io docker.io/centos/nginx-18-centos7 Platform for running nginx 1.8 or building... 12
docker.io docker.io/raulr/nginx-wordpress Nginx front-end for the official wordpress... 12 [OK]
docker.io docker.io/nginx/nginx-prometheus-exporter NGINX Prometheus Exporter 10
docker.io docker.io/sophos/nginx-vts-exporter Simple server that scrapes Nginx vts stats... 7 [OK]
docker.io docker.io/mailu/nginx Mailu nginx frontend 6 [OK]
docker.io docker.io/bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Con... 4 [OK]
docker.io docker.io/pebbletech/nginx-proxy nginx-proxy sets up a container running ng... 2 [OK]
docker.io docker.io/ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 1 [OK]
docker.io docker.io/centos/nginx-110-centos7 Platform for running nginx 1.10 or buildin... 0
docker.io docker.io/wodby/nginx Generic nginx 0 [OK]# 仓库下载nginx镜像
[root@localhost ~]# docker pull docker.io/nginx
方式二:手动导入
# 将nginx.tar上传到服务器任一目录然后执行导入命令即可
[root@localhost ~]# ll nginx.tar
-rw-r--r-- 1 root root 129809408 3月 23 13:30 nginx.tar
[root@localhost ~]# docker load < nginx.tar
1c95c77433e8: Loading layer [==================================================>] 72.47 MB/72.47 MB
002a63507c1c: Loading layer [==================================================>] 57.31 MB/57.31 MB
12fdf55172df: Loading layer [==================================================>] 3.584 kB/3.584 kB
Loaded image: nginx:latest
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 5a3221f0137b 7 months ago 126 MB
启动两个实例80和81
[root@localhost ~]# docker run -itd -p 80:80 nginx
ccdfec8b3752ac1bc131767f33b61e281f8e1b8995ae596e16b91294c441ed28
[root@localhost ~]# docker run -itd -p 81:80 nginx
05aa29d3caacf423b552e45524813e4c45bf40b1575c2e7cdba755fa61263cfb
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
05aa29d3caac nginx "nginx -g 'daemon ..." 35 seconds ago Up 34 seconds 0.0.0.0:81->80/tcp zealous_booth
ccdfec8b3752 nginx "nginx -g 'daemon ..." 40 seconds ago Up 39 seconds 0.0.0.0:80->80/tcp goofy_kowalevski#查看Nginx容器IP
[root@localhost ~]# docker inspect 05aa29d3caac|grep -i ipaddr|tail -1"IPAddress": "172.17.0.3",# docker run -itd -p -v /var/html:/usr/share/html/ 80:80 nginx 参数 -v 可以将宿主机目录映射到容器中目录,这样就可以直接将网站发布到本地宿主机目录,容器一样可以使用
部署100台Nginx
# 启动100台Nginx应用容器
for i in `seq 0 99`;do docker run -itd -p 80$i:80 nginx ;done#查看100台Nginx容器的ip
echo "容器ID,容器IP";for i in $(docker ps|awk 'NR>1 {print $1}');do echo $i; docker inspect $i|grep -i ipaddr|tail -1|awk -F\" '{print $4}' ;done|sed 'N;s/\n/ /g'|sed 's/ /,/g' >>docker_list.csv容器ID,容器IP
05aa29d3caac,172.17.0.3
ccdfec8b3752,172.17.0.2
进入 Nginx 容器
[root@localhost ~]# docker exec -it 05aa29d3caac /bin/bash
root@05aa29d3caac:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@05aa29d3caac:/# ls /etc/nginx/conf.d/
default.conf
[root@localhost ~]# docker exec 05aa29d3caac ls /usr/share/nginx/html/
50x.html
index.html# 从容器拷贝文件到宿主机
[root@localhost ~]# docker cp 05aa29d3caac:/etc/nginx/conf.d/default.conf .# 从宿主机拷贝文件到容器
[root@localhost ~]# docker cp default.conf 05aa29d3caac:/etc/nginx/conf.d/# 重启容器
[root@localhost ~]# docker restart 05aa29d3caac
8、Docker 部署 CentOS7 容器
[root@localhost ~]# docker search centos
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/centos The official build of CentOS. 5896 [OK]
docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 128 [OK]
docker.io docker.io/jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos ... 114 [OK]
docker.io docker.io/consol/centos-xfce-vnc Centos container with "headless" VNC sessi... 111 [OK][root@localhost ~]# docker pull docker.io/ansible/centos7-ansible
Using default tag: latest
Trying to pull repository docker.io/ansible/centos7-ansible ...
latest: Pulling from docker.io/ansible/centos7-ansible
45a2e645736c: Pull complete
1c3acf573616: Pull complete
edcb61e55ccc: Pull complete
cbae31bad30a: Pull complete
aacbdb1e2a62: Pull complete
fdeea4fb835c: Pull complete
Digest: sha256:39eff7d56b96530d014083cd343f7314c23acbd1ecf37eb75a71a2f6584d0b02
Status: Downloaded newer image for docker.io/ansible/centos7-ansible:latest
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 5a3221f0137b 7 months ago 126 MB
docker.io/ansible/centos7-ansible latest 688353a31fde 3 years ago 447 MB# 启动
[root@localhost ~]# docker run -itd -p 6022:22 --privileged docker.io/ansible/centos7-ansible
06af4d90b48a2876ead2485a05a03e42e4c2d827494ba861e2343df52faefa66
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06af4d90b48a docker.io/ansible/centos7-ansible "/bin/bash" 50 seconds ago Up 48 seconds 0.0.0.0:6022->22/tcp confident_ptolemy
05aa29d3caac nginx "nginx -g 'daemon ..." 2 hours ago Up About an hour 0.0.0.0:81->80/tcp zealous_booth
ccdfec8b3752 nginx "nginx -g 'daemon ..." 2 hours ago Up 2 hours # 进入容器
[root@localhost ~]# docker exec -it 06af4d90b48a /bin/bash
[root@06af4d90b48a ansible]# ls
CHANGELOG.md COPYING Makefile ROADMAP.rst bin docs-api hacking setup.py ticket_stubs
CODING_GUIDELINES.md MANIFEST.in README.md VERSION contrib docsite lib shippable.yml tox.ini
CONTRIBUTING.md MODULE_GUIDELINES.md RELEASES.txt ansible-core-sitemap.xml docs examples packaging test# 查看容器IP
[root@06af4d90b48a ansible]# exit
exit
[root@localhost ~]# docker inspect 06af4d90b48a|grep -i ipaddr|tail -1|grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}"
172.17.0.4
官方提供的 CentOS 是非常精简的,许多软件需要自己进行安装。
sshd 安装方法:
# 进入容器
[root@localhost ~]# docker exec -it 8d72d4b21cd4 /bin/bash# 安装openssh 服务端
[root@8d72d4b21cd4 ansible]# yum install -y openssh-server# 宿主机拷贝相关文件到容器
[root@localhost ssh]# pwd
/etc/ssh
[root@localhost ssh]# ls
moduli ssh_host_ecdsa_key ssh_host_ed25519_key.pub
ssh_config ssh_host_ecdsa_key.pub ssh_host_rsa_key
sshd_config ssh_host_ed25519_key ssh_host_rsa_key.pub
[root@localhost ssh]# docker cp ssh_host_rsa_key 8d72d4b21cd4 :/etc/ssh/
[root@localhost ssh]# docker cp ssh_host_ed25519_key 8d72d4b21cd4 :/etc/ssh/
[root@localhost ssh]# docker cp ssh_host_ecdsa_key 8d72d4b21cd4 :/etc/ssh/# 启动sshd
[root@localhost ~]# docker exec -it 8d72d4b21cd4 /bin/bash
[root@8d72d4b21cd4 ansible]# /usr/sbin/sshd
通过Xshell 可以连接上虚拟机了。
四十二、Docker-虚拟化入门相关推荐
- 如何选择适合你的兴趣爱好(四十二),风筝
围城网的摇摇今天给大家带来了"如何选择适合你的兴趣爱好"系列专辑的第四十二讲--风筝.风筝是在纸鸢背上系上一条弓弦,或在纸鸢头部按一个风笛,当纸升空以后,强风通过笛,或者引起弓弦的 ...
- 【Microsoft Azure 的1024种玩法】四十二. 通过Windows Admin Center快速创建Azure Virtual Machines
[简介] Windows Admin Center是微软开发的一套可以部署在本地基于浏览器的GUI的工具集平台,其平台可用于管理Windows相关服务器和PC机器,我们可以利用Windows Admi ...
- maya批量命名插件_教你玩转MAYA的四十二精华造诣(第一期)
最近在整理文档时发现我收藏了一篇关于MAYA应用技巧的文章,突然有兴趣看了看,结果发现老版本MAYA中的某些内容很多已经无法应用于新版本.我又上网查了一下,结果发现网上好多帖子和我收藏的这篇内容基本一 ...
- OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co
OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...
- 四十二、深入Java中的文件读取操作
@Author:Runsen @Date:2020/6/8 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...
- JavaScript学习(四十二)—利用工厂模式创建对象以及工厂模式创建对象的不足
JavaScript学习(四十二)-利用工厂模式创建对象以及工厂模式创建对象的不足 一.利用工厂模式创建对象 工厂模式是JavaScript中的一种设计模式,它的作用是批量创建具有同种属性的对象. 格 ...
- 【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器 DirectInput专场
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- 多麦克风做拾音的波束_乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评...
原标题:乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评 乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评 20 ...
- 【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器:DirectInput专场...
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8547531 作者:毛星云(浅墨) ...
- (四十二):Aligning Linguistic Words and Visual Semantic Units for Image Captioning
(四十二):Aligning Linguistic Words and Visual Semantic Units for Image Captioning 手写笔记 PPT总结 ABSTRACT 1 ...
最新文章
- command-line: line 0: Bad configuration option: PermitLocalCommand
- python django 优势_那么多人选择Python,它的优势,缺点有哪些?
- 大规模异常滥用检测:基于局部敏感哈希算法——来自Uber Engineering的实践
- 西门子S7以太网通讯协议
- 1067 Sort with Swap(0, i) (25 分)【难度: 中 / 知识点: 置换群】
- 《见字如面》赏析-待续
- android 微信缩小通话界面_安卓如何做出微信那样的界面仿微信“我”的界面2/5...
- java多态的简单例子_要JAVA的简单例子,继承\多态的,详细讲解运行的每一步
- 平安夜、圣诞节设计素材和灵感|撒糖(PNG免扣素材)
- java界面编程 pdf_java – PDF页面使用itext重新排序
- C# 图像编程 (1) 准备工作; 你好,空姐; 为空姐照片添加特效
- Hadoop完全分布式集群安装Hbase
- 串口termios函数
- 【Scratch】青少年蓝桥杯_每日一题_12.01_角色装扮
- 矩阵分析与应用-1.8-广义逆矩阵
- 认识kata-containers
- kubernetes 1.10.3 cAdvisor + Heapster + InfluxDB + Grafana
- 自控力读书笔记 第五章	 大脑的弥天大谎:为什么我们误把渴望当幸福?
- java输入成绩并排序简单_java 成绩排序
- C++——return0