Docker 容器

容器是 Docker 又一核心概念。

简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。

本片文章将具体介绍围绕容器的重要操作,包括创建一个容器、启动容器、终止一个容器、进入容器内执行操作、删除容器和通过导入导出容器来实现容器的迁移。

启动容器

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。

因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。

新建并启动

所需要的命令主要为 docker run

例如,下面的命令输出一个 “Hello World”,之后终止容器。

[root@MSJTVL-MJSP-A35 docker]# docker run unbutn:02.09 /bin/echo 'Hello World'
Hello World
[root@MSJTVL-MJSP-A35 docker]#

这跟本地直接执行/bin/echo 'Hello World'几乎感觉没有任何区别。

下面的命令则启动一个bash终端,允许用户进行交互。

[root@MSJTVL-MJSP-A35 docker]# docker run -t -i unbutn:02.09 /bin/bash
root@797bce48e2ac:/#

其中,-t选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。

在交互模式下,用户可以通过所创建的终端输入命令,例如

root@797bce48e2ac:/# pwd
/
root@797bce48e2ac:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin selinux srv sys tmp usr var
root@797bce48e2ac:/# cd /etc/

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

启动已终止容器

可以利用 docker start 命令,直接将一个已经终止的容器启动运行。

容器的核心为所执行的应用程

root@797bce48e2ac:~# ps
PID TTY TIME CMD
? :: bash
? :: ps
root@797bce48e2ac:~#

可见,容器中仅运行了指定的bash应用。这种特点使得Docker对资源的利用率极高,是货真价实的轻量级虚拟化。

守护态运行

更多的时候,需要让Docker容器在后台以守护(Daemonized)形式运行。此时,可以通过添加 -d参数来实现。

例如下面的命令会在后台运行容器。

[root@MSJTVL-MJSP-A35 docker]# docker run -d ubuntu:12.04 /bin/sh -c "while true;do echo hello world;sleep 1;done"
dd94131ba7cce93cffd1987095082160da1be8b13205ebb418782b89c88ec21a

容器启动之后会返回一个唯一的ID,也可以通过docker ps 命令来查看容器的信息。

