1.容器简介

Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的cgroup,namespace,Union FS等技术,对应用进程进行封装隔离,并且独立于宿主机与其他进程,这种运行时封装的状态称为容器。

Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。

容器不就是虚拟化吗

是,但也不竟然。

虚拟化使得许多操作系统可同时在单个系统上运行。

容器则可共享同一个操作系统内核,将应用进程与系统其他部分隔离开。

官方文档

https://docs.docker.com/install/linux/docker-ce/centos/

2.安装

2.1卸载旧版本

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2.2替换阿里云yum源

curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.3配置宿主机网卡转发

## 配置网卡转发,看值是否为1
sysctl -a |grep -w net.ipv4.ip_forward
net.ipv4.ip_forward = 1 ## 若未配置,需要执行如下
cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
EOF
sysctl -p /etc/sysctl.d/docker.conf

2.4安装docker-ce

默认是安装最新稳定版本

yum clean all && yum makecache
## yum安装
yum install -y docker-ce
## 查看源中可用版本
yum list docker-ce --showduplicates | sort -r
## 安装指定版本
##yum install -y docker-ce-18.09.9

2.5配置阿里云镜像加速

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://u7vs31xg.mirror.aliyuncs.com"]
}
EOF

2.6启动docker服务

systemctl start docker  #启动docker  stop restart
systemctl enable docker #开机启动docker systemctl daemon-reload
systemctl status docker #查看docker状态

2.7卸载

1. systemctl stop docker

2. systemctl diable docker

3. yum remove docker-ce

4. rm -rf /var/lib/docker

3.体系

4.镜像管理

4.1镜像获取

方式一 docker hub 获取 Dockerfile

新建一个文件夹,新建一个文件 Dockerfile

执行docker build 进行构建:

docker build -t centos:v1

使用v1版本的镜像启动一个容器:

docker run -d -p 80:80 centos:v1  -g "daemon off;"

方式二

docker search centos

下载镜像

docker pull centos:7.5  #冒号之后是版本,不加默认选择最新稳定版

查看新构建的镜像:

docker images

有/的是 别人写的 没有/是官方的

4.2标识镜像的唯一性方法

方法1

REPOSITORY:TAG

如,centos:7.5.1804

方法2

IMAGE ID (sha256:64位的号码,默认只取12位)

docker image ls --no-trunc  #查看详细信息

4.3镜像详细查看

docker image inspect   镜像名:TAG
docker image inspect   ID

4.4查看镜像ID

docker image ls -q

4.5镜像的导入和导出

docker image save ID(镜像名:版本号)  >/www/centos.tar #-o
docker image rm -f ID
docker image load -i /www/centos.tar

改名

docker image tag  ID 镜像名:版本号

4.6镜像删除

docker image  rm  -f ID
docker image rm -f `docker image ls -q` #删除所有的

5.容器管理

5.1交互式容器

docker  run  -it 0f3e07c0138f  #-i: 交互式操作。  -t: 终端。

查看正在启动的容器

docker ps  # -a 查看所有容器
CONTAINER ID  IMAGE        COMMAND  CREATED   STATUS   PORTS        NAMES
7e2c15223ea8 0f3e07c0138f "/bin/bash" 11 minutes ago Up 11 minutes kind_dijkstra
CONTAINER ID    #容器的唯一标识码

NAMES     #容器的名字不能重复 可以手动生成
docker run -it --name="zbb" 0f3e07c0138f COMMAND #启动容器运行的命令 STATUS #运行状态

5.2守护式容器

docker run -d --name='zxy' nginx:1.14 #-d  以守护式启动,不手动结束不会停止
#默认 没有镜像 会自动下载 docker container inspect zxy #查看容器详细信息 container默认可以不写

5.3两类容器使用场景

交互式一般用于测试 ,工具,临时任务 用完退出就停止了,但是不会删除,以后会越来越多

docker rm -f kind_dijkstra  #删除容器
run  -it  --name='zbbdentos'  --rm  0f3e07c0138f #加rm使用完会自动删除

守护式,如tomcat等软件

docker默认只能内部访问,必须提供端口才能对外访问

