Docker

  docker说白了就是:环境打包

我们能用docker什么?

  1.如果配置好本地的linux环境交接给其他人,很麻烦,交接时要告诉他,装这个装那个,还可能出现问题,那我直接把这个环境放到docker中打包成镜像给他,原来的环境怎么样的还是怎么样,我们不能去纠结配置环境的问题,而留下更多的时间来解决其他问题

  2.虚拟化技术,很多就用了docker把一些已经装好的资源分配给云用户,让用户购买他们的服务等

帮助文档  

  文档:http://www.dockerinfo.net/document

docker三大要素

  镜像:模板(类似于'类')

  容器:镜像的实例(类似于'对象')

  仓库:存放镜像文件的地方,可能在云,可能在注册服务器上,最大的公开仓库是docker hub,国内阿里云就够用了

docker本身是一个容器运行载体,我们把我们要的配置程序和依赖包形成一个可以交付的运行环境,把这个环境打包成为一个image镜像文件,只有通过这个镜像文件才能生成docker容器,image文件可以看做容器的模板,docker根据image文件生成容器的实例,同一个image文件,可以生成多个同时运行的容器实例

安装:使用 yum 安装(CentOS 7下)

  目前docker要求centos7环境达到64位,系统内核版本3.10以上

cat /etc/redhat-release #查看linux内核版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
#移除之前版本 sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#安装一些必要的系统工具 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#添加软件源信息 sudo yum makecache fast
#更新 yum 缓存 sudo yum -y install docker-ce
#安装 Docker-ce sudo systemctl start docker
#启动 Docker 后台服务 docker version
#查看docker版本

docker的基本使用:

创建一个容器并执行命令

docker pull ubuntu:15.10  #拉取官方的乌版图
docker run ubuntu:15.10 /bin/echo "Hello world"
#docker执行docker的二进制文件
#run 结合docker一起使用,表示运行一个容器
#ubuntu:.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像
#/bin/echo "Hello world": 在启动的容器里执行的命令

运行交互式容器命令

docker run -i -t ubuntu:15.10 /bin/bash
#-i -t -t:在新容器内指定一个伪终端或终端。 -i:允许你对容器内的标准输入 (STDIN) 进行交互。

  运行exit命令或者使用CTRL+D

启动容器(后台模式)

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
#返回bf8e12e0315d51a7fb8ee2cc2b788f13b1a651aadbb9194e6ff74825fade3d0a,这个长字符串叫做容器ID,由64位组成,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么
docker ps ↓

CONTAINER ID:容器ID    NAMES:自动分配的容器名称

docker logs CONTAINER_ID /或者 NAME 命令,查看容器内的标准输出

docker logs amazing_cori
docker logs -f amazing_cori    #,-f参数可以像tail -f xxx.log一样输出
docker logs tail 3 amazing_cori  #查看倒数三行并持续输出

docker帮助命令

docker ps --help 查看docker ps的帮助
docker info #查看主机个人信息

查看容器

docker ps -a #查看所有容器
docker ps -l #查看最后一次创建的容器
docker ps   #查看正在使用的容器
docker ps -s #查看正在使用的容器,增加参数容器大小 

停止容器

docker stop amazing_cori

启动容器

docker start amazing_cori

运行容器实例

docker pull training/webapp #载入镜像,载入步骤,docker先回去local本地找你输入的镜像名称,如果没有则去你设置的镜像仓库pull拉去
docker run -d -P training/webapp python app.py
#-d 后台运行 -P将容器内部使用的网络端口映射到我们使用的主机上

  运行127.0.0.1:32768显示hello world!

查看dockor端口

  dockor port 容器名

  #或者可以加端口号docker port 容器名 5000 

查看应用程序配置信息

docker inspect 9ac    #查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息

创建容器

#该命令与run命令一样,但唯一区别是只是创建,不启动
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
docker create --name myrunoob nginx:1.3

kill命令

docker kill [OPTIONS] CONTAINER [CONTAINER...]
docker kill -s KILL nginx #杀掉nginx -s为向容器发送的信号

top命令

docker top 容器名称    #返回容器中的ps -ef 操作

 

移除容器

删除容器时,容器必须是停止状态,否则会报错,除非加-f

docker rm xxx
docker rm -f xxx  #强制删除
docker rm -f xxx01 xxx02 #删除多个
docker rm -f $(docker images -qa)  #删除所有容器

pause/unpause命令

