明翰Docker笔记V0.1(持续更新)
文章目录
- 前言
- 什么是Docker
- `镜像`
- `容器`
- `镜像制作`
- 手动
- 自动
- 镜像管理
- `整合Spring Boot`
- 其他
- 整合Jenkins
- 安装
- 其他
前言
在石器时代,如果我们要部署一个应用,
我们需要准备一台机器,这台机器上要有操作系统,
还要有一些依赖的软件环境(例如:JDK,环境变量,参数配置,系统参数优化,版本号等等),
之后再部署我们自己的应用程序,然后再启动我们的服务,供用户访问。
主要痛点:
- 硬件资源浪费,成本高;
- 部署效率低,前置步骤多,扩容麻烦;
- 一台机器可能部署多个应用,不同应用之间所依赖的环境可能产生冲突;
之后我们进化到了虚拟机时代,
我们通过隔离硬件资源的方式在一台机器上模拟出n个虚拟机,
n个虚拟机上可以部署n个应用,n个应用之间彼此隔离,互不打扰,
A应用hung住后,并不会影响到B应用,此外还可以减少资源浪费。
主要痛点:
- 虚拟机占用硬件资源高;
- 部署效率低,前置步骤多,扩容麻烦;
- 代码所对应的运行环境,在A机器上运行没问题,在B机器上运行有问题;
面对诸如此类的痛点,我们可以使用Docker来帮忙。
什么是Docker
Docker是一种使用Go语言开发的容器技术,可以把Docker理解成虚拟机的升级版,
相对于虚拟机的笨重,Docker则更显得轻量化,不会占用太多的系统资源,
且启动与停止速度快(秒级)。
Docker将应用本身以及它所需要的运行环境封装起来,形成一个镜像,
这个镜像可以分享到相关责任人的手中,也可以在不同机器上启动对应的容器。
Docker通过操作系统底层技术,对进程进行封装隔离,
而被隔离的进程也被称为容器,运行这些容器的机器被称为宿主机。
Docker的理念是:一次封装,到处使用,大幅度提升开发运维效率。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5dOQT5h3-1648859194177)(evernotecid://BCE3D193-8584-4CB1-94B3-46FF37A1AC6C/appyinxiangcom/12192613/ENResource/p346)]
应用所依赖的环境,只需要一次性地创建或配置,
就可以在任意机器、任意时间运行。
Docker优势:
- 以前一个服务器只有一个应用,资源浪费多,现在可以切出来多个容器,可以提升资源利用率;
- 提升工作效率,创建容器的操作非常快,可快速实现部署;
- 消耗硬件资源少;
- 应用隔离性,资源隔离性;
- 环境一致性;
Docker操作步骤:
- 下载并安装docker,有多种方式,如果是在自己电脑上玩,可以直接使用桌面版,很多功能都可以通过点鼠标而非敲命令执行,https://www.docker.com;
- 启动docker;
- 下载镜像;
- 创建并启动容器;
# 安装docker
yum install docker# 查看docker是否安装成功
docker version
镜像
类似于装系统时用的镜像,有的镜像是纯净版,有的镜像可能已经添加了一些功能,
在Docker中,我们可以将想要的环境打包成一个镜像,然后发布到网上(公服或私服)去,
之后想要使用这个环境的时候,直接在网上拉取。
镜像Name中的xxx:xxx代表repository:tag,
如果tag是最新的(latest),则可以省略。
# 查询MySQL镜像
docker search mysql
docker search nginx# 下载镜像
docker pull mysql:5.7
docker pull centos
docker pull redis
docker pull nginx# 查看本地镜像列表
docker images# 删除镜像
docker rmi 镜像ID# 修改镜像仓库名与标签
docker tag 镜像ID alexyang/java:1.0
容器
[创建/启动]容器(通过镜像启动容器,如果本地没有镜像,则会自动下载):
docker run <相关参数> <镜像ID/镜像Name> <初始命令>,
docker run命令的最后一段可以添加一个容器启动时需要执行的命令。
docker run -d -p 49175:22 镜像ID /usr/sbin/sshd -Ddocker run -d -p 49175:22 -p 8889:8889 镜像ID /usr/sbin/sshd -D
name | description |
---|---|
-i | 表示以“交互模式”运行容器,容器启动后,可以使用键盘进行输入 |
-t | 表示容器启动后会进入其命令行 |
-v | 表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录> ,容器可以直接使用这个目录,例如可以把software都放在宿主机中,利用这种方式来让容器访问到。-v表示数据卷(Data Volume),将宿主机上的文件夹挂载到容器中,可以使用多次-v挂载多个文件夹,例如:-v /Users/alexyang/Downloads:/mnt/software |
-p
|
表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口(58080:8080),这样就向外界暴露了 58080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了,-p可以写多个。
|
–name | 表示容器名称,用一个有意义的名称命名即可。 |
/bin/bash | 运行容器中的bash程序,创建完容器后直接以root身份进入到容器中。 |
/usr/sbin/sshd -D | 启动ssh服务 |
# CentOS
docker run -i -t centos /bin/bashdocker run -i -t -d -p 20:20 -p 21:21 -p 22:22 -p 80:80 -p 443:443 centos /bin/bashdocker run -i -t -d -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 888:888 -p 8888:8888 --privileged=true centos# 会下载最新版的MySQL(不要把数据库放到容器中):
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysqldocker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7# Redis
docker run -p 6379:6379 -d redis:latest redis-serverdocker run --name nginx -p 80:80 -d nginx# 启动容器
docker start 容器ID# 停止容器
docker stop 容器ID# 暴力停止容器
docker kill 容器ID# 重启容器
docker restart 容器ID# 删除容器
docker rm 容器ID
docker rm 'docker kill 容器ID'# 查看正在运行的容器
docker ps# 查看全部容器
docker ps -a# 在宿主机中进入容器(以下方式均可)
1. docker exec -it [容器ID/容器Name] bash
2. ssh root@127.0.0.1 -p 49165
3. docker attach [容器ID/容器Name]# 在宿主机中执行容器命令(不进入容器)
docker exec -i -t 容器ID ls(命令) # 退出Docker容器回到宿主机
exit# 导出容器
docker export 容器ID > xxx.tar# 导入容器(作为镜像)
docker import xxx.tar yyy/centos:latest# 查看容器性能
docker stats
如果出现错误:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
尝试下面2个命令
$ systemctl daemon-reload
$ sudo service docker restart
# 启动Docker服务
service docker start
systemctl start docker.service# 重启docker服务
service docker restart# 关闭docker服务
service docker stop# 其他命令docker inspect 容器id 查看各种资料# 打开当前所有未启动的docker容器
docker start 'docker ps -a -q'
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d3f9b23f77d centos:nexus “/usr/sbin/sshd -D” 17 seconds ago Up 16 seconds 0.0.0.0:8999->8889/tcp, 0.0.0.0:49177->22/tcp
左边是容器的端口,右边是宿主机的端口
创建容器默认只分配10g的硬盘空间,
如果稍有不慎就会导致硬盘弄满,然后各种问题就都来了。
除了需要定时删除垃圾文件之外,
我们还可以选择给Docker容器动态扩容硬盘大小。
镜像制作
由于在微服务等概念中,将某个类似于Spring Boot的那种Java服务(Jar包),
快速复制并部署分裂成N份,有助于快速扩容,增加整体算力,
因此,符合自定义环境的镜像制作就显得尤为重要。
手动
先下载一个Linux的JDK8安装包,例如:jdk-8u321-linux-x64.tar.gz,
启动CentOS容器,将JDK8安装包传入容器中并解压安装。
docker run -i -t -v /Users/alexyang/Downloads:/mnt/software centos /bin/bash
之后在容器中解压安装JDK,细节略。
当然之后可以在当前环境中添加其他组件或配置等等,细节略。
# 使用新终端,输入命令:
docker commit 容器ID alexyang/java# 查看新的镜像是否已经做好,输入命令:
docker imagesdocker run --rm alexyang/java /opt/jdk/bin/java -version
# --rm表示退出容器后自动删除
自动
为了更高效,我们可以使用Dockerfile脚本文件来制作Java镜像。
创建空白文件,命名为Dockerfile。
# 需要创建的镜像必须继承1个基础镜像
FROM centos# 设置作者
MAINTAINER "Alex Yang"<123@qq.com># 添加到容器中的文件,ADD命令会自动对压缩包进行解压
# COPY命令与ADD命令类似,只不过没有自动解压功能
# 需要被添加的文件与Dockerfile最好在同一目录中
ADD jdk-8u321-linux-x64.tar.gz /opt# 制作镜像时需要执行的命令,可以执行多条,用\合并成1条会更高效
RUN ln -s /opt/jdk1.8.0_321 /opt/jdk# 设置环境变量
ENV JAVA_HOME /opt/jdk
ENV PATH $JAVA_HOME/bin:$PATH# 容器启动时需要执行的命令,
# 注意!如果在使用docker run命令时已经指定了需要执行的命令,则会覆盖这里的命令
# CMD只能有0或1条,CMD可与ENTRYPOINT命令联合使用
# ENTRYPOINT与CMD类似,但不会被docker run中的末端命令所覆盖
CMD java -version# 还需要考虑修改成中国时区# 之后保存文件
# 读取Dockerfile脚本(先进入脚本所在目录),创建镜像
# -t为指定镜像名称,注意最后的"点",一定要写,代表当前目录
docker build -f /Users/alexyang/Downloads/Dockerfile -t alexyang/java .# 查看新建镜像
docker images# 检查镜像是否好用
docker run --rm alexyang/java
Dockerfile命令列表:
命令 | 描述 |
---|---|
FROM | 基础镜像来源 |
MAINTAINER | 维护者信息 |
ADD | 复制到容器中的文件(自动解压) |
COPY | 复制到容器中的文件(无法解压) |
USER | 运行RUN指令的用户 |
ENV | 环境变量,可以在RUN命令中使用 |
RUN | 镜像制作过程中需要被执行的命令 |
ENTRYPOINT | 容器启动时需要执行的命令(不可覆盖) |
CMD | 容器启动时需要执行的命令(可被覆盖) |
WORKDIR | 进入容器时的工作目录 |
EXPOSE | 被暴露的端口,端口映射 |
VOLUME | 挂载目录,目录映射 |
ONBUILD | 在构建时需要自动执行的命令 |
镜像管理
我们可以将制作好的镜像发送到公共Docker Registry(Docker Hub),
或发送到自己搭建的Docker Registry私服(Docker Hub开源版),
用于镜像分享,对于团队内部来说,私服的性价比更高,
此外,还可以将从公网下载的镜像先缓存到一个地方,待需要用的时候不用再下载一次。
公服:
- 注册账号并登录,https://hub.docker.com;
- 创建仓库Create Repository,免费用户只能创建1个私有仓库;
- 本地登录,docker login;
- 推送本地镜像,docker push alexyang/java;
- 查看已上传项目,https://hub.docker.com;
- 如果设为公以后镜像,则可以进行搜索,需要等待一段时间,docker search alexyang/java;
私服:
- 本地搭建Docker Registry,docker run -d -p 5000:5000 --restart always --name registry registry:2,其中,-d表示后台启动(作为后台服务),-p表示端口映射,左边为宿主机端口,右边为容器端口;
- 检查是否启动成功,http://localhost:5000/v2/;
- 修改镜像标签,docker tag 镜像ID localhost:5000/alexyang/java,修改的原因是默认推送的镜像前缀为docker.io;
- 将镜像推送到私服,docker push localhost:5000/clarkcc1988/java;
- 查看当前私服中的镜像仓库列表:http://localhost:5000/v2/_catalog;
可以将Docker Registry私服与Nginx相结合,部署在一台稳定的内部服务器上,
可以通过内网域名来访问,例如:docker-registry.xxx.com。
未完待续。
整合Spring Boot
一般情况下,我们使用Spring Boot来编写Java程序,
这些程序就是可以被访问的服务,
服务写好后,可以将项目打包成一个可执行的jar包,
我们可以将jar包与相关的运行环境封装成一个Docker镜像,
在构建Spring Boot项目时也生成Docker镜像,
并推送到Docker Registry中。
当需要发布服务时,只需要根据镜像启动相应的容器即可,
交付方式由原来的Java代码变成了Docker镜像。
编写POM.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version><relativePath/></parent><modelVersion>4.0.0</modelVersion><groupId>com.minghan</groupId><artifactId>xxx-demo</artifactId><version>1.0.0</version><packaging>jar</packaging><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><!-- 生成jar包插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.2.1.RELEASE</version></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>0.4.13</version><configuration><imageName>minghan/${project.artifactId}</imageName><dockerDirectory>./</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources><buildArgs><JAR_FILE>${project.artifactId}-${project.version}.jar</JAR_FILE><ARTIFACT_ID>${project.artifactId}</ARTIFACT_ID></buildArgs></configuration></plugin></plugins></build>
</project>
其中jar包的默认文件名为:project.build.finalName,等同于{project.build.finalName}, 等同于project.build.finalName,等同于{project.artifactId}-${project.version}
编写application.yml文件:
server:port: 8080
spring:application:name: xxxxx
编写Java文件:
@RestController
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@GetMapping("/demo")public String demo() {return "OK";}
}
在Spring Boot项目中创建Dockerfile,
放在项目的最外层,与src目录平行,
使用ADD命令将jar包添加到镜像中,并使用java -jar命令执行让jar包运行。
Dockerfile:
FROM alexyang/javaMAINTAINER "Alex Yang"<123@qq.com>#Defined by the Maven Build Arguments in POM File
ARG JAR_FILE# 将生成的jar包添加至镜像中
ADD target/${JAR_FILE} /usr/share/java-service.jar# 暴露端口
EXPOSE 8080# 启动Java服务
ENTRYPOINT java -jar /usr/share/java-service.jar
使用Spotify(非常有名的互联网音乐公司)的Maven插件来读取Dockerfile并构建镜像,
添加如下配置到pom.xml中:
<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>0.4.13</version><configuration><imageName>${project.groupId}/${project.artifactId}:${project.version}</imageName><dockerDirectory>./</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources><buildArgs><JAR_FILE>${project.artifactId}-${project.version}.jar</JAR_FILE></buildArgs></configuration>
</plugin>
- imageName:镜像完整名称,groupId为仓库名,artifactId为镜像名,version为标签名;
- dockerDirectory:Dockerfile所在目录;
- directory:需要复制的根目录,${project.build.directory}表示target目录;
- include:指定需要复制的文件(Maven打包后生成的jar文件);
之后,执行Maven命令:
clean package docker:build
如果需要讲构建好的镜像推送到Docker Registry中,则可以添加:
<properties><docker.registry>127.0.0.1:5000</docker.registry>
</properties># 之后将${docker.registry}作为imageName的前缀
<imageName>${docker.registry}/${project.groupId}/${project.artifactId}:${project.version}</imageName>
之后再执行Maven命令:
clean package docker:build docker:push
最后,运行Docker镜像,形成Docker容器:
# -m表示分配给容器的最大内存
docker run -i -t -d -p 8080:8080 -m 512m [镜像Name/镜像ID]
验证是否启动成功:
http://localhost:8080/demo
关于宿主机与容器之间互相访问IP+端口的问题:
容器只要暴露并映射了端口,用户就可以通过宿主机直接访问容器内的服务,
例如:宿主机IP:8080。
用户在容器内可以通过host.docker.internal来访问宿主机的服务。
https://blog.csdn.net/lzc4869/article/details/79670490
https://blog.csdn.net/weixin_39894255/article/details/110509213
https://www.cnblogs.com/pluto-0609/p/13646725.html
https://blog.csdn.net/aixiaoyang168/article/details/77453974
https://www.cnblogs.com/qdhxhz/p/9926293.html
https://medium.com/jinternals/build-docker-images-with-and-maven-901ec0d9de58
https://github.com/fabric8io/docker-maven-plugin/issues/432
https://ro14nd.de/simple-dockerfile-mode-dmp
https://www.cnblogs.com/m-finder/p/11592716.html
http://localhost:8008/sentinel-demo
http://localhost:5000/
http://localhost:9999/provider/sentinel-demo
https://blog.csdn.net/weixin_41830501/article/details/80926817
https://blog.csdn.net/mzyp/article/details/118765828
其他
遇到的问题:
- Docker容器关闭,再启动,会导致Docker容器的内部IP变化,如果配置了防火墙,会知道请求不到,必须要手动修改iptables;
- 在Docker容器中安装Nginx,在修改完配置文件之后重启命令不好用,必须要杀掉全部进程,再启动才可以;
Docker与Nginx
https://www.cnblogs.com/niceyoo/p/11546370.html
https://www.runoob.com/docker/docker-install-nginx.html
https://www.jianshu.com/p/acf41b9bb43b
https://www.cnblogs.com/lichmama/p/11366262.html
https://www.cnblogs.com/noodlerkun/p/11477545.html
腾讯万台规模的 Docker 应用实践
http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice/
整合Jenkins
Jenkins(jenkins.io)是非常著名的图形化持续集成工具,居然在经典美剧《硅谷》中有出境,
Jenkins可以进行自动化项目构建,可以节省重复、费时的工作,
还可以支持主从模式,以及生成单元测试报告,发送邮件等一系列操作,
我们可以随时从Jenkins上获得最新构建成功的包,并发布到生产服务器上。
我们也可以结合Jenkins将Docker镜像进行自动化发布。
Docker容器和jar包准备好后,可以自动发布测试环境,每个测试环境就是一个Docker容器,
测试阶段结束后,运维可以通过获取Docker镜像来将应用发布到生产环境。
自动化构建流程:
- 开发人员将代码提交到Git中;
- Jenkins定期从Git上拉取特定项目的代码;
- Jenkins使用Maven进行自动构建,并生成+启动相关的Docker容器,形成相应的测试环境;
- 测试人员在属于自己的测试环境下执行定义好的测试用例,达到部分功能测试自动化;
安装
Jenkins安装有很多种形式,Jenkins有2个版本,生产环境使用:稳定版Stable (LTS) 。
我们也可以直接通过Docker命令来安装:
docker run -d -p 8080:8080 -v ~/jenkins:/var/jenkins_home --name jenkins jenkinsci/Jenkins
未完待续
Windows版安装非常简单,会创建一个windows服务:
jenkins,默认的端口为8080。
如果需要修改可以在jenkins.xml中
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8081</arguments>
点击【安装默认插件】
安装插件
jenkins首页->系统管理->管理插件
务必要安装如下插件:
Maven Integration plugin
GitLab Plugin
创建任务
点击【新建】
输入item name:任何都可以
选择【构建一个maven项目 】并点击OK
源码管理:【选择Git】
输入Repository URL:
http://gitlab.xxx.cn/DEV/Xxx.git
[https的ok]
ssh的地址不好使。用项目git库的https地址:https:
https://git.oschina.net/sfmjp/beetl.git
Credentials选择验证方式:这里选择用户名密码的方式;
xxxx@xxx.com.cn
xxxxxx
点击add
Credentials: 需要选中刚才add的账号
下面是要构建的分支Branches to build:
默认是master分支;
需要根据情况进行选择源码库浏览器选择自己的,
如果不知道就自动。
5.构建触发器
勾选第一个:Build whenever a SNAPSHOT dependency is built
Build: Root POM :pom.xml
Goals and options:clean package -Dmaven.test.skip=true(woody写的是clean package -DskipTests -X)
6.Post Steps:打钩Run only if build succeeds 【只有在构建成功之后才触发】
7.构建后操作:增加构建后操作步骤:选择"Deploy war/ear to a container"
war/EAR files:target/hwj.war
Context path:访问项目的名字,可为ROOT
Containers:Add Container 选择 Tomcat7.x
Manager user name:admin
Manager password:admin123
Tomcat URL:就是要部署的tomcat的根访问路径:如http:127.0.0.1:8080/
tomcat需要的配置tomcat-user.xml:
8.最后下面点击"应用",保存。
如果使用tomcat来运行jenkins,把jenkins.war包放到tomcat的webapp目录下就可以了。
然后运行tomcat,访问jenkins的目录是:http://127.0.0.1:8080/jenkins/.然后进行相关的配置即可。
所有的配置都会保存在tomcat的jenkins目录中。也可以将其他app部署到该tomcat。
测试代码【带Runwith的代码不能放在源码目录,否则会打包报错】
1.pom.xml里需要加【好像会】:
bta
否则构建不打jar包或war包。
点击 立即构建
tomcat的内存必须要变大
打包成功之后war包会到:
C:\Users\xxx.jenkins\jobs\xxx\workspace\target\
Jenkins安装
下载资源
服务:http://mirrors.jenkins-ci.org/windows/latest
war:http://mirrors.jenkins-ci.org/war/latest/jenkins.war
要么运行war包,要么就扔到tomcat即可。
启动服务:java -jar jenkins.war 或者运行tomcat。
注:如果本地java命令跑,需要配置环境变量:
JENKINS_HOME = E:\jk_home
用于存放配置信息。
进入系统管理->管理插件->可选插件
在过滤时,输入:GIT plugin 与 Deploy to container Plugin (分开过滤,打钩)
然后点击直接安装按钮
3.配置基本的环境
进入系统管理->系统设置
3.1 jdk->jdk安装->
jdk别名 随便起
自动安装的勾去掉
maven别名随便起
自动安装的勾去掉
jdk: C:\Program Files\Java\jdk1.7.0_67
maven: D:\apache-maven-3.3.3
git home: C:\Program Files (x86)\Git\bin\git.exe
Local Maven Repository: local to workspace
Maven Configuration:要选择Default settings provider
File path : D:\apache-maven-3.3.3\woody-settings.xml
Default global settings provider:要选择Global settings file on filesystem
File path :同上
点击 保存
最好重启一下服务器
未完待续
其他
考虑镜像分层:
发布要分批,100个分5批,每批20个,先发20个,后面的等着。
如果不分批的话,整个系统会被卡住。
明翰Docker笔记V0.1(持续更新)相关推荐
- 明翰游记V1.7(持续更新)
文章目录 前言 韩国 韩国综合 泰国 `霓虹国` `青海+西藏` `米国` 墨西哥 蒂华纳 英国 香港 总结 附录 境外旅行注意事项 去过的地方 想去的地方 前言 把去过一些比较值得记录的地方记录下来 ...
- 明翰烹饪笔记V0.2(持续更新)
文章目录 前言 基础 中餐 初级 `西红柿炒鸡蛋` 韭菜炒鸡蛋 炒土豆片 西红柿蛋花汤 苏子叶(咸菜) 拌二丝(凉菜) 酸辣白菜 酸辣土豆丝 干煸豆角 豌豆炒肉 豇豆炒肉 中级 菜花炒肉V1 炒虾仁V ...
- Vue -- 指令【学习笔记】(持续更新)
Vue – 指令[学习笔记](持续更新) 记录了Vue第三天的学习笔记 v-show 注意,v-show 不支持 <template> 元素,也不支持 v-else. 带有 v-show ...
- 尚硅谷(李立超)——HTML5CSS3笔记总结【持续更新】
尚硅谷(李立超)--HTML5&CSS3笔记总结[持续更新] 本文适合前端菜鸟食用,小编自己整理的李立超老师视频的笔记,手打不易,那就望您每年快乐吧.逃) 一.进制 1.十进制(日常使用): ...
- AutoCAD2019+vs2019+C# 二次开发学习笔记day01(持续更新)
目录 一.新建项目 1.应用程序 目标框架 选择 4.7.2版 2.生成 目标平台选择x64 3.调试 启动外部程序 选择 acad.exe 二.添加autocad类库 三.如何运用命名空间 1.[C ...
- Docker热点文章链接 - 持续更新
docker技术的不断更新让我只能不停奔跑: Docker官方网站 Chris Richardson 微服务系列 DaoCloud博客 2016/6/23 (周四) 12:48 DockerCon 2 ...
- JavaScrip笔记心得(持续更新)
JavaScrip笔记心得 一.JavaScript简介 1.JavaScript 2.JavaScript使用方法 3.JavaScript 的核心构成 4.Javascript的代码注释 5. J ...
- SQL Server笔记心得(持续更新)
SQL Server笔记 一.数据库基础 二.企业管理器 三.查询分析器 四.SQL Server 数据管理 五.数据基本查询 六.数据高级查询 七.连接查询 八.查询的实际应用 一.数据库基础 1. ...
- LeetCode 从零单刷个人笔记整理(持续更新)
更新至2020.2.23 github:https://github.com/ChopinXBP/LeetCode-Babel 本人博客用于个人对知识点的记录和巩固. 用几乎所有可行的方法进行了实现和 ...
最新文章
- Redis中bitmap的妙用 1
- 傅里叶变换音频可视化_快速上手网易云音乐可视化
- idea调试debug技巧_这几个IDEA高级调试技巧,用了都说好!
- android studio 创建.9文件,自己使用Android studio创建.9(点9)图片
- 工业以太网交换机的专业术语
- python序列类型举例说明_Python(第八课,序列类型)
- atitit.提升开发效率---mda 软件开发方式的革命
- PHP并发IO编程实践
- 2021年即墨萃英中学高考成绩查询,2017即墨萃英中学青岛十九中录取分数线发布...
- 信号角度分析评估因子表现(无限资金回测模型)
- 一个网站 一个域名跟服务器吗,域名服务器与根服务器区别吗
- 玩玩直播,搭建一个流媒体服务器
- 使用ExtendSim进行医疗仿真
- PIKA trouble02 -- (error) ERR Syntax error, try CLIENT (LIST [order by [addr|idle]| KILL ip:port)
- 初秋进补 粥汤大对决
- “双一流”哈尔滨工程大学成立人工智能有关学院,打造一流学科群!
- 什么是手机证书和签名干什么用的
- Sentry 前端日志上报使用
- 毕业设计:基于STM32与机智云平台的远程控制智能家居系统
- 亚马逊、OZON、敦煌、MANO等跨境电商平台测评养号需要注意什么?
热门文章
- 微信公众号模板消息和图文消息的区别
- Compose Text + Canvas 写个验证码
- 钢骨大脑变成量子计算机,正义联盟成员战斗力排行榜,海王垫底超人排第二,第一无悬念...
- java计算机毕业设计星光在线光影系统源码+mysql数据库+lw文档+系统+调试部署
- div超出部分出现滚动条并修改滚动条的默认样式
- 尤雨溪亲笔:重头来过的 Vue 3 带来了什么?
- 如何让mac显示所有应用程序
- “快乐夕阳红”—老年人邻里互助营造小组
- 用U盘安装系统完全教程(zt)
- TensorFlow实战之Python基础知识笔记