docker run -d -p 8080:80 --name='zbb_nginx' nginx:1.14

5.4docker启停

守护式容器

docker stop zxy
docker start zxy
docker attach zbb #进入容器

交互式

docker stop zxy
docker start -i zxy #不加-i连接不进去....只能输入以下命令菜能进入
docker attach zbb
## 资源限制,-cpuset-cpus用于设置容器可以使用的 vCPU 核。-c,--cpu-shares用于设置多个容器竞争 CPU 时,各个容器相对能分配到的 CPU 时间比例。假设有三个正在运行的容器,这三个容器中的任务都是 CPU 密集型的。第一个容器的 cpu 共享权值是 1024,其它两个容器的 cpu 共享权值是 512。第一个容器将得到 50% 的 CPU 时间,而其它两个容器就只能各得到 25% 的 CPU 时间了。如果再添加第四个 cpu 共享值为 1024 的容器,每个容器得到的 CPU 时间将重新计算。第一个容器的CPU 时间变为 33%,其它容器分得的 CPU 时间分别为 16.5%、16.5%、33%。必须注意的是,这个比例只有在 CPU 密集型的任务执行时才有用。在四核的系统上,假设有四个单进程的容器,它们都能各自使用一个核的 100% CPU 时间,不管它们的 cpu 共享权值是多少。
$ docker run --cpuset-cpus="0-3" --cpu-shares=512 --memory=500m nginx:alpine

5.5容器的连接

docker attach zbb #进入容器

子进程的方式登录

[root@docker ~]# docker  exec  -it zbb /bin/bash
exec进入调试 ,这样ctrl + D exit 就不会退出容器
#原理是又开了一个 /bin/bash

容器的后台及前台运行

  1. ctrl + p ,q
  2. attach 调用到前台

5.6删除所有容器

docker rm -f `docker ps -a -q`

5.7容器的网络访问

docker启动的所有容器都是可以内部访问的

docker run -d -p 8080:80 --name='zzb_n1' nginx:1.14
将nginx的80映射到宿主的8080上

映射多个端口

docker run -d -p 8080:80 --name='zzb_n2' nginx:1.14

5.8docker管理命令

docker top zzb_n1  #查看进程

UID PID PPID C STIME TTY

root 9923 9907 0 20:27 ? ss nginx -g daemon off;

101 9955 9923 0 20:27 ? ss

docker logs  zzb_n1
#-f 持续监控日志
#-t 显示详细时间
#--tail 10 只显示10行