docker pause :暂停容器中所有的进程。

docker unpause :恢复容器中所有的进程。

docker的镜像

  当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载

列出本机docker的所有镜像源

[root@rainbol ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 months ago .84kB
ubuntu 15.10 9b9cb95443b5 years ago 137MB
training/webapp latest 6fae60ef3446 years ago 349MB
  • REPOSITORY:表示镜像的仓库源

  • TAG:镜像的标签,指定不同的镜像标签对应不同的仓库源版本,如果在docker run时不指定镜像仓库源的版本,默认latest最后版本

  • IMAGE ID:镜像ID

  • CREATED:镜像创建时间

  • SIZE:镜像大小

docker images  -a  #列出本地所有镜像,含中间镜像层

          -q   #只显示当前镜像的IMAGE ID

          -qa   #列出本机所有镜像的IMAGE iD 可以做批处理操作,如删除

获取下载镜像  下载完成后就可以使用了

docker pull ubuntu:13.10
docker pull tomcat:7

查看镜像源

docker search httpd
docker search -s 1000 httpd  #查看点赞数超过1000的httpd源

删除镜像

docker rm images [images id]
docker rmi [images id]    #rm images 和 rmi 是一样的
docker rmi -f [images id]   #强制删除

docker镜像原理

  docker镜像基于联合文件系统组成,一层套一层的结构,比如我们要下载tomcat,原理是不同发行版本共用linux内核(rootfs).这是底层,之后下载精简版centos->之后下载jdk->最后才下载tomcat,所以说这一层一层的结构组成了tomcat,镜像删除后会留在主机缓存,第二次安装会比第一次快

端口映射

docker run -d -p : training/webapp python app.py
-p : 是容器内部端口绑定到指定的主机端口。左5000是实际服务器端口,右5000是容器5000端口 docker run -d -p 127.0.0.1:: training/webapp python app.py 也可以指定ip docker run -d -P training/webapp python app.py
-P 是容器内部端口随机映射到主机的高端口 默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp

如何进入一个已经创建了的容器

进入Docker容器比较常见的几种做法如下:

  • 使用docker attach
  • 使用SSH
  • 使用nsenter
  • 使用exec

1.首次创建进入容器时,让/bin/bash可用

docker run -i -t -d ubuntu:15.10 /bin/bash    #-d表示后台运行/bin/bash
docker attach xxx  #进入容器,xxx为容器id,直接进入容器启动命令的终端,不会启动新的进程

  当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作

2.使用SSH进入Docker容器(不推荐)

3.nsenter进入容器

$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz
$ tar -xzvf util-linux-2.24.tar.gz
$ cd util-linux-2.24/
$ ./configure --without-ncurses
$ make nsenter
$ sudo cp nsenter /usr/local/bin docker ps
sudo docker inspect -f {{.State.Pid}} xxx   #xxx为容器id拿到PID为1234 sudo nsenter --target 1234 --mount --uts --ipc --net --pid  #把PID为1234放进入就就可以进入容器了

4. exec命令  在容器中打开命令的终端,不会启动新的进程

docker ps    #拿到容器id为xxxxx
docker exec -it xxxxx /bin/bash  #-it的意义就是开启交互终端的意思
docker exec -it xxxxx ls  #执行或者查看结果指令,会返回给我们,但是不会进入容器内

  

退出容器

exit

docker安装nginx

#nginx的简单部署
docker pull nginx #安装nginx源
docker run --name nginx_test -P -d nginx #创建并运行nginx
nginx自定义部署
mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf #首先在目录建立nginx目录 docker run -d -p : --name runoob-nginx-test-web -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx
#-v为创建挂载,将本地的文件加载到容器中,需指定位置

文件下载与下载

docker cp 容器id:容器文件路径 宿主机路径  #从容器中下载到主机
dockor cp 宿主机路径 容器id:容器路径    #主机上传到容器

docker镜像加速

我们经常发现连接国外的镜像下载很慢,那就使用国内厂商的镜像加速,这里推荐阿里云镜像加速器,登陆阿里云账号后搜索容器镜像服务->镜像加速器->centos->到本机中如linux  $vi /etc/docker/daemon.json (如果没有的话就新建,默认就是没有的) -> 添加 {
"registry-mirrors": ["https://cz6ionug.mirror.aliyuncs.com"]
} 这个字典后保存->重启
sudo systemctl daemon-reload
sudo systemctl restart docker

docker查看容器中的进程

docker top PID

docker commit/pull使用

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a :提交的作者
-c :使用dockerfile指令来创建镜像
-m:提交时的文字说明
-p :在commit时,将容器暂停 docker commit -a "rainbol" -m "提交了" 65asd2a mydocker:v1 #提交到本地 docker push [OPTIONS] NAME[:TAG] options:--disable-content-trust :忽略镜像的校验,默认开启
docker push rainbol/mydocker:v1 #提交到dockerhub,需要登录账号

docker数据卷  

  容器与主机数据共通,实现持久化和数据共享

docker run -it -v /主机绝对路径:/容器绝对路径  镜像名        #建立数据挂载链接
-v:开启卷
docker inspect sad213d 找到 volumes生成了一个字典并且hostconfig:binds中生成字典说明链接成功了
此时主机和容器内这两个文件夹里面的数据资源共享共存,容器重启后数据同步 docker run -it -v /主机绝对路径:/容器绝对路径:ro 镜像名 #ro(read only只读) 只允许主机单向的操作,容器只能进行读操作 在docker inspect sad213d命令中volumesRw会变成false

    没有指定宿主机docker默认会添加一个路径文件,可在inspect命令中查看

dockerfile形式添加数据卷

  由于docker不支持docker run -it -v /主机绝对路径1:/容器绝对路径1 -v  /主机绝对路径2:/容器绝对路径2  存在迁移性

  引入dockerfile,建立更多的容器卷    

docker数据卷容器

  说白了就是主容器与副容器的挂载链接,实现资源共享

docker run -it --name test1 tomcat    #建立主容器
docker run -it --name test2 --volumes-from test1 tomcat # --volumes-from 被继承容器名,test2继承test1的所有,之后主容器和副容器的数据卷同步共享
容器之间配置信息的传递,数据卷的生命周期一直持续到其没有容器使用为止,也就说在无限被继承中,无论哪个容器挂了,其资源共享,配置信息依旧存在

    1.构建可执行的shell脚本

FROM tomcat
VOLUME ["/data01","/data02"]
CMD echo "finished,----success"
CMD /bin/bash

    2.build生成镜像  

docker build  -f /dockerfile文件绝对路径 -t rainbol/mytomcat /存放目录    #-f指定dockerfile路径 -t命名空间/镜像名称
#如果build的dockerfile文件在当前目录可以不用写'-f dockerfile文件路径'

dockerfile的使用

  dockerfile就是用来构建docker镜像的构建文件,说白了就是个执行参数和命令的脚本而已

  dockerfile文件规则:1.保留字指令必须大写,后面至少一个参数

            2.命令从上到下执行

            3.#表示注释

            4.每条指令都会创建一个新的镜像层,并对镜像进行提交(如FROM centos,加第一层进行,如果要再加其他的,就再加,这就是层层累加)

  FROM

#第一条指令必须为 FROM 指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次)

FROM <images>   
FROM <image>:<tag>  
FROM centos 
FROM scratch #基础镜像->祖先源镜像

  MAINTAINER

    维护者信息(名字和邮箱)

  RUN

    容器运行时需要的额外命令

RUN <command>
RUN chmod -R 777 tomcat-7 RUN ["executable", "param1", "param2"] #使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]
RUN ["/bin/bash", "-c", "echo hello"]

  EXPOSE 

EXPOSE <port> [<port>...]
EXPOSE 8080 #告诉 Docker 服务端容器暴露的端口号

  WORKDIR

WORKDIR /usr/local    #在创建后终端登录到容器后默认进入的工作目录

  ENV

ENV <key> <value>    #设置环境变量
ENV MY_TEST /usr/local
WORKDIR $MY_TEST

  COPY

格式为 COPY <src> <dest>。
复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>。
当使用本地目录为源目录时,推荐使用 COPY。

  ADD

格式为 ADD <src> <dest>。
该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。
说白了add = copy + 自解压

  CMD

支持三种格式

CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。 如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

  ENTRYPOINT

两种格式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中执行)。
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。