[root@MSJTVL-MJSP-A35 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 23 seconds ago Up 21 seconds happy_morse

要获取容器的输出信息,可以通过docker logs命令。

[root@MSJTVL-MJSP-A35 docker]# docker logs happy_morse
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
······

终止容器

可以使用docker stop 来终止一个运行中的容器。

[root@MSJTVL-MJSP-A35 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t About an hour ago Up 2 seconds happy_morse
[root@MSJTVL-MJSP-A35 ~]# docker stop happy_morse
happy_morse
[root@MSJTVL-MJSP-A35 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@MSJTVL-MJSP-A35 ~]#

此外,当docker容器中指定的应用终结时,容器也自动终止。例如对于上面启动了一个终端的容器,用户通过exit命令或是ctrl + d 来退出终端时,所创建的容器会立刻终止。

终止状态的容器也用docker ps -a 命令看到。例如

[root@MSJTVL-MJSP-A35 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 10 minutes ago Up 10 minutes happy_morse
0f627067205b centos:14.04 "/bin/bash" minutes ago Exited () minutes ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" minutes ago Exited () minutes ago stupefied_mclean
6ef0c8e046d9 unbutn:02.09 "/bin/echo 'Hello Wo 43 minutes ago Exited (0) 43 minutes ago boring_elion
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 43 minutes ago Exited (0) 43 minutes ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago high_lovelace
[root@MSJTVL-MJSP-A35 docker]#

处于终止状态的容器,可以通过 docker start 命令来重新启动。

此外,docker restart 命令会将一个运行态的容器终止,然后再重新启动它。

进入容器

在使用-d 参数时,容器启动后会进入后台。某些时候需要进入容器进行操作,有很多种方式,包括使用docker attach命令或nsenter 工具等。

attach命令

docker attach 是Docker自带的命令。下面示例如何使用该命令。

[root@MSJTVL-MJSP-A35 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t About an hour ago Up About an hour happy_morse
[root@MSJTVL-MJSP-A35 docker]# docker attach happy_morse
hello world
hello world
hello world
hello world
hello world
···

但是使用attach命令有时候并不方便。当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示。当某个窗口因为命令阻塞时,其他窗口也无法执行操作了。

exec命令

Docker自1.3版本起,提供了一个更加方便的工具exec,可以直接在容器内运行命令。例如进入到刚创建的容器中,并启动一个bash:

[root@MSJTVL-MJSP-A35 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t About an hour ago Exited (137) 9 minutes ago happy_morse
0f627067205b centos:14.04 "/bin/bash" About an hour ago Exited () About an hour ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" hours ago Exited () About an hour ago stupefied_mclean
6ef0c8e046d9 unbutn:02.09 "/bin/echo 'Hello Wo 2 hours ago Exited (0) 2 hours ago boring_elion
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 2 hours ago Exited (0) 2 hours ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago high_lovelace
[root@MSJTVL-MJSP-A35 ~]# docker start 0f627067205b
0f627067205b
[root@MSJTVL-MJSP-A35 ~]# docker exec -ti 0f627067205b /bin/bash
[root@0f627067205b /]#

nsenter命令

安装

nsenter 工具在util-linux包2.23版本后包含。如果系统中没有util-linux包没有该命令,可以按照如下的方式从源码安装。

[root@MSJTVL-MJSP-A35 tmp]# cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
7451k 7451k :: :: --:--:--
[root@MSJTVL-MJSP-A35 util-linux-2.24]# ./configure --without-ncurses
[root@MSJTVL-MJSP-A35 util-linux-2.24]# make nsenter && cp nsenter /usr/local/bin

使用

nsenter可以访问另一个进程的名字空间。nsenter要正常工作需要有root权限。

为了使用nsenter连接到容器,还需要找到容器进程的PID,可以通过下面的命令获取:

PID=$(docker inspect --format "{{ .State.Pid }}" <container>)

通过这个PID可以连接到这个容器:

$ nsenter --target $PID --mount --uts --ipc --net --pid

下面一个完整的例子:

[root@MSJTVL-MJSP-A35 bin]# docker run -idt ubuntu:12.04
ef321bb21bb77b6dc9cf9c1069c400552631d776b607cb8beb07e0db81f65bdf
[root@MSJTVL-MJSP-A35 bin]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef321bb21bb7 ubuntu:12.04 "/bin/bash" seconds ago Up seconds gloomy_ardinghelli
0f627067205b centos:14.04 "/bin/bash" hours ago Up minutes serene_poitras
[root@MSJTVL-MJSP-A35 bin]# PID=$(docker-pid ef321bb21bb7)
-bash: docker-pid: command not found

尝试这种方式好多次一直没有执行处理,具体操作如下,大家要是发现哪有问题还请多多指点,谢谢。

鉴于上面的方式不能查出容器的ID,那么咱换一直方式:

[root@MSJTVL-MJSP-A35 ~]# docker top ef321bb21bb7
UID PID PPID C STIME TTY TIME CMD
root : pts/ :: /bin/bash

查出容器的ID是26205,接下来用nsenter登录

[root@MSJTVL-MJSP-A35 ~]# nsenter --target  --mount --uts --ipc --net --pid
root@ef321bb21bb7:/#

感觉好像登录成功。

退出之后查看容器还在,个人感觉跟attach相比就是退出之后容器不会关闭,大家有什么其他发现可以给我留言,我会不定期的更新。

root@ef321bb21bb7:/# logout
[root@MSJTVL-MJSP-A35 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef321bb21bb7 ubuntu:12.04 "/bin/bash" minutes ago Up minutes gloomy_ardinghelli
0f627067205b centos:14.04 "/bin/bash" hours ago Up About an hour serene_poitras

导出和导入容器

导出容器

导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export 命令,该命令格式为docker export CONTAINER

查看所有的容器如下所示:

[root@MSJTVL-MJSP-A35 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef321bb21bb7 ubuntu:12.04 "/bin/bash" minutes ago Up seconds gloomy_ardinghelli
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 3 hours ago Exited (137) 2 hours ago happy_morse
0f627067205b centos:14.04 "/bin/bash" hours ago Exited () seconds ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" hours ago Exited () hours ago stupefied_mclean
6ef0c8e046d9 unbutn:02.09 "/bin/echo 'Hello Wo 4 hours ago Exited (0) 4 hours ago boring_elion
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 4 hours ago Exited (0) 4 hours ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago high_lovelace
[root@MSJTVL-MJSP-A35 ~]#

分别导出ef321bb21bb7和dd94131ba7cc容器到test_for_run.tar文件和test_for_stop.tar文件:

[root@MSJTVL-MJSP-A35 docker]# docker export gloomy_ardinghelli >test_for_run.tar
[root@MSJTVL-MJSP-A35 docker]# docker export happy_morse >test_for_stop.tar
[root@MSJTVL-MJSP-A35 docker]# ll
total
-rw-r--r-- root root Feb : centos--x86-minimal.tar.gz
-rw-r--r-- root root Feb : test_for_run.tar
-rw-r--r-- root root Feb : test_for_stop.tar
-rw-r--r-- root root Feb : ubuntu_12..tar
[root@MSJTVL-MJSP-A35 docker]#

可以将这些文件传输到其他机器上,在其他机器上通过导入命令实现容器的迁移。

导入容器

导出的文件又可以使用docker import 命令导入,成为镜像,例如:

[root@MSJTVL-MJSP-A35 docker]# cat test_for_run.tar |docker import - test/ubuntu:v1.
2c9f598772e33b68a2b58b05afc020b03cb289348257538bc62e9a3ae27b829b
[root@MSJTVL-MJSP-A35 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
test/ubuntu v1.0 2c9f598772e3 23 seconds ago 83.56 MB
centos 14.04 2197ed1032f7 hours ago 512.1 MB
test latest 1a67c55ea394 hours ago 103.6 MB
ubuntu latest 6aa0b6d7eb90 weeks ago 129.5 MB
ubuntu 12.04 8ea067ad7a27 weeks ago 103.6 MB
unbutn 02.09 8ea067ad7a27 weeks ago 103.6 MB

大家可能会记得,在之前的章节曾介绍过使用docker load命令来导入一个镜像文件。

实际上,既可以使用docker load命令来导入镜像存储文件到本地的镜像库,又可以使用docker import命令来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

删除容器

可以使用docker rm命令删除处于终止状态的容器,命令格式为docker rm[OPTIONS] CONTAINER[CONTAINER...]。

支持的选项包括:

·-f,--force=false强行终止并删除一个运行中的容器。

·-l,--link=false删除容器连接,但保留容器。

·-v,--volumes=false删除容器挂载的数据卷。

例如,查看处于终止状态的容器并删除如下表示:

[root@MSJTVL-MJSP-A35 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef321bb21bb7 ubuntu:12.04 "/bin/bash" About an hour ago Up minutes gloomy_ardinghelli
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 3 hours ago Exited (137) 2 hours ago happy_morse
0f627067205b centos:14.04 "/bin/bash" hours ago Exited () minutes ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" hours ago Exited () hours ago stupefied_mclean
6ef0c8e046d9 unbutn:02.09 "/bin/echo 'Hello Wo 4 hours ago Exited (0) 4 hours ago boring_elion
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 4 hours ago Exited (0) 4 hours ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago high_lovelace [root@MSJTVL-MJSP-A35 docker]# docker rm 6ef0c8e046d9
6ef0c8e046d9
[root@MSJTVL-MJSP-A35 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef321bb21bb7 ubuntu:12.04 "/bin/bash" About an hour ago Up minutes gloomy_ardinghelli
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 3 hours ago Exited (137) 2 hours ago happy_morse
0f627067205b centos:14.04 "/bin/bash" hours ago Exited () minutes ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" hours ago Exited () hours ago stupefied_mclean
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 4 hours ago Exited (0) 4 hours ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago high_lovelace
[root@MSJTVL-MJSP-A35 docker]#

如果删除一个运行中的容器,可以添加-f参数。Docker会发送SIGKILL信号给容器,终止其中的应用

[root@MSJTVL-MJSP-A35 docker]# docker run -d ubuntu:12.04 /bin/sh -c "while true;do echo hello world;sleep 1;done"
d677c7bb29203e770c23a745b7a5ac4dbb3891c467908fd1ab999e4b54e8a25e
[root@MSJTVL-MJSP-A35 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d677c7bb2920 ubuntu:12.04 "/bin/sh -c 'while t 5 seconds ago Up 3 seconds backstabbing_mayer
ef321bb21bb7 ubuntu:12.04 "/bin/bash" About an hour ago Up minutes gloomy_ardinghelli
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 4 hours ago Exited (137) 2 hours ago happy_morse
0f627067205b centos:14.04 "/bin/bash" hours ago Exited () minutes ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" hours ago Exited () hours ago stupefied_mclean
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 4 hours ago Exited (0) 3 minutes ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago high_lovelace
[root@MSJTVL-MJSP-A35 docker]# docker rm backstabbing_mayer
Error response from daemon: Cannot destroy container backstabbing_mayer: Conflict, You cannot remove a running container. Stop the container before attempting removal or use -f
Error: failed to remove containers: [backstabbing_mayer]
[root@MSJTVL-MJSP-A35 docker]# docker rm -f backstabbing_mayer
backstabbing_mayer
[root@MSJTVL-MJSP-A35 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef321bb21bb7 ubuntu:12.04 "/bin/bash" About an hour ago Up minutes gloomy_ardinghelli
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 4 hours ago Exited (137) 2 hours ago happy_morse
0f627067205b centos:14.04 "/bin/bash" hours ago Exited () minutes ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" hours ago Exited () hours ago stupefied_mclean
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 4 hours ago Exited (0) 4 minutes ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" hours ago Exited () hours ago high_lovelace
[root@MSJTVL-MJSP-A35 docker]#

Docker学习第二天-容器的更多相关文章

  1. Docker学习之3——容器

    容器(Container) 容器介绍: docker是通过容器来运行业务的,就像运行一个kvm虚拟机是一样的.容器其实就是从镜像创建的一个实例. 我们可以对容器进行增删改查,容器之间也是相互隔离的.和 ...

  2. Docker学习笔记——制作容器与容器概念

    Docker能做些什么? 1.docker能够解决虚拟机能够解决的问题 2.隔离应用依赖 3.创建应用镜像并复制 4.创建容易分发的即启即用的应用 5.docker的想法是创建软件程序可移植的轻量容器 ...

  3. Docker学习第二天

    CentOS 系列安装 Docker Docker 支持 CentOS6 及以后的版本. CentOS6 对于 CentOS6,可以使用 EPEL 库安装 Docker,命令如下 [root@MSJT ...

  4. 【转】Docker学习_本地/容器文件互传(5)

    将容器内文件拷贝到宿主机 docker cp <containerId>:/导出文件的位置/xxx.sql /宿主机的位置 示例:docker cp bf4c4fff338c:/root/ ...

  5. Docker学习第二天(Docker容器管理)

    简介 emmmm Docker 容器管理 推荐文章:容器技术概述 run里面的子选项 1.使用run命令创建容器 docker container run -it ubuntu /bin/bash / ...

  6. docker学习笔记:容器的网络设置

    创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头. 我们可以在主机上用 docker inspect 命令 或者进入容器用ifconfig命令来查看容器 ...

  7. 优秀的云计算工程师需要学什么?云计算Docker学习路线

    云计算工程师要学什么?随着互联网的快速发展,云计算这个词大家并不陌生,但是云计算究竟是做什么的,想要从事云计算要学习什么,很多都不知道,那么今天就给大家讲一下云计算. 云计算是基于互联网的相关服务的增 ...

  8. Docker 入门 第二部分: 容器

    目录 Docker 入门 第二部分: 容器 先决条件 介绍 你的新开发环境 使用 Dockerfile 定义一个容器 Dockerfile 应用本身 requirements.txt app.py 构 ...

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

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

随机推荐

  1. php获取一个月前的时间戳,获取三个月前的时间戳,获取一年前的时间戳

    strtotime 非常强大的一个获取时间戳的函数 php获取一个月前的时间戳: strtotime("-0 year -1 month -0 day"); php获取三个月前的时 ...

  2. 快速写入Xml文件

    我们在做一些操作的时候会需要生成日志,Xml文件就是我们常用的一种日志文件. 普通操作Xml文件的代码遇到大数据量的话就很慢了. 用这个生成Xml文件的话,即使数据量很大,也很快 private vo ...

  3. Android 9.0 Dialog不显示

    Tester报了一个bug,大概如下: 页面:Activity1 dialog1(半透明遮罩样式) Activity2 dialog2 场景:Activity1弹出dialog1,dialog1弹出a ...

  4. Excel的Range对象(C#)

    原文:Excel的Range对象(C#) Range 对象是 Excel 应用程序中最经常使用的对象:在操作 Excel 内的任何区域之前,都需要将其表示为一个 Range 对象,然后使用该 Rang ...

  5. JAVA 与 PHP 的不同和相同

    Java语言与PHP语言因为都可以做web应用开发,所以总有入门学习这2种语言的入门者会问Java和PHP哪一个好.讨论语言的好坏是一件不太明智的事情,我认为只能去说那一种编程语言更加适合干什么,人与 ...

  6. C#判断是否相等

    判断对象是否相等,因为平时用的一般都是int.bool.string类型的数据是否相等. 同时也是只判断它们的“值”是否相等.于是都是用“==”或是Equal()方法来判断. 但这并不能判断出是否为同 ...

  7. 转换GMT秒数为日期时间格式-Delphi源码

    转换GMT秒数为日期时间格式-Delphi源码.收藏最近在写PE分析工具的时候,需要转换TimeDateStamp字段值为日期时间格式,这是Delphi的源码. //把GMT时间的秒数转换成日期时间格 ...

  8. MongoDB自学日记3——架构及HA

    在对mongoDB的操作有了一定基础后,终于可以扯扯HA和架构这两个高大上的概念了.在这之前当然还得弄清楚mongoDB的Key feature:Sharding. 1. Sharding Shard ...

  9. SYN4104型 数字网同步时钟

    SYN4104型 数字网同步时钟 产品概述 SYN4104型数字网同步时钟是由西安同步电子科技有限公司精心设计.自行研发生产的一款高精度锁相时钟频率源,接收GPS信号,使恒温晶振输出频率同步于GPS卫 ...

  10. javascript“命名空间”的费曼输出[原创]

    Javascript由于没有命名空间的概念,所以好多的框架或库就用了某些“命名空间”的技巧.在学习作为函数的命名空间时,我翻阅了好多的书本和blog,很多的概念和说明都是要么过于烦杂或过于简单.现在由 ...