文章目录

  • 前言
  • 什么是Docker
  • `镜像`
  • `容器`
  • `镜像制作`
    • 手动
    • 自动
  • 镜像管理
  • `整合Spring Boot`
    • 其他
  • 整合Jenkins
    • 安装
  • 其他

前言

在石器时代,如果我们要部署一个应用,
我们需要准备一台机器,这台机器上要有操作系统,
还要有一些依赖的软件环境(例如:JDK,环境变量,参数配置,系统参数优化,版本号等等),
之后再部署我们自己的应用程序,然后再启动我们的服务,供用户访问。

主要痛点:

  1. 硬件资源浪费,成本高;
  2. 部署效率低,前置步骤多,扩容麻烦;
  3. 一台机器可能部署多个应用,不同应用之间所依赖的环境可能产生冲突;

之后我们进化到了虚拟机时代,
我们通过隔离硬件资源的方式在一台机器上模拟出n个虚拟机,
n个虚拟机上可以部署n个应用,n个应用之间彼此隔离,互不打扰,
A应用hung住后,并不会影响到B应用,此外还可以减少资源浪费。

主要痛点:

  1. 虚拟机占用硬件资源高;
  2. 部署效率低,前置步骤多,扩容麻烦;
  3. 代码所对应的运行环境,在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优势:

  1. 以前一个服务器只有一个应用,资源浪费多,现在可以切出来多个容器,可以提升资源利用率;
  2. 提升工作效率,创建容器的操作非常快,可快速实现部署;
  3. 消耗硬件资源少;
  4. 应用隔离性,资源隔离性;
  5. 环境一致性;

Docker操作步骤:

  1. 下载并安装docker,有多种方式,如果是在自己电脑上玩,可以直接使用桌面版,很多功能都可以通过点鼠标而非敲命令执行,https://www.docker.com;
  2. 启动docker;
  3. 下载镜像;
  4. 创建并启动容器;
# 安装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开源版),
用于镜像分享,对于团队内部来说,私服的性价比更高,
此外,还可以将从公网下载的镜像先缓存到一个地方,待需要用的时候不用再下载一次。

公服:

  1. 注册账号并登录,https://hub.docker.com;
  2. 创建仓库Create Repository,免费用户只能创建1个私有仓库;
  3. 本地登录,docker login;
  4. 推送本地镜像,docker push alexyang/java;
  5. 查看已上传项目,https://hub.docker.com;
  6. 如果设为公以后镜像,则可以进行搜索,需要等待一段时间,docker search alexyang/java;

私服:

  1. 本地搭建Docker Registry,docker run -d -p 5000:5000 --restart always --name registry registry:2,其中,-d表示后台启动(作为后台服务),-p表示端口映射,左边为宿主机端口,右边为容器端口;
  2. 检查是否启动成功,http://localhost:5000/v2/;
  3. 修改镜像标签,docker tag 镜像ID localhost:5000/alexyang/java,修改的原因是默认推送的镜像前缀为docker.io;
  4. 将镜像推送到私服,docker push localhost:5000/clarkcc1988/java;
  5. 查看当前私服中的镜像仓库列表: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镜像来将应用发布到生产环境。

自动化构建流程:

  1. 开发人员将代码提交到Git中;
  2. Jenkins定期从Git上拉取特定项目的代码;
  3. Jenkins使用Maven进行自动构建,并生成+启动相关的Docker容器,形成相应的测试环境;
  4. 测试人员在属于自己的测试环境下执行定义好的测试用例,达到部分功能测试自动化;