23.112.18.xx - - [04/Nov/2019:12:27:17 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36" "-"

6.数据卷使用

在nginx镜像中无法编辑

在外部创建好文件 cp到对应的目录中 ,手动交互数据

docker cp index.html n1:/usr/share/nginx/html
docker cp n1:/usr/share/nginx/html/index.html ./
#但是这样太麻烦了

Volume实现宿主和容器相通

docker run -d  --name='n1' -p80:80 -v /html:/usr/share/nginx/html   nginx:1.14

作用数据持久化

容器挂载容器 用于批量挂载相同目录的容器,

在集中管理集群中,大批量的容器都需要挂载相同的多个数据卷时,

docker run -d  -p 81:80 --volumes-from  n1  --name "nn1" nginx:1.14

进入

docker exec -it nn1 /bin/bash   #挂载的所有文件同步

7.制造本地局域网yum源

7.1安装

yum install -y vsftpd

7.2启动

systemctl   start vsftpd

7.3上传系统镜像

centos7 的镜像上传到服务器

7.4配置

mkdir -p /var/ftp/centos.7.5
mount -o loop /mnt/centos.7.5.iso /var/ftp/centos.7.5
cat >/etc/yum.repos.d/ftp_7.repo <<EOF
[ftp]
name=ftpbase
baseurl=ftp://172.168.2.2/centos7.5
enabled=1
gpgcheck=0
EOF

l浏览器访问,就可以查看

ftp://172.168.2.2/centos7.5

8.镜像制作

获取镜像

docker pull centos:6.9
docker run -it --name='old_centos'

在容器中安装ssh #必须要启动安装密钥对

yum install openssh*
/etc/init.d/sshd start

在宿主机上ssh连接测试

ssh 172.17.0.2

8.1基于容器制作镜像

8.11制作阿里云ECS

[root@docker ~]# docker commit  old_centos  zbb/centos6.9sshd:v1
sha256:4ed573ae9c3b71c2aa61bf44d1cbeabc9e96d92d57c1539fc7eb0e6fd8c42b7b

查看已经制作成功

[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zbb/centos6.9sshd v1 4ed573ae9c3b 42 seconds ago 352MB
centos v1 0f3e07c0138f 7 weeks ago 220MB
nginx 1.14 295c7be07902 7 months ago 109MB
centos 6.9 2199b8eb8390 8 months ago 195MB

用这个镜像创建一个容器

[root@docker ~]# docker run  -d --name=sshd -p 200:20 4ed573ae9c3b  /usr/sbin/sshd  -D

连接测试

[root@docker ~]# ssh 172.17.0.2
root@172.17.0.2's password:

8.12构建LAMP环境

启动容器

docker run -it --name='lamp' -v /var/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html centos:6.9

安装lamp

[root@5a110938e7a1 /]# yum install -y  openssh* mysql mysql-server httpd php php-mysql

软件初始化

/etc/init.d/sshd  start
echo '123' |passwd root --stdin

mysql初始化

/etc/init.d/mysqld start
mysql> grant all on *.* to root@'%' identified by '123';
mysql> create  database discuz   charset utf8;

apache初始化

[root@5a110938e7a1 mysql]# /etc/init.d/httpd start 

根据容器制作镜像

[root@docker ~]# docker commit    5a110938e7a1  zbb/centos_lamp:v1

根据镜像启动容器

docker run -it --name='lamp-cs' -p8888:80 -v /var/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html ad3758bb4262

启动

[root@docker ~]# /etc/init.d/httpd start
[root@docker ~]# /etc/init.d/mysqld start

页面访问ip:8888

创建启动脚本

cd  /opt/vol/html  #映射目录

vim init.sh

#!/bin/bash
/etc/init.d/mysqld start
/etc/init.d/httpd start
/usr/sbin/sshd -D

然后启动容器,运行脚本,就自启动了

docker run -it --name='lamp-cs2' -p8888:80 -v /var/vol/mysql:/var/lib/mysql -v /opt/vol/html:/var/www/html ad3758bb4262  /var/www/html/init.sh

centos7问题

ssh

 docker run -it --name=75sshd centos:7.5.1804

yum install -y openssh*
mkdir /var/run/ssh
echo 'UseDNS no' >> /etc/ssh/sshd_config
sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
echo 'root:123' |chpasswd
/usr/bin/ssh-keygen -A
docker commit  old_centos  zbb/centos7.5sshd:v1

[root@docker ~]# docker run  -d --name=sshd -p 200:20 4ed573ae9c3b  /usr/sbin/sshd  -D
#ssh测试

8.2基于文件创建镜像

#centos-6.9sshd

#FROM centos:6.9

FROM 2199b8eb8390  #获取镜像

RUN yum install -y openssh*  #执行命令
RUN /etc/init.d/sshd start && /etc/init.d/sshd start && echo '123' |passwd root --stdin
EXPOSE 22 #暴露端口
CMD ["/usr/sbin/sshd","-D"] #结束的最后执行的命令

根据镜像创建镜像

docker image  build  -t  'zbb/centos6.9-sshdv3'  ./

创建容器

docker run -d 897a471638e5

查看容器的ip

docker inspect c10335410d7c

连接测试

ssh 172.17.0.2

8.3根据dockerfile 创建LAMP

#centos-lnmp

FROM centos:6.9

#FROM 2199b8eb8390  #获取镜像

RUN yum install -y  openssh* mysql mysql-server httpd php php-mysql

RUN /etc/init.d/sshd  start && echo '123' |passwd root --stdin
#&& /etc/init.d/mysqld start && /etc/init.d/httpd start #RUN mysql -e "grant all on *.* to root@'%' identified by '123';create database discuz charset utf8;" COPY index.php /var/www/html
COPY init.sh /
# ADD bbs.tar.gz /var/www/html 会自动解压 还可以传url的文件 EXPOSE 22
EXPOSE 80
EXPOSE 3306 #暴露端口
CMD ["/bin/bash","/init.sh"] #结束的最后执行的命令
#VOLUME ['/var/www/html','/data/mysql/data'] 自动挂载卷
#WORKDIR 进入目录相当于cd
#ENV AA_DIR = '/var/www/html' 申明变量 ${AA_DIR}调用
#ENTRYPOINT 和CMD一样 但是不会被命令行的命令 替换掉
#USER 指定用户

vim index.php

<?php
phpinfo();
?>

vim init.sh

#!/bin/bash
echo '123' |passwd root --stdin
/etc/init.d/mysqld start
mysql -e "grant all on *.* to root@'%' identified by '123';create database discuz charset utf8;"
/etc/init.d/httpd start
/usr/sbin/sshd -D

构建镜像

docker build  -t 'zbb:lnmp' -f Dockerfile

制作容器

docker run  -d  --name='zbb_lnmp'  -p33:22 -p34:80  -p3306:3306  zbb/lnmp

测试 浏览器访问端口 服务器telnet 测试端口开放性

9.Docker构建私有registry

搭建docker仓库

1.启动

docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry
--restart=always  #每次重启doker 容器会自动重启也可以在配置文件中 配置
"live-restore":true

2.修改配置为文件

不改配置文件,默认找的是docker hub

vim /etc/docker/daemon.json

"insecure-registries": ["127.0.0.1:5000"]

3.重启docker

systemctl  restart docker

4.上传镜像

docker tag nginx:1.14 127.0.0.1:5000/zbb/nginx:v1
docker push 127.0.0.1:5000/zbb/nginx

5.测试

删除源镜像,从本地上pull

docker image  rm -f 295c7be07902
docker pull 127.0.0.1:5000/zbb/nginx:v1

6.本地仓库加安全认证

yum install  httpd-tools -y
mkdir /opt/registry-auth/ -p
htpasswd -Bbn zbb 123 > /opt/registry-auth/htpasswd

重启

docker rm -f `docker ps -aq`

docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry

上传

docker tag centos:6.9 127.0.0.1:5000/zbb/centos:v1
docker login 127.0.0.1:5000
docker push 127.0.0.1:5000/zbb/centos:v1

10.habor实现图形化register

1.安装

yum -y install epel-release
yum install -y docker-compose

2.下载harbor

wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz

3.上传到/opt下

tar -zxvf harbor-offline-installer-v1.8.0.tgz

4.修改harbor.cfg配置文件

vim harbor.yml

#修改如下几项
hostname = 你本机的IP
harbor_admin_password = admin账号的密码

5.编译

./install.sh

ip地址访问 测试

6.加入配置文件

vim /etc/docker/daemon.json

{
"registry-mirrors": ["https://u7vs31xg.mirror.aliyuncs.com"],
"insecure-registries": ["127.0.0.1","129.2x.16.25x"],
"live-restore": true
}

7.重启

systemctl restart   docker.service 

8.新建项目

9.项目推送拉取

docker login  127.0.0.1
docker tag centos:6.9 127.0.0.1/zbb/centos:v2
docker push 127.0.0.1/zbb/centos:v2 docker image rm -f 127.0.0.1/zbb/centos:v2
docker pull 127.0.0.1/zbb/centos:v2

11.Docker网络类型

1.查看支持网络类型

docker network ls

[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
7e9072c9bb16 bridge bridge local
7921b218278b harbor_harbor bridge local
9643c2e650a2 host host local
efabf4ae7459 none null local

2.测试使用各类网络类型

none : 无网络模式

bridge : 默认模式,相当于NAT

host : 公用宿主机Network NameSpace(不隔离网络资源)

container : 与其他容器公用Network Namespace(两个容器共用一个端口)

docker  run  -it  --name="c_h13"  --network=host  centos:6.9 /bin/bash

3.Docker跨主机网络

4.macvlan

docker自带无需安装 2台服务器

docker network create  --driver macvlan --subnet=10.0.0.0/24 --gateway=10.0.0.1 -o parent=eth0 macvlan_1
#docker network rm macvlan_1 删除
#docker  run -it --network macvlan_1  --ip=10.0.0.12  busybox  #1
docker run -it --network macvlan_1 --ip=10.0.0.13 busybox #2

sudo docker rm $(docker ps -qf status=exited)

5.overlay

容器在两个跨主机进行通信的时候,是使用overlay network这个网络模式进行通信;如果使用host也可以实现跨主机进行通信,直接使用这个物理的ip地址就可以进行通信。overlay它会虚拟出一个网络比如10.0.2.3这个ip地址。在这个overlay网络模式里面,有一个类似于服务网关的地址,然后把这个包转发到物理服务器这个地址,最终通过路由和交换,到达另一个服务器的ip地址。

1.基本配置

两台服务器host1

vim /etc/docker/deamon.json

{
"registry-mirrors": ["https://u7vs31xg.mirror.aliyuncs.com"],
"insecure-registries": ["127.0.0.1:5000",],
"live-restore": true,
"hosts":["tcp://0.0.0.0:2376","unix://var/run/docker.sock"],
"cluster-store": "consul://host1_ip:8500",
"cluster-advertise": "host1_ip:2376"
}

host2

{
"registry-mirrors": ["https://u7vs31xg.mirror.aliyuncs.com"],
"insecure-registries": ["127.0.0.1:5000",],
"live-restore": true,
"hosts":["tcp://0.0.0.0:2376","unix://var/run/docker.sock"],
"cluster-store": "consul://host1_ip:8500",
"cluster-advertise": "host2_ip:2376"
}

会报错,都要改一下配置

vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd

都重启

然后host1安装

docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

浏览器输入 ip:8500测试

2.创建overlay网络

host1

docker network create -d overlay zbb
docker run -it --network zbb --name zbb01 busybox:latest /bin/sh

host2

docker network ls #发现也有了
docker run -it --network zbb --name zbb02 busybox:latest /bin/sh / # ping zbb01 #通了

至此完成配置

dcoker network connect zbb zbb05

6.直接路由模式

没做过 网上一位大神写的很好 这是博客地址

https://www.jianshu.com/p/477a62165376

12.抓包分析

抓包演示

我们先想一下,我们要抓哪个网卡的包

  • 首先访问宿主机的8088端口,我们抓一下宿主机的eth0

    $ tcpdump -i eth0 port 8088 -w host.cap
  • 然后最终包会流入容器内,那我们抓一下容器内的eth0网卡

    # 容器内安装一下tcpdump
    $ sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
    $ apk add tcpdump
    $ tcpdump -i eth0 port 80 -w container.cap

到另一台机器访问一下,

$ curl 172.21.32.6:8088/

停止抓包,拷贝容器内的包到宿主机

$ docker cp test:/root/container.cap /root/

把抓到的内容拷贝到本地,使用wireshark进行分析。

$ scp root@172.21.32.6:/root/*.cap /d/packages

(wireshark合并包进行分析)

13.调试分析

调试或者排查容器启动错误

## 若有时遇到容器启动失败的情况,可以先使用相同的镜像启动一个临时容器,先进入容器
$ docker exec -ti --rm <image_id> bash
## 进入容器后,手动执行该容器对应的ENTRYPOINT或者CMD命令,这样即使出错,容器也不会退出,因为bash作为1号进程,我们只要不退出容器,该容器就不会自动退出

参考文档:docker中文

http://www.dockerinfo.net/document

参考书籍:Docker开发指南

https://www.zhuimengnan.com/docker.pdf

docker入门到放弃的更多相关文章

  1. 《区块链:从入门到放弃》之obc安装步骤

    obc安装步骤 朋友们可能会好奇,厨师不研究菜谱怎么改研究兵法了,哈哈,我原本是app出身,最近被安排去预研区块链和比特币技术,2个月下来,颇有斩获.期间得到IBM的CC同学指导我一步一步安装obc的 ...

  2. NetCore实践篇:分布式监控客户端ZipkinTracer从入门到放弃之路

    前言 本文紧接上篇.Net架构篇:思考如何设计一款实用的分布式监控系统?,上篇仅仅是个思考篇,跟本文没有太大的关系.但有思考,结合现有的开源组件,实践起来更易理解起来,所以看本文之前,应该先看下上篇博 ...

  3. Docker入门 第一课 --.Net Core 使用Docker全程记录

    微服务架构无疑是当前最火热的开发架构,而Docker作为微服务架构的首选工具,是我们必须要了解掌握的. 我通过一天的时间,网上查文档,了解基础概念,安装Docker,试验Docker命令,通过Dock ...

  4. 物联网架构成长之路(43)-k8s从入门到放弃

    0. 前言 这段时间要入门一下CI/CD了,以前简单的了解过Jenkins,现在要把以下的这个图的架构搭建起来.国外可能一两个命令就安装完成的事情,我折腾了2天多,真的差点放弃了. 1. 安装Virt ...

  5. K8S 从入门到放弃系列文章目录(Kubernetes 1.14)

    1)软件环境 软件 版本 系统 Centos7.5 Kubernetes 1.14.1 Docker 18.09 Calico 3.6 Etcd 3.3.12 2)部署过程简单概要 三台master节 ...

  6. Docker入门 .Net Core 使用Docker全程记录

    https://www.cnblogs.com/flame7/p/9210986.html Docker入门 第一课 --.Net Core 使用Docker全程记录   微服务架构无疑是当前最火热的 ...

  7. 小白学 Python 爬虫(28):自动化测试框架 Selenium 从入门到放弃(下)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  8. elasticsearch入门到放弃之elasticsearch-head

    elasticsearch-head可理解为跟DBeaver一样是一个数据可视化工具,但是这个工具并没有理想中那么好用坑也是很多,我已经在我的github上fork了一份修改后的版本:https:// ...

  9. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

随机推荐

  1. python 处理 json 四个函数dumps、loads、dump、load的区别

    1 .json.dumps() 函数是将一个 Python 数据类型列表(可以理解为字典)进行json格式的编码(转换成字符串,用于传播)eg, dict = {"age": &q ...

  2. putty ssh 证书登录及问题

    1.用PUTTYGEN.exe生成密钥,生成的时候鼠标在进度条下面的空白处移动,为什么?就理解成随机得厉害点吧. 2.保存私钥,请看下面的图片说明 3.把公钥的内容想办法放到用户目录的.ssh/aut ...

  3. oracal 游标

    一. CREATE OR REPLACE PROCEDURE PRC_WAP_ACTIVEUSERS(RETCODE OUT VARCHAR2) /************************** ...

  4. Java虚拟机与平台无关性

    概述 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. --<深入理解Java虚拟机>(从这里可以看到,字节码是一种文件格式) 我们都知道计算机只 ...

  5. Spring创建对象的方法

    1.利用无参构造器创建对象. 在代码中有一个学生类Student.java package no1; public class Student { public Student(){ System.o ...

  6. php 中 使用foreach为数组增加键值对

    php 中的 foreach 在php中,使用foreach来遍历数组的频率很高,并且其性能要高于 list() 和 each() 结合来遍历数组: 当遍历二位数组的第一层数组,并要给第二位数组增加一 ...

  7. Filebeat使用

    1.Beat家族 Beats可以直接(或者通过Logstash)将数据发送到Elasticsearch,在那里你可以进一步处理和增强数据,然后在Kibana中将其可视化. 2.FileBeat安装 2 ...

  8. ci 框架中defined('BASEPATH') OR exit('No direct script access allowed');

    作用: OR 就是前面的是true时,就不走后面了. 加这个是为了防止不是从index.php访问到的控制器

  9. 如何解决Sublime text中文乱码问题

    Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦.不过Sublime Package Control所以供的插件可以让Subli ...

  10. <JavaScript>数组的sort()方法中比较函数是怎么工作的

    sort()函数比较时调用的是每个数组项的toString()方法,并非按数值大小进行比较,所以往往得不到我们想要的结果. 比如: ,,,,]; values.sort( ); alert(value ...