说白了cmd是多个会被覆盖,而entrypoint多个会追加

  ONBUILD

ONBUILD [INSTRUCTION]
ONBUILD RUN echo '我被继承了--------ok'
ONBUILD ADD a.txt /usr/local

    配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令

案例1:

  重构centos镜像写一个dockerfile,初始路径为/usr/local,安装ifconfig,vim指令

#/mydocker/dockerfile
FROM centos
MAINTAINER rainbol<xxx.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y vim
RUN yum -y net-tools
EXPOSE 80
CMD /bin/bash

  进入mydocker目录,运行

docker build -t rainbol/mycentos .  #构建镜像

  

docker run -it rainbol/mycentos /bin/bash  #运行

docker history ID    # 查看docker历史构建信息,下图可以看到我们刚刚构建的信息

案例2:

  重构centos镜像写一个dockerfile,初始路径为/usr/local,功能能访问ip.cn返回当前ip地址

#/mydocker/dockerfile2
FROM centos
MAINTAINER rainbol<xxx.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install curl
ENTRYPOINT ["curl","-s","https://ip.cn"]  #注意这里参数不能为单引号,否则会报错
EXPOSE
CMD /bin/bash
docker build -f /mydocker/dockerfile2 -t rainbol/mycentos:1.1 .  

  