安装

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(持续更新)相关推荐

  1. 明翰游记V1.7(持续更新)

    文章目录 前言 韩国 韩国综合 泰国 `霓虹国` `青海+西藏` `米国` 墨西哥 蒂华纳 英国 香港 总结 附录 境外旅行注意事项 去过的地方 想去的地方 前言 把去过一些比较值得记录的地方记录下来 ...

  2. 明翰烹饪笔记V0.2(持续更新)

    文章目录 前言 基础 中餐 初级 `西红柿炒鸡蛋` 韭菜炒鸡蛋 炒土豆片 西红柿蛋花汤 苏子叶(咸菜) 拌二丝(凉菜) 酸辣白菜 酸辣土豆丝 干煸豆角 豌豆炒肉 豇豆炒肉 中级 菜花炒肉V1 炒虾仁V ...

  3. Vue -- 指令【学习笔记】(持续更新)

    Vue – 指令[学习笔记](持续更新) 记录了Vue第三天的学习笔记 v-show 注意,v-show 不支持 <template> 元素,也不支持 v-else. 带有 v-show ...

  4. 尚硅谷(李立超)——HTML5CSS3笔记总结【持续更新】

    尚硅谷(李立超)--HTML5&CSS3笔记总结[持续更新] 本文适合前端菜鸟食用,小编自己整理的李立超老师视频的笔记,手打不易,那就望您每年快乐吧.逃) 一.进制 1.十进制(日常使用): ...

  5. AutoCAD2019+vs2019+C# 二次开发学习笔记day01(持续更新)

    目录 一.新建项目 1.应用程序 目标框架 选择 4.7.2版 2.生成 目标平台选择x64 3.调试 启动外部程序 选择 acad.exe 二.添加autocad类库 三.如何运用命名空间 1.[C ...

  6. Docker热点文章链接 - 持续更新

    docker技术的不断更新让我只能不停奔跑: Docker官方网站 Chris Richardson 微服务系列 DaoCloud博客 2016/6/23 (周四) 12:48 DockerCon 2 ...

  7. JavaScrip笔记心得(持续更新)

    JavaScrip笔记心得 一.JavaScript简介 1.JavaScript 2.JavaScript使用方法 3.JavaScript 的核心构成 4.Javascript的代码注释 5. J ...

  8. SQL Server笔记心得(持续更新)

    SQL Server笔记 一.数据库基础 二.企业管理器 三.查询分析器 四.SQL Server 数据管理 五.数据基本查询 六.数据高级查询 七.连接查询 八.查询的实际应用 一.数据库基础 1. ...

  9. LeetCode 从零单刷个人笔记整理(持续更新)

    更新至2020.2.23 github:https://github.com/ChopinXBP/LeetCode-Babel 本人博客用于个人对知识点的记录和巩固. 用几乎所有可行的方法进行了实现和 ...

最新文章

  1. Redis中bitmap的妙用 1
  2. 傅里叶变换音频可视化_快速上手网易云音乐可视化
  3. idea调试debug技巧_这几个IDEA高级调试技巧,用了都说好!
  4. android studio 创建.9文件,自己使用Android studio创建.9(点9)图片
  5. 工业以太网交换机的专业术语
  6. python序列类型举例说明_Python(第八课,序列类型)
  7. atitit.提升开发效率---mda 软件开发方式的革命
  8. PHP并发IO编程实践
  9. 2021年即墨萃英中学高考成绩查询,2017即墨萃英中学青岛十九中录取分数线发布...
  10. 信号角度分析评估因子表现(无限资金回测模型)
  11. 一个网站 一个域名跟服务器吗,域名服务器与根服务器区别吗
  12. 玩玩直播,搭建一个流媒体服务器
  13. 使用ExtendSim进行医疗仿真
  14. PIKA trouble02 -- (error) ERR Syntax error, try CLIENT (LIST [order by [addr|idle]| KILL ip:port)
  15. 初秋进补 粥汤大对决
  16. “双一流”哈尔滨工程大学成立人工智能有关学院,打造一流学科群!
  17. 什么是手机证书和签名干什么用的
  18. Sentry 前端日志上报使用
  19. 毕业设计:基于STM32与机智云平台的远程控制智能家居系统
  20. 亚马逊、OZON、敦煌、MANO等跨境电商平台测评养号需要注意什么?

热门文章

  1. 微信公众号模板消息和图文消息的区别
  2. Compose Text + Canvas 写个验证码
  3. 钢骨大脑变成量子计算机,正义联盟成员战斗力排行榜,海王垫底超人排第二,第一无悬念...
  4. java计算机毕业设计星光在线光影系统源码+mysql数据库+lw文档+系统+调试部署
  5. div超出部分出现滚动条并修改滚动条的默认样式
  6. 尤雨溪亲笔:重头来过的 Vue 3 带来了什么?
  7. 如何让mac显示所有应用程序
  8. “快乐夕阳红”—老年人邻里互助营造小组
  9. 用U盘安装系统完全教程(zt)
  10. TensorFlow实战之Python基础知识笔记