docker run rainbol/mycentos:1.1 -i
#-i为curl请求头的参数,此时会在ENTRYPOINT追加参数

案例3:

#/mydocker/dockerfile_test01
FROM centos
MAINTAINER rainbol<xxx.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
ONBUILD RUN echo '我居然被继承了'
EXPOSE

  先构建上面dockerfile为test01  

#/mydocker/dockerfile_test02
FROM test01
MAINTAINER rainbol<xxx.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
EXPOSE

  当构建上面mydockerfile时返回,可以看到执行了ONBUILD中的命令

案例4  自建tomcat服务器

1.在指定路径下存放tomcat.tar包和jdk,dockerfile文件,c.txt自建文档

2. 编写dockerfile脚本

#之前下载了centos,所以这里执行它
FROM centos
#命名作者
MAINTAINER rainbol<xxx@qq.com>
#拷贝c.txt到容器中重命名一个文档(为了测试,意义不是很大)
COPY c.txt /usr/local/cincontainer.txt
#将jdk复制到容器指定位置,注意ADD指令可以自动解压缩
ADD openjdk-9.0.4_linux-x64_bin.tar.gz /usr/local/
#将tomcat复制到容器指定位置
ADD apache-tomcat-9.0..tar.gz /usr/local/
#下载vim
RUN yum -y install vim #设置默认进入路径
ENV MYPATH /usr/local
WORKDIR $MYPATH
#设置环境变量
ENV JAVA_HOME /usr/local/jdk-9.0.
ENV CATAINA_HOME /usr/local/apache-tomcat-9.0.
ENV CATAINA_BASE /usr/local/apache-tomcat-9.0.
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATAINA_HOME/bin
#设置tomcat容器对外端口
EXPOSE
#执行启动和查看打印日志命令
CMD /usr/local/apache-tomcat-9.0./bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0./logs/catalina.out

3.build构建镜像

docker build -f /mydocker/dockerfile_test01 -t test01  .

4.启动镜像

docker run -d -p : --name newmt9 -v /mydocker/rainbol/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0./webapps/test -v /mydocker/rainbol/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0./logs --privileged=true mt9

#两个-v表示添加两个容器与主机挂载,一个是放应用或服务,一个是存放日志
#--privileged=true 有可能会出现权限不足,那加这个

5.测试  docker ps

有页面返回说明启动成功

安装mysql:

docker pull mysql:5.6  #选择相对稳定的5.6版本
docker run -p : --name mysql -v /
docker run --name mysql56 -p : -v /mydocker/rainbol/mydockerfile/mysql5./conf:/etc/mysql/conf.d -v /mydocker/rainbol/mydockerfile/mysql5./logs:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= -d mysql:5.6
docker exec -it mysql56 /bin/bash

安装jenkins

  https://www.jianshu.com/p/12c9a9654f83

安装redis:

docker pull redis:3.2
docker run -p : -v /mydocker/rainbol/mydockerfile/redis3.2/data:/data -v /mydocker/rainbol/mydockerfile/redis3./conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes docker exec -it 0caf0428 redis-cli #连接容器内的redis客户端

发布

  本地的镜像发布到阿里云上 

.镜像生成
[root@rainbol redis3.]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dc2e60009bcb mt9 "/bin/sh -c '/usr/lo…" hours ago Up hours 0.0.0.0:->/tcp newmt9 [root@rainbol redis3.]# docker commit -a rainbol -m 'newtomcat' dc2e60009bcb newtomcat1. [root@rainbol redis3.]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
newtomcat1. latest 15ce08832084 minutes ago 728MB

 https://cr.console.aliyun.com进入阿里云镜像服务,创建完仓库

  第二行的镜像版本号是为你想传到阿里云仓库的版本号

    第三行的镜像版本号和第二行你刚刚填的镜像版本号保持一致

   第三步推送时间比较长要等很久

拉取阿里云的镜像

  私人:复制地址  docker pull 仓库地址:版本号  #注意可能出现多个版本,加版本号选择你想要的版本

  公开:  在镜像中心的镜像搜索进行下载镜像    docker pull 仓库地址:版本号  #注意可能出现多个版本,带版本号选择你想要的版本

docker镜像打包  如果不存在云仓库,因为云上上传和下载很慢,或者是公司没网,怎么办呢,可以使用镜像打包的方法 

  docker save

docker save [OPTIONS] IMAGE [IMAGE...]
docker save -o 要保存的文件名 要保存的镜像id
docker save -o /usr/local/nginx.tar jda090d1

  docker load

docker load [OPTIONS]
-i :指定导出的文件。
-q :精简输出信息。 docker load < /usr/local/nginx.tar
docker load -i /usr/local/nginx.tar -q

版权声明:本文原创发表于 博客园,作者为 RainBol本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

Docker初识笔记的更多相关文章

  1. Docker学习笔记 — 配置国内免费registry mirror

    Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror

  2. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

  3. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

  4. docker~学习笔记索引

    回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...

  5. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  6. docker学习笔记(一)—— ubuntu16.04下安装docker

    docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...

  7. Docker入门笔记

    Docker入门笔记 随笔记录初学Docker遇到的问题, 以免下次再犯. 本机系统Ubuntu18.04 安装 Docker有2个版本 Community Edition (CE) 社区版(免费) ...

  8. Docker入门笔记(1)

    Docker入门笔记(1) 1.安装Docker yum -y install docker-ce 2.查看Docker版本 [root@localhost ~]# docker -v Docker ...

  9. Docker学习笔记总结

    Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/   一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...

随机推荐

  1. python:pytest中的setup和teardown

    原文:https://www.cnblogs.com/peiminer/p/9376352.html 之前我写的unittest的setup和teardown,还有setupClass和teardow ...

  2. tp5之服务器不显示验证码

    今天在使用tp框架的时候遇到的一个bug,前辈们早已有解决方法,遇到了做个笔记 TP5框架,自带的验证码在本地localhost运行是没问题的,可以正常显示,如图: 然后,把框架拿到服务器是去运行,验 ...

  3. Mybatis获取数据库自增主键

    一般我们都为将表中主键列设置为自增,当我们执行插入语句时,比如这样 //测试添加 Employee employee = new Employee(null, "jerry4",n ...

  4. QT5 添加resource的方法

    在工程中右键点击xxx.qrc文件,选择"open in editor",然后可以用"Add ""Remove"按钮进行资源文件的添加.

  5. Jackson 动态Bean

    为了解决json字符串有很多属性, 但是不必每个属性都映射到pojo的属性. @JsonProperty : 标记一个方法是一个属性的getter或setter方法, 也即把java属性和json域关 ...

  6. P-R曲线深入理解

    P-R曲线就是精确率precision vs 召回率recall 曲线,以recall作为横坐标轴,precision作为纵坐标轴.首先解释一下精确率和召回率. 解释精确率和召回率之前,先来看下混淆矩 ...

  7. 【LeetCode】 #9:回文数 C语言

    目录 题目 思路 初步想法 进一步想法 最后想法 总结 最近打算练习写代码的能力,所以从简单题开始做. 大部分还是用C语言来解决. @(解法) 题目 判断一个整数是否是回文数.回文数是指正序(从左向右 ...

  8. springboot 配置elasticsearch Java High Rest Client

    前提声明 在新版本的spring boot中逐渐放弃了对Spring Data Elasticsearch的支持,所以不推荐使用,使用ES官方推出的Java High Rest Client. 引入依 ...

  9. SpringCloud之Hystrix集群及集群监控turbine

    目的: Hystrix集群及监控turbine Feign.Hystrix整合之服务熔断服务降级彻底解耦 集群后超时设置 Hystrix集群及监控turbine 新建一个springboot工程mic ...

  10. yii2 发送邮件 yii\swiftmailer\Mailer

    Yii2 中发送邮件 yii\swiftmailer\Mailer 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath ...