Docker容器引擎

文章目录

  • 一、概述
    • 1. Docker能解决的问题
    • 2. Docker思想
    • 3. Docker为什么这么火?(作用)
    • 4. 底层
    • 5. 官网和文档
    • 6. 基本组成(图解)
    • 7. 核心概念(名词)
    • 10. Docker工作流程
  • 二、安装
    • 1. 环境准备
      • Linux服务器+CentOS7+远程连接工具
      • 环境查看命令
    • 2. 安装步骤
      • 1、卸载旧版本
      • 2、需要的安装包
      • 3、设置镜像的仓库
      • 4、安装Docker引擎
      • 5、启动Docker
      • 6、测试是否启动
      • 7、运行 hello-world 映像来验证是否正确安装了Docker Engine
      • 8、查看运行的镜像
      • 9、阿里云服务器配置镜像加速器
  • 三、卸载
    • 1. 卸载Docker Engine,CLI和Containerd软件包
    • 2. 主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷
  • 四、命令
    • 1. 帮助命令
      • docker version(显示Docker版本信息)
      • docker info(显示Docker的系统信息 包括镜像和容器的数量)
      • docker --help(帮助命令)
      • docker images --help(显示该命令的帮助信息)
    • 2. 镜像命令
      • docker images(查询容器所有的镜像)
      • docker search(搜索镜像)
      • docker pull(下载镜像)
      • docker rmi(删除镜像)
    • 3. 容器命令
      • docker run(新建容器并启动)
      • (退出容器)
      • docker ps(查看当前正在运行的容器)
      • docker rm (删除容器)
      • (启动和停止容器)
      • docker logs(查看日志)
      • docker top(查看正在运行的容器内部的进程信息)
      • docker inspect(查看镜像的元数据)
      • (进入当前正在运行的容器)
      • (从容器内 拷贝文件到 主机上)
      • (从宿主机 拷贝文件到 容器中)
    • 4. 命令图解
    • 5. 命令实战
      • 安装运行Nginx容器
      • 安装运行Tomcat容器
      • 安装运行MySQL8.0容器
  • 五、镜像
    • 1. 概念
    • 2. 作用
    • 3. 如何得到镜像?
    • 4. 镜像原理
      • UnionFS(联合文件系统)
      • 镜像加载原理
      • 分层原理(Layers)
    • 5. 提交镜像
  • 六、容器数据卷
  • 七、DockerFile
  • 八、IDEA整合Docker
  • 九、Docker网络
  • 十、Docker集群
  • 十一、Docker集群管理
  • 十二、Docker持续化部署

一、概述

1. Docker能解决的问题

统一开发和运维的环境

开发和测试的日常对话:我在我电脑上可以运行~!
一款产品:开发到部署,是两个环境 存在环境的问题?
开发在Windows 发布在Linux…(环境差别很大,而且安装配置麻烦,深有体会~!)

2. Docker思想

  • 集装箱
  • 隔离机制

3. Docker为什么这么火?(作用)

  • 十分轻巧(相比于虚拟机)
    他不是一台完整的带操作系统的电脑,只是最核心的环境,其他系统和外部硬件共用宿主的
  • 应用更快速的交付和部署
    传统:一堆帮助文档,配置环境,安装程序
    Docker:打包(带应用的运行环境)镜像发布、测试,一键运行
  • 更便捷的升级和扩容
    使用了Docker之后,部署应用和搭积木一样
    项目打包为一个镜像,要扩展服务 只需在服务器上运行即可(服务器A、服务器B … …)
  • 更简单的系统运维
    使用了Docker之后,我们开发、测试、运维的环境是高度一致的
  • 更高效的计算机资源利用
    Docker是内核级别的虚拟机,可以在一个物理机上运行很多的容器实例!
    服务器的性能可以被压榨到极致!

4. 底层

基于Go语言开发的

5. 官网和文档

官网地址
文档地址

6. 基本组成(图解)

Docker容器引擎_第1张图片

7. 核心概念(名词)

  • 镜像(image)
    Docker镜像好比一个模板,通过这个模板可以创建容器服务。

Tomcat镜像 --> run --> Tomcat01容器(提供服务)

    通过这个模板可以创建多个容器。

Tomcat镜像 --> run --> Tomcat02容器(提供服务)

  • 容器(container)
    Docker利用容器技术,独立运行一个或一组应用,这些应用是通过镜像来创建的

  • 仓库(repository)

    • 公有仓库 - 默认仓库是国外的
      我们可以 配置 阿里云的Docker仓库(镜像加速)
    • 私有仓库

10. Docker工作流程

Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。
通过Socket从客户端访问!
DockerServer接收到DockerClient的指令,就会执行这个命令~!

二、安装

1. 环境准备

  • Linux服务器+CentOS7+远程连接工具

  • 环境查看命令

uname -r

[root@sunmmerwind ~]# uname -r
4.18.0-240.15.1.el8_3.x86_64

cat /etc/os-release

[root@sunmmerwind ~]# uname -r
4.18.0-240.15.1.el8_3.x86_64
[root@sunmmerwind ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"

2. 安装步骤

1、卸载旧版本

# 直接复制粘贴
yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-engine

2、需要的安装包

[root@sunmmerwind ~]# yum install -y yum-utils

3、设置镜像的仓库

  • 国外镜像仓库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  • 阿里镜像仓库(使用这个)
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、安装Docker引擎

[root@sunmmerwind ~]# yum install docker-ce docker-ce-cli containerd.io

ce:社区版
ee:企业版(收费)

5、启动Docker

[root@sunmmerwind ~]# systemctl start docker

6、测试是否启动

[root@sunmmerwind ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.6
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        370c289
 Built:             Fri Apr  9 22:44:36 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.6
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       8728dd2
  Built:            Fri Apr  9 22:43:02 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

7、运行 hello-world 映像来验证是否正确安装了Docker Engine

[root@sunmmerwind ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete 
Digest: sha256:f2266cbfc127c960fd30e76b7c792dc23b588c0db76233517e1891a4e357d519
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

8、查看运行的镜像

[root@sunmmerwind ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    d1165f221234   6 weeks ago   13.3kB
[root@sunmmerwind ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED              STATUS                          PORTS     NAMES
58715163d8e3   hello-world   "/hello"   About a minute ago   Exited (0) About a minute ago             wonderful_hellman

9、阿里云服务器配置镜像加速器

1)登陆阿里云
2)在弹性计算里面 找到 容器镜像服务
3)免费开通
4)执行下面命令就可以用了

# 创建目录
sudo mkdir -p /etc/docker
# 设置阿里云镜像服务 带最后的EOF
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://noi9j7o6.mirror.aliyuncs.com"]
}
EOF
# 重新加载
sudo systemctl daemon-reload
# 重启Docker
sudo systemctl restart docker

三、卸载

1. 卸载Docker Engine,CLI和Containerd软件包

yum remove docker-ce docker-ce-cli containerd.io

2. 主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷

rm -rf /var/lib/docker

四、命令

1. 帮助命令

  • docker version(显示Docker版本信息)

Client: Docker Engine - Community
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        48a66213fe
 Built:             Mon Jun 22 15:46:54 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.12
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       48a66213fe
  Built:            Mon Jun 22 15:45:28 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
  • docker info(显示Docker的系统信息 包括镜像和容器的数量)

Client: Docker Engine - Community
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        48a66213fe
 Built:             Mon Jun 22 15:46:54 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.12
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       48a66213fe
  Built:            Mon Jun 22 15:45:28 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
[root@iZbf2jzc4i64zvZ ~]# ^C
[root@iZbf2jzc4i64zvZ ~]# clear
[root@iZbf2jzc4i64zvZ ~]# docker info
Client:
 Debug Mode: false

Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 1
 Server Version: 19.03.12
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-1127.10.1.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 1.795GiB
 Name: iZbf2jzc4i64zvZ
 ID: ML25:C7CS:I7GJ:DLJ4:E6ZC:YWOW:VXII:46RU:GUSJ:622O:ZDOG:TXN3
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://noi9j7o6.mirror.aliyuncs.com/
 Live Restore Enabled: false
  • docker --help(帮助命令)

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show numeric IDs
[root@iZbf2jzc4i64zvZ ~]# docker --help

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST
                           env var and default context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  context     Manage contexts
  engine      Manage the docker engine
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker COMMAND --help' for more information on a command.
  • docker images --help(显示该命令的帮助信息)

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show numeric IDs

2. 镜像命令

镜像类似 我们所说的系统盘 O(∩_∩)O哈哈~

  • docker images(查询容器所有的镜像)

[root@sunmmerwind ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    d1165f221234   6 weeks ago   13.3kB
  • docker search(搜索镜像)

搜索命令

[root@sunmmerwind ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10768     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4056      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   792                  [OK]
percona                           Percona Server is a fork of the MySQL relati…   533       [OK]       

过滤搜索

[root@sunmmerwind ~]# docker search mysql --filter=stars=5000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10768     [OK]    
  • docker pull(下载镜像)

[root@sunmmerwind ~]# docker pull mysql 
Using default tag: latest  #默认下载最新版
latest: Pulling from library/mysql  #下载路径
6ec8c9369e08: Pull complete  #Linux中的联合文件系统(下载过的 不用重复下载了)
177e5de89054: Pull complete 
ab6ccb86eb40: Pull complete 
e1ee78841235: Pull complete 
09cd86ccee56: Pull complete 
78bea0594a44: Pull complete 
caf5f529ae89: Pull complete 
cf0fc09f046d: Pull complete 
4ccd5b05a8f6: Pull complete 
76d29d8de5d4: Pull complete 
8077a91f5d16: Pull complete 
922753e827ec: Pull complete 
Digest: sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14acc  #签名
Status: Downloaded newer image for mysql:latest  #状态:Downloaded 已下载
docker.io/library/mysql:latest  #真实下载地址
【所以docker pull mysql 等价于 docker pull docker.io/library/mysql:latest】
  • docker rmi(删除镜像)

删除全部镜像:docker rmi -f $(docker images -aq) #$(删除的参数)

#因为容器中只有一个了
[root@iZbf2jzc4i64zvZ ~]# docker rmi -f $(docker images -aq)
Untagged: hello-world:latest
Untagged: hello-world@sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b

根据镜像ID删除镜像: docker rmi -f 镜像ID

[root@iZbf2jzc4i64zvZ ~]# docker rmi -f 8679ced16d20
Untagged: mysql:5.7
Untagged: mysql@sha256:97869b42772dac5b767f4e4692434fbd5e6b86bcb8695d4feafb52b59f
Deleted: sha256:8679ced16d206961b35686895b06cfafefde87ef02b518dfc2133081ebf47cda
Deleted: sha256:355f87dc5125a32cc35898a4dde17fb067585bc0d86704b5a467c0ccc0eea484
Deleted: sha256:8299d5c38042216210125535adb2600e46268a0e2b9ec799d12ea5b770236e79
Deleted: sha256:07311a303b2c7cf2ac6992aaf68e12326fe7255985166939cbab7d18b10e0f47
Deleted: sha256:306c9bc1ce2997d000bb6f1ea4108420d9752df93ce39164b7a2f876b954afc4

一次删除多个镜像:docker rmi -f 镜像ID 镜像ID 镜像ID 镜像ID

不做示例了 ID中间加空格就行了~!

根据镜像的名字删除:docker rmi -f 镜像名字

[root@iZbf2jzc4i64zvZ ~]# docker rmi -f mysql
Untagged: mysql:latest
Untagged: mysql@sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14
Deleted: sha256:e3fcc9e1cc046c92cfcea0d66cdb00fcb7747e87dde96dfc958bd80be37af117
Deleted: sha256:7a1c5c1a40dad78bacb211ec3d7918acdd78a76185fd33a167260c3e51e97fa4
Deleted: sha256:abb5f0f890ba2f327d30b5ca1bbc35584bc6357c8d6f4bdc2e4637cce2ea9a35
Deleted: sha256:919c56fc8230b0ddf8580e0a58d34ae1c5e48069d9b48cc41ae7a1cae82bb60e
Deleted: sha256:962d6891622cf4a7e8932f6c76b2c2f3ab9cecb8aad71d55adacc2aece6b0181
Deleted: sha256:ab26019b1328bff5ea5132b5e3f52b9fd3808e734f1a39141fb9e5da561200e2
Deleted: sha256:06bd523b11319c8177ab2003cb31b296cea22b0201bf8ae987ac300118a0654f
Deleted: sha256:a8681d5c66889e97303be147d30eb8ec4b0bd5bc0e2c774b4d94f52ec23c4649
Deleted: sha256:c28ab987d3964139dcd3852e1c10ef0a425d2705c71a3b68b411460279d8535d
Deleted: sha256:c0fc32d1072662668dd59842d893e5ee125c1958931ae84630132b7bb6c09198
Deleted: sha256:da0ebf91b8bc2d545dbe73cbf9b7c7b25df71033f5057133a445e9c33a36ec7d
Deleted: sha256:483d8f607b803b5e3d3f97adbad3b0e692670f223b2529ecae5d04888c29ad5d
Deleted: sha256:95ef25a3204339de1edf47feaa00f60b5ac157a498964790c58c921494ce7ffd

3. 容器命令

容器类似我们用系统盘 做的新系统~

  • docker run(新建容器并启动)

docker run [可选参数] image
参数说明:

–name=“Name” 设置容器名字
-d 后台运行方式
-it 使用交互方式运行,进入容器查看内容
-p(小屁) 指定容器的端口(-p 8080:8080)
-p (ip:主机端口:容器端口)
-p (主机端口:容器端口)【常用】
-p (容器端口)
容器端口 (不写-p)
-P 随机指定端口

# centos 是 下载的一个镜像
[root@iZbf2jzc4i64zvZ ~]# docker run -it centos /bin/bash
# 换成镜像ID了
[root@755709dbc6b0 /]# 
# centos基础版本,很多命令不完善!ll命令就没有~~~
[root@755709dbc6b0 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

后台启动命令 及 坑~~!!

#命令:docker run -d 镜像名
[root@iZbf2jzc4i64zvZ ~]# docker run -d centos /bin/bash
27be24a0c1dda2815bc2dec8bb6efc09f81c2b6ca7a9b0380a11e6d6ef315a5b
#问题docker ps,发现centos停止了~
[root@iZbf2jzc4i64zvZ ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@iZbf2jzc4i64zvZ ~]# 
#常见的坑:docker容器使用后台运行,就必须要有一个前台的进程,docker发现没有应用,就会自动停止
#还有nginx,容器后台启动后,发现自己没有提供服务,就会立刻停止
  • (退出容器)

  • 容器停止 并 退出容器
exit
  • 容器不停止 退出容器
Ctrl+P+Q(顺序不能错)
  • docker ps(查看当前正在运行的容器)

参数说明:

       # 不加任何参数,只显示当前正在运行的容器
-a     # 查看当前正在运行的容器 + 历史运行过的程序
-n=?   # 显示最近创建的容器(?代表显示几个)
-q   # 显示容器的编号(CONTAINER ID)

[root@iZbf2jzc4i64zvZ ~]# docker ps -a -n=1
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
755709dbc6b0        centos              "/bin/bash"         3 hours ago         Exited (0) 3 hours ago                       pedantic_mccarthy
[root@iZbf2jzc4i64zvZ ~]# docker ps -a -n=2
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
755709dbc6b0        centos              "/bin/bash"         3 hours ago         Exited (0) 3 hours ago                        pedantic_mccarthy
6b5fb686c28d        bf756fb1ae65        "/hello"            35 hours ago        Exited (0) 35 hours ago                       silly_stonebraker
[root@iZbf2jzc4i64zvZ ~]# docker ps -a -n=3
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
755709dbc6b0        centos              "/bin/bash"         3 hours ago         Exited (0) 3 hours ago                        pedantic_mccarthy
6b5fb686c28d        bf756fb1ae65        "/hello"            35 hours ago        Exited (0) 35 hours ago                       silly_stonebraker

只显示容器编号ID

[root@iZbf2jzc4i64zvZ ~]# docker ps -a -q
755709dbc6b0
6b5fb686c28d
[root@iZbf2jzc4i64zvZ ~]# docker ps -aq
755709dbc6b0
6b5fb686c28d
  • docker rm (删除容器)

  • docker rm 容器ID
[root@iZbf2jzc4i64zvZ ~]# docker rm 6b5fb686c28d
6b5fb686c28d
  • 删除指定的容器,无论是否正在运行 -f
[root@iZbf2jzc4i64zvZ ~]# docker rm 87e99063bbbe
Error response from daemon: You cannot remove a running container 87e99063bbbe. 
(在试图移动或强行移动之前,请停止容器)
Stop the container before attempting removal or force remove
[root@iZbf2jzc4i64zvZ ~]# docker rm -f 87e99063bbbe
87e99063bbbe
  • 删除所有的容器
[root@iZbf2jzc4i64zvZ ~]# docker rm  $(docker ps -aq)
de8748047921
755709dbc6b0
  • 删除所有的容器(可通过管道符选择删除 xargs)
[root@iZbf2jzc4i64zvZ ~]# docker ps -a -q|xargs docker rm
e5ad028987ce
  • (启动和停止容器)

  • 启动
docker start 容器ID
  • 重启
docker restart 容器ID
  • 停止
docker stop 容器ID
  • 杀掉
docker kill 容器ID
  • docker logs(查看日志)

参数解释:

-c “”  # 引号里面是一段shell脚本
echo  # 打印
这就解释了为什么这次后台运行没停止

-tf
–tail 10 显示日志条数(如果不加–tail会全部显示)

[root@iZbf2jzc4i64zvZ ~]# docker run -d centos /bin/bash -c "while true;do echo SummerWind;sleep 1;done" # 这段shell脚本,意思是循环打印SummerWind
c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c
[root@iZbf2jzc4i64zvZ ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
c5672e9223d2        centos              "/bin/bash -c 'while猞"   4 seconds ago       Up 3 seconds                            recursing_cartwright

[root@iZbf2jzc4i64zvZ ~]# docker logs -tf --tail 10 c5672e9223d2
2020-07-24T07:15:25.177771117Z SummerWind
2020-07-24T07:15:26.180032231Z SummerWind
2020-07-24T07:15:27.181983254Z SummerWind
2020-07-24T07:15:28.184071541Z SummerWind
2020-07-24T07:15:29.186062819Z SummerWind
  • docker top(查看正在运行的容器内部的进程信息)

docker top 容器ID(这要是正在运行的容器)

[root@iZbf2jzc4i64zvZ ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
b3c259fa54b6        centos              "/bin/bash -c 'while猞"   About a minute ago   Up About a minute                       hardcore_benz
[root@iZbf2jzc4i64zvZ ~]# docker top b3c259fa54b6
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                17631               17615               0                   15:22               ?                   00:00:00            /bin/bash -c while true;do echo SummerWind;sleep 1;done
root                17742               17631               0                   15:23               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
  • docker inspect(查看镜像的元数据)

[root@iZbf2jzc4i64zvZ ~]# docker inspect c5672e9223d2
[
    {
        #容器ID(这是完整的 显示的只是前12位 ~)
        "Id": "c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c",
        "Created": "2020-07-24T07:14:37.838659993Z",
        "Path": "/bin/bash",
        "Args": [
            "-c",
            "while true;do echo SummerWind;sleep 1;done"
        ],
        #容器状态
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 137,
            "Error": "",
            "StartedAt": "2020-07-24T07:14:38.085351505Z",
            "FinishedAt": "2020-07-24T07:20:02.584374216Z"
        },
        "Image": "sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1f",
        "ResolvConfPath": "/var/lib/docker/containers/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c/hostname",
        "HostsPath": "/var/lib/docker/containers/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c/hosts",
        "LogPath": "/var/lib/docker/containers/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c-json.log",
        "Name": "/recursing_cartwright",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Capabilities": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/2526bc57fe2854002359d0a0c9eb536460cf1474c70ad0fdd2e8ea215ef7679d-init/diff:/var/lib/docker/overlay2/ff9cceb791db48b712f90809757294fdaf615cb173345e17455dfca4c330c537/diff",
                "MergedDir": "/var/lib/docker/overlay2/2526bc57fe2854002359d0a0c9eb536460cf1474c70ad0fdd2e8ea215ef7679d/merged",
                "UpperDir": "/var/lib/docker/overlay2/2526bc57fe2854002359d0a0c9eb536460cf1474c70ad0fdd2e8ea215ef7679d/diff",
                "WorkDir": "/var/lib/docker/overlay2/2526bc57fe2854002359d0a0c9eb536460cf1474c70ad0fdd2e8ea215ef7679d/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "c5672e9223d2",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash",
                "-c",
                "while true;do echo SummerWind;sleep 1;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20200611",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "96108bd4f8742d18781c000c3633d5a384c0927d6b6e4fbc2b6a0e41ab729198",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/96108bd4f874",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "e1e9632f31bacd00015077223d5747f0569d855480fc81e0517c2a52bed39fee",
                    "EndpointID": "",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "",
                    "DriverOpts": null
                }
            }
        }
    }
]
  • (进入当前正在运行的容器)

  • docker exec   # 进入容器后开启一个新的终端,可以在里面操作【常用】
  • docker attach  # 进入容器正在执行的终端,不会启动新的进程!
  • (从容器内 拷贝文件到 主机上)

docker cp 容器ID:容器内的目录或文件 主机上的路径

#后台交互运行一个容器
[root@iZbf2jzc4i64zvZ ~]# docker run -it centos /bin/bash
#运行并进入容器
[root@d250d9bba70b /]# [root@iZbf2jzc4i64zvZ ~]# 
#容器的文件
[root@d250d9bba70b /]# ls        
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@d250d9bba70b /]# cd /home/
#进入容器home目录,创建SummerWind.java文件
[root@d250d9bba70b home]# touch SummerWind.java
#显示已经创建
[root@d250d9bba70b home]# ls
SummerWind.java
#退出容器并停止容器
[root@d250d9bba70b home]# exit
exit
#查看运行着的容器 没有
[root@iZbf2jzc4i64zvZ ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
#查看所有运行过的容器 有【容器在 里面的数据就在,不论是否运行都可以拷贝~~!!!】
[root@iZbf2jzc4i64zvZ ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
d250d9bba70b        centos              "/bin/bash"         2 minutes ago       Exited (0) 17 seconds ago                       upbeat_volhard
#拷贝命令:docker cp 容器ID:容器内的目录或文件 主机上的路径
[root@iZbf2jzc4i64zvZ ~]# docker cp d250d9bba70b:/home/SummerWind.java /home
[root@iZbf2jzc4i64zvZ ~]# cd ..
[root@iZbf2jzc4i64zvZ /]# ls
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@iZbf2jzc4i64zvZ /]# cd /home
#查看主机上的home文件夹下 已经把容器内的文件拷贝到主机上了
[root@iZbf2jzc4i64zvZ home]# ls
SummerWind.java
  • (从宿主机 拷贝文件到 容器中)

docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

# 命令:
docker cp /MyFile/PAIANG.sql bd15ab4384fd:/tmp/

# 容器中查看:
root@bd15ab4384fd:/# cd /tmp/
root@bd15ab4384fd:/tmp# ll
total 90460
drwxrwxrwt 1 root root     4096 Nov 10 14:04 ./
drwxr-xr-x 1 root root     4096 Nov 10 14:04 ../
drwxrwxrwt 2 root root     4096 Feb 14  2019 .oracle/
-rw-r--r-- 1 root root 92616247 Nov 10 13:54 PAIANG.sql

4. 命令图解

Docker容器引擎_第2张图片

5. 命令实战

  • 安装运行Nginx容器

#下载镜像

#运行Nginx容器(镜像要放在最后)
[root@iZbf2jzc4i64zvZ /]# docker run -d --name MyNginx -p 3344:80 nginx
aab1ba8e191cda24e673ca0f61f19c64a74393a685b35e31a0c5401ab3732ccb
[root@iZbf2jzc4i64zvZ /]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
aab1ba8e191c        nginx               "/docker-entrypoint.猞"   17 seconds ago      Up 15 seconds       0.0.0.0:3344->80/tcp   MyNginx

#本地测试 curl,居然还有这?
[root@iZbf2jzc4i64zvZ /]# curl localhost:3344
<!DOCTYPE html>


Welcome to nginx<span class="token operator">!</span><<span class="token operator">/</span>title>
<style>
    body <span class="token punctuation">{</span>
        width: 35em<span class="token punctuation">;</span>
        margin: 0 auto<span class="token punctuation">;</span>
        font<span class="token operator">-</span>family: Tahoma<span class="token punctuation">,</span> Verdana<span class="token punctuation">,</span> Arial<span class="token punctuation">,</span> sans<span class="token operator">-</span>serif<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<<span class="token operator">/</span>style>
<<span class="token operator">/</span>head>
<body>
<h1>Welcome to nginx<span class="token operator">!</span><<span class="token operator">/</span>h1>
<p><span class="token keyword">If</span> you see this page<span class="token punctuation">,</span> the nginx web server is successfully installed and
working<span class="token punctuation">.</span> Further configuration is required<span class="token punctuation">.</span><<span class="token operator">/</span>p>

<p><span class="token keyword">For</span> online documentation and support please refer to
<a href=<span class="token string">"http://nginx.org/"</span>>nginx<span class="token punctuation">.</span>org<<span class="token operator">/</span>a><span class="token punctuation">.</span><br<span class="token operator">/</span>>
Commercial support is available at
<a href=<span class="token string">"http://nginx.com/"</span>>nginx<span class="token punctuation">.</span>com<<span class="token operator">/</span>a><span class="token punctuation">.</span><<span class="token operator">/</span>p>

<p><em>Thank you <span class="token keyword">for</span> <span class="token keyword">using</span> nginx<span class="token punctuation">.</span><<span class="token operator">/</span>em><<span class="token operator">/</span>p>
<<span class="token operator">/</span>body>
<<span class="token operator">/</span>html>
</code></pre> 
  <ul> 
   <li> <h3>安装运行Tomcat容器</h3> </li> 
  </ul> 
  <pre><code class="prism language-powershell"><span class="token comment">#进入Tomcat容器</span>
<span class="token namespace">[root@iZbf2jzc4i64zvZ ~]</span><span class="token comment"># docker exec -it MyTomcat /bin/bash</span>
root@c7cf366b8a40:<span class="token operator">/</span>usr<span class="token operator">/</span>local<span class="token operator">/</span>tomcat<span class="token comment"># </span>

<span class="token comment">#查看容器目录下的文件</span>
root@c7cf366b8a40:<span class="token operator">/</span>usr<span class="token operator">/</span>local<span class="token operator">/</span>tomcat<span class="token comment"># ls</span>
BUILDING<span class="token punctuation">.</span>txt  CONTRIBUTING<span class="token punctuation">.</span>md  LICENSE  NOTICE  README<span class="token punctuation">.</span>md  RELEASE<span class="token operator">-</span>NOTES  RUNNING<span class="token punctuation">.</span>txt  bin  conf  lib  logs  native<span class="token operator">-</span>jni<span class="token operator">-</span>lib  temp  webapps  webapps<span class="token punctuation">.</span>dist  work

<span class="token comment">#拷贝webapps.dist目录下所有文件到webapps目录下</span>
root@c7cf366b8a40:<span class="token operator">/</span>usr<span class="token operator">/</span>local<span class="token operator">/</span>tomcat<span class="token comment"># cp -r webapps.dist/* webapps</span>

<span class="token comment">#去查看 拷贝过来了~!@</span>
root@c7cf366b8a40:<span class="token operator">/</span>usr<span class="token operator">/</span>local<span class="token operator">/</span>tomcat<span class="token comment"># cd webapps</span>
root@c7cf366b8a40:<span class="token operator">/</span>usr<span class="token operator">/</span>local<span class="token operator">/</span>tomcat<span class="token operator">/</span>webapps<span class="token comment"># ls</span>
ROOT  docs  examples  host<span class="token operator">-</span>manager  manager
</code></pre> 
  <p><strong>存在的问题:</strong><br>    启动后访问发现是404,去webapps目录下查看是空的,而webpass.dist目录下有,拷贝到webapps目录下 或 修改webapps.dist文件名为webapps</p> 
  <ul> 
   <li> <h3>安装运行MySQL8.0容器</h3> </li> 
  </ul> 
  <pre><code class="prism language-powershell"><span class="token comment"># MySQL8.0镜像拉取</span>
<span class="token namespace">[root@sunmmerwind ~]</span><span class="token comment"># docker pull mysql:8.0</span>
8<span class="token punctuation">.</span>0: Pulling <span class="token keyword">from</span> library<span class="token operator">/</span>mysql
Digest: sha256:04ee7141256e83797ea4a84a4d31b1f1bc10111c8d1bc1879d52729ccd19e20a
Status: Downloaded newer image <span class="token keyword">for</span> mysql:8<span class="token punctuation">.</span>0
docker<span class="token punctuation">.</span>io<span class="token operator">/</span>library<span class="token operator">/</span>mysql:8<span class="token punctuation">.</span>0
<span class="token comment"># 查看拉取镜像</span>
<span class="token namespace">[root@sunmmerwind ~]</span><span class="token comment"># docker images</span>
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
mysql         8<span class="token punctuation">.</span>0       0627ec6901db   8 days ago    556MB
<span class="token comment"># 安装</span>
<span class="token namespace">[root@sunmmerwind conf]</span><span class="token comment"># docker run -d -p 3308:3306 -v /usr/mysql/conf:/etc/mysql/conf.d -v /usr/mysql/data:/var/lib/mysql --name MySQL8.0 -e MYSQL_ROOT_PASSWORD=123456 0627ec6901db</span>
d50c00e7401eb50c8595350fde0e10003046afd8d4007a6255b899a8af9c4d19

</code></pre> 
  <blockquote> 
   <p>安装参数解释:</p> 
   <blockquote> 
    <p>-v :挂载宿主机目录和 docker容器中的目录,前面是宿主机目录,后面是容器内部目录<br> -d :后台运行容器<br> -p :映射容器端口号和宿主机端口号<br> -e :环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码<br> –name:容器名字</p> 
   </blockquote> 
  </blockquote> 
  <pre><code class="prism language-powershell"><span class="token comment"># 查看容器是否启动成功</span>
<span class="token namespace">[root@sunmmerwind conf]</span><span class="token comment"># docker ps</span>
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
d50c00e7401e   0627ec6901db   <span class="token string">"docker-entrypoint.s…"</span>   5 minutes ago   Up 5 minutes   33060<span class="token operator">/</span>tcp<span class="token punctuation">,</span> 0<span class="token punctuation">.</span>0<span class="token punctuation">.</span>0<span class="token punctuation">.</span>0:3308<span class="token operator">-</span>>3306<span class="token operator">/</span>tcp<span class="token punctuation">,</span> :::3308<span class="token operator">-</span>>3306<span class="token operator">/</span>tcp   MySQL8<span class="token punctuation">.</span>0
</code></pre> 
  <h1>五、镜像</h1> 
  <h2>1. 概念</h2> 
  <blockquote> 
   <p>镜像是一种轻量级、可执行的独立软件包。<br> 用来打包软件运行环境和基于运行环境开发的软件。<br> 它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量及配置文件。</p> 
  </blockquote> 
  <h2>2. 作用</h2> 
  <blockquote> 
   <p>开发的所有应用,直接打包成docker镜像,就可以运行起来~!<br> 方便部署和扩展~</p> 
  </blockquote> 
  <h2>3. 如何得到镜像?</h2> 
  <ul> 
   <li>远程仓库下载</li> 
   <li>朋友拷贝</li> 
   <li>自己制作</li> 
  </ul> 
  <h2>4. 镜像原理</h2> 
  <p><strong>特点:</strong><br>    Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!<br>    这一层就是我们通常说的容器层,容器之下的都叫镜像层!</p> 
  <ul> 
   <li> <h3>UnionFS(联合文件系统)</h3> </li> 
  </ul> 
  <blockquote> 
   <p>它可以把多个目录(也叫分支)内容联合挂载到同一个目录下,而目录的物理位置是分开的。<br> Union文件系统是Docker镜像的基础。<br> 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。</p> 
   <blockquote> 
    <p>白话:共用的东西,不会存在两份 相互调用。</p> 
   </blockquote> 
  </blockquote> 
  <ul> 
   <li> <h3>镜像加载原理</h3> </li> 
  </ul> 
  <ul> 
   <li><em><strong>bootfs(boot file system)</strong></em></li> 
  </ul> 
  <blockquote> 
   <p>类似电脑从黑屏到开机 中间的加载过程</p> 
  </blockquote> 
  <ul> 
   <li><em><strong>rootfs(root file system)</strong></em></li> 
  </ul> 
  <blockquote> 
   <p>类似启动后的操作系统<br> 对于精简的OS,rootfs可以很小,只需包含最基本的命令、工具和程序库就可以了。<br> 因为底层直接用主机的内核,自己只需要提供rootfs就可以了。</p> 
  </blockquote> 
  <ul> 
   <li> <h3>分层原理(Layers)</h3> </li> 
  </ul> 
  <h2>5. 提交镜像</h2> 
  <p><em><strong>命令:docker commit -a=“作者” -m=“提交的信息” 容器ID 自定义名:版本号</strong></em></p> 
  <blockquote> 
   <p>用docker images命令就可以看到我们提交的镜像了~!<br> 不是提交到远程,而是提交给本地镜像库,哈哈~!</p> 
  </blockquote> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@iZbf2jzc4i64zvZ ~]</span><span class="token comment"># docker commit -a="CoderWind" -m="add webapps content" c7cf366b8a40 mytomcat:001</span>
sha256:c521385f72166af3e027cd39b10c7b7789df82682755f1a159bc7b949cab94e2
<span class="token namespace">[root@iZbf2jzc4i64zvZ ~]</span><span class="token comment"># docker images</span>
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mytomcat            001                 c521385f7216        5 seconds ago       652MB
tomcat              latest              b4f6a90c69a4        3 days ago          647MB
nginx               latest              8cf1bfb43ff5        4 days ago          132MB
centos              latest              831691599b88        5 weeks ago         215MB
</code></pre> 
  <h1>六、容器数据卷</h1> 
  <h1>七、DockerFile</h1> 
  <h1>八、IDEA整合Docker</h1> 
  <h1>九、Docker网络</h1> 
  <h1>十、Docker集群</h1> 
  <h1>十一、Docker集群管理</h1> 
  <h1>十二、Docker持续化部署</h1> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1643047992657240064"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(Linux,docker)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1903928644879839232.htm"
                           title="Linux------Redis(软件安装,Linux下和Windows下),NoSQL(简单了解)" target="_blank">Linux------Redis(软件安装,Linux下和Windows下),NoSQL(简单了解)</a>
                        <span class="text-muted">.墨迹.</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>文章目录NoSql1.历史1.单机MySql2.Memcached(缓存)+MySql+垂直拆分(读写分离)3.分库分表+水平拆分+MySql集群4.如今最近的年代5.为什么要使用NoSQL2.什么是NoSQL1.NOSQL2.特点3.3v+3高3.NoSQL的四大分类1.kv键值对:2.文档型数据库(bson和json一样):3.列存储数据库:4.图关系型数据库Redis1.初始redis1.简</div>
                    </li>
                    <li><a href="/article/1903917033809047552.htm"
                           title="华为云计算产品系列 | 云上迁移工具RainBow实战详解" target="_blank">华为云计算产品系列 | 云上迁移工具RainBow实战详解</a>
                        <span class="text-muted">降世神童</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97%E6%8A%80%E6%9C%AF%E4%B8%93%E6%A0%8F/1.htm">云计算技术专栏</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E4%BA%91/1.htm">华为云</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>华为云计算产品系列|云上迁移工具RainBow实战详解1.迁移方案2.迁移流程3.迁移实验3.1.Windows系统迁移3.2.Linux系统迁移3.3.存储层迁移1.迁移方案  RainBow可以将物理机或者虚拟机上的业务迁移到华为的虚拟化平台和私有云平台(6.5.1以上支持),还可以实现低版本私有云迁移到高版本私有云。  Rainbow是华为自研迁移工具,支持X86架构下主流的Linux、Wi</div>
                    </li>
                    <li><a href="/article/1903910602888245248.htm"
                           title="阿里云在使用 Docker 过程中踩过的坑" target="_blank">阿里云在使用 Docker 过程中踩过的坑</a>
                        <span class="text-muted">weixin_34293059</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>昨天下午朋友在微信上丢给我一条新闻,看看,我们阿里云支持Docker企业版了。我打开一看,果然,阿里云发布了飞天敏捷版,开始支持企业级的Docker容器。美国中部时间4月19日,阿里云在容器技术大会DockerCon2017上正式推出了ApsaraStackAgility,也就是飞天的敏捷版。Docker公司首席执行官BenGolub在大会上宣布了ApsaraStackAgility的正式发布,这</div>
                    </li>
                    <li><a href="/article/1903910350567305216.htm"
                           title="linux内核路由子系统,深入理解Linux网络技术内幕——路由子系统的概念与高级路由..." target="_blank">linux内核路由子系统,深入理解Linux网络技术内幕——路由子系统的概念与高级路由...</a>
                        <span class="text-muted">罗心澄</span>
<a class="tag" taget="_blank" href="/search/linux%E5%86%85%E6%A0%B8%E8%B7%AF%E7%94%B1%E5%AD%90%E7%B3%BB%E7%BB%9F/1.htm">linux内核路由子系统</a>
                        <div>本文讨论IPv4的路由子系统。(IPv6对路由的处理不同)。基本概念路由子系统工作在三层,用来转发入口流量。路由子系统主要设计路由器、路由、路由表等概念。路由器:配备多个网络接口卡(NIC),并且能利用自身网络信息进行入口流量转发的设备。路由:流量转发,决定目的地的过程路由表:转发信息库,该库中储存路由需要本地接收还是转发的信息,以及转发流量时所需要的信息。(即,信息库用来判断,要不要转发,如果要</div>
                    </li>
                    <li><a href="/article/1903910097915015168.htm"
                           title="Linux 内核数据结构解析--哈希链表" target="_blank">Linux 内核数据结构解析--哈希链表</a>
                        <span class="text-muted">Black8Mamba24</span>
<a class="tag" taget="_blank" href="/search/Linux%E5%86%85%E6%A0%B8%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">Linux内核数据结构</a>
                        <div>一、Hash表的基本定义1.1Hash的概念散列表(Hashtable,也叫哈希表),是一种数据结构,可以用于存储Key-Value键值对。也就是说,通过Key来映射到具体的Value。通常用于查找。将Key映射到Value的函数叫做Hash函数,而存储Key-Value的表叫做Hash表。Hasn表常用数组来存储。1.2常用的Hash函数1.3常用的处理碰撞的方法如果说存储空间是无线的,那只要定</div>
                    </li>
                    <li><a href="/article/1903907574500093952.htm"
                           title="深度剖析linux内核万能--双向链表,Hash链表模版" target="_blank">深度剖析linux内核万能--双向链表,Hash链表模版</a>
                        <span class="text-muted">Engineer-Bruce_Yang</span>
<a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80-%E7%AE%97%E6%B3%95%E4%B8%8E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%BC%96%E7%A8%8B/1.htm">C语言-算法与数据结构编程</a><a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80%E5%9C%A8%E5%BC%80%E5%8F%91%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8/1.htm">C语言在开发中的应用</a>
                        <div>我们都知道,链表是数据结构中用得最广泛的一种数据结构,对于数据结构,有顺序存储,数组就是一种。有链式存储,链表算一种。当然还有索引式的,散列式的,各种风格的说法,叫法层出不穷,但是万变不离其中,只要知道什么场合用什么样的数据结构,那就行了。那么,标题说的内核万能链表,其实就是内核链表,它到底和我们平常大学学的数据结构的链表有什么不同呢??内核链表,是在linux内核里的一种普遍存在的数据结构,比如</div>
                    </li>
                    <li><a href="/article/1903905933185052672.htm"
                           title="Linux内核中的数据结构与算法(三)哈希链表" target="_blank">Linux内核中的数据结构与算法(三)哈希链表</a>
                        <span class="text-muted">木木0o0欧尼</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>四,哈希链表谈到链表就不得不谈Linux内核中另外一个重要的结构,哈希链表。讨论这个结构前,你需要对哈希的最基本的概念要清楚哦,由于我们已经讲过Linux内核中的普通链表的结构,这里我们对比他们的区别来了解哈希链表会直观一些。Linux链表认为双指针表头双循环链表对于HASH表来说过于浪费,因而设计了一套用于HASH表的hlist的数据结构,单指针表头双循环链表。hlish表头仅有一个指向首节点的</div>
                    </li>
                    <li><a href="/article/1903905681010913280.htm"
                           title="Linux内核网络源码分析——发送数据" target="_blank">Linux内核网络源码分析——发送数据</a>
                        <span class="text-muted">hellolwl</span>
<a class="tag" taget="_blank" href="/search/Android%2FLinux/1.htm">Android/Linux</a><a class="tag" taget="_blank" href="/search/linux%E5%86%85%E6%A0%B8/1.htm">linux内核</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/struct/1.htm">struct</a><a class="tag" taget="_blank" href="/search/output/1.htm">output</a><a class="tag" taget="_blank" href="/search/socket/1.htm">socket</a><a class="tag" taget="_blank" href="/search/constructor/1.htm">constructor</a>
                        <div>原文地址:http://www.penna.cn/blog/?p=218UDP发送:|sys_writefs/read_write.c|sock_writevnet/socket.c|sock_sendmsgnet/socket.c|inet_sendmsgnet/ipv4/af_inet.c|udp_sendmsgnet/ipv4/udp.c|ip_build_xmitnet/ipv4/ip_o</div>
                    </li>
                    <li><a href="/article/1903896851413790720.htm"
                           title="Centos使用docker搭建Graylog日志平台" target="_blank">Centos使用docker搭建Graylog日志平台</a>
                        <span class="text-muted">moxiaoran5753</span>
<a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/graylog/1.htm">graylog</a>
                        <div>日志管理系统有很多,比如ELK,Graylog,Loki+Grafana+Promtail适用场景:1.如果需求复杂,服务器资源不受限制,推荐使用ELK(Logstash+Elasticsearch+Kibana)方案;2.如果需求仅是将不同服务器上的日志采集上来集中展示和检索,且需要一个轻量级的框架,那使用PLG(Promtail+Loki+Grafana)最合适不过了。3.Graylog专注于</div>
                    </li>
                    <li><a href="/article/1903895456547663872.htm"
                           title="一文读懂 Linux 下 Docker 搭建及简单应用" target="_blank">一文读懂 Linux 下 Docker 搭建及简单应用</a>
                        <span class="text-muted">Waitccy</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>一、引言在Linux系统的运维与开发场景中,Docker凭借其高效的容器化技术,极大地简化了应用部署与管理流程。它打破了传统环境配置的复杂性,实现应用及其依赖的封装,确保在不同环境中稳定运行。本文将详细介绍在Linux系统下搭建Docker的步骤,并通过几个简单应用示例,带你快速上手Docker。二、Linux下Docker搭建(一)准备工作系统要求:建议使用主流的Linux发行版,如Ubuntu</div>
                    </li>
                    <li><a href="/article/1903893816243449856.htm"
                           title="docker(10、日志管理4)5、Graylog 日志系统(1、部署Graylog日志系统,2、Graylog管理日志)" target="_blank">docker(10、日志管理4)5、Graylog 日志系统(1、部署Graylog日志系统,2、Graylog管理日志)</a>
                        <span class="text-muted">junior1206</span>
<a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a>
                        <div>部署Graylog日志系统Graylog是与ELK可以相提并论的一款几种式日志管理方案,支持数据收集、检索、可视化Dashboard。将实践用Graylog来管理Docker日志Graylog架构Graylog架构如下图所示:Graylog负责接收来自各种设备和应用的日志,并未用户提供Web访问接口。Elasticsearch用于索引和保存Graylog接收到的日志MongoDB负责保存Grayl</div>
                    </li>
                    <li><a href="/article/1903887513613824000.htm"
                           title="linux服务器上的项目读取本地文件,java访问linux服务器读取文件路径" target="_blank">linux服务器上的项目读取本地文件,java访问linux服务器读取文件路径</a>
                        <span class="text-muted">防晒霜白癜风患者</span>

                        <div>java访问linux服务器读取文件路径内容精选换一换通过ADC将文件传输到Host。参见准备环境完成环境配置。以运行用户登录安装Toolkit组件的服务器。执行命令,将A.java文件传输到Host的指定路径下。adc--hostxx.xx.xx.xx:22118--sync/tmp/A.java"~/ide_daemon"将xx.xx.xx.xx替换为实际的Host的IP地址。如果Conv2D</div>
                    </li>
                    <li><a href="/article/1903882461343969280.htm"
                           title="node-imap-sync-client, imap 客户端库, 同步专用" target="_blank">node-imap-sync-client, imap 客户端库, 同步专用</a>
                        <span class="text-muted">eli960</span>
<a class="tag" taget="_blank" href="/search/MAIL/1.htm">MAIL</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a>
                        <div>node-imap-sync-client说明网址:https://gitee.com/linuxmail/node-imap-sync-client同步操作imap客户端,见例子examples本imap客户端,特点:全部命令都是promise风格主要用于和IMAPD服务器同步邮箱数据和邮件数据支持文件夹的创建/删除/移动(改名)支持邮件的复制/移动/删除/标记/上传支持获取文件夹下邮件UID列</div>
                    </li>
                    <li><a href="/article/1903882334751485952.htm"
                           title="node-ddk, electron 组件,任务栏,托盘,通知" target="_blank">node-ddk, electron 组件,任务栏,托盘,通知</a>
                        <span class="text-muted">eli960</span>
<a class="tag" taget="_blank" href="/search/node-ddk/1.htm">node-ddk</a><a class="tag" taget="_blank" href="/search/electron/1.htm">electron</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a>
                        <div>node-ddk任务栏,托盘,通知https://blog.csdn.net/eli960/article/details/146207062也可以下载demo直接演示http://linuxmail.cn/go#node-ddk在渲染进程(既web端)操作importrenderer,{NODEDDK}from"node-ddk/renderer"letw=renderer.window//让托</div>
                    </li>
                    <li><a href="/article/1903882333862293504.htm"
                           title="node-ddk,electron 开发组件" target="_blank">node-ddk,electron 开发组件</a>
                        <span class="text-muted">eli960</span>
<a class="tag" taget="_blank" href="/search/node-ddk/1.htm">node-ddk</a><a class="tag" taget="_blank" href="/search/electron/1.htm">electron</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a>
                        <div>node-ddk-demo说明node-ddk是ELECTRON开发框架,封装常见操作npminode-ddk演示:https://live.csdn.net/v/468440本项目是一个DEMO,项目地址:https://gitee.com/linuxmail/node-ddk-demogitclonehttps://gitee.com/linuxmail/node-ddk-democdnode</div>
                    </li>
                    <li><a href="/article/1903879057762742272.htm"
                           title="pdm self update 504 gateway timeout" target="_blank">pdm self update 504 gateway timeout</a>
                        <span class="text-muted">waketzheng</span>
<a class="tag" taget="_blank" href="/search/gateway/1.htm">gateway</a>
                        <div>红军不怕远征难,万里长城今犹在,不见当年秦始皇执行如下命令:pdmselfupdate--verbose时,报了504gatewaytimeout的错误症状:使用的是内网环境的pypimirror,本地Windows有这个问题,服务器Linux系统没有这个问题。经过层层排查,发现是httpx在windows环境读取了注册表里的ProxyServer,但是没有读取ProxyOverride,导致内网</div>
                    </li>
                    <li><a href="/article/1903878931484831744.htm"
                           title="node-ddk, electron组件, 自定义本地文件协议,打开本地文件" target="_blank">node-ddk, electron组件, 自定义本地文件协议,打开本地文件</a>
                        <span class="text-muted">eli960</span>
<a class="tag" taget="_blank" href="/search/node-ddk/1.htm">node-ddk</a><a class="tag" taget="_blank" href="/search/electron/1.htm">electron</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a>
                        <div>node-ddk文件协议https://blog.csdn.net/eli960/article/details/146207062也可以下载demo直接演示http://linuxmail.cn/go#node-ddk安全考虑到安全,本系统禁止使用file:///在主窗口,自定义文件协议,可以多个importmain,{NODEDDK}from"node-ddk/main"main.protoc</div>
                    </li>
                    <li><a href="/article/1903872496633966592.htm"
                           title="区块链环境配置自用" target="_blank">区块链环境配置自用</a>
                        <span class="text-muted">Xmas190</span>
<a class="tag" taget="_blank" href="/search/%E5%85%B6%E5%AE%83/1.htm">其它</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a>
                        <div>FabricLab1.Fabric环境搭建与基本操作2.Fabric链码基础3.Fabric项目架构Fabric实践一:环境搭建与基本操作一、Fabric环境搭建本文用于指导Fabric在基于Ubuntu的Linux系统中的安装与配置,如有未安装过的同学可以参考本指南自行配置。相关组件版本号:名称版本Ubuntu16.04Fabric1.4Docker20.10.5Docker-compose1.</div>
                    </li>
                    <li><a href="/article/1903870731561791488.htm"
                           title="CentOS 7 64位安装Docker" target="_blank">CentOS 7 64位安装Docker</a>
                        <span class="text-muted">咯拉咯啦</span>
<a class="tag" taget="_blank" href="/search/Docker/1.htm">Docker</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a>
                        <div>以下是在已有的CentOS764位虚拟机上安装Docker并配置华为镜像源的详细步骤:1.备份原有Yum源(可选,建议操作)#备份原有仓库文件sudomv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backup2.更换CentOS7Yum源为华为源#下载华为云CentOS7的仓库文件sudocurl-o/et</div>
                    </li>
                    <li><a href="/article/1903868462443327488.htm"
                           title="RK平台下Buildroot驱动编译环境入门" target="_blank">RK平台下Buildroot驱动编译环境入门</a>
                        <span class="text-muted">ItJavawfc</span>
<a class="tag" taget="_blank" href="/search/RK%E7%B3%BB%E7%BB%9F-%E9%A9%B1%E5%8A%A8/1.htm">RK系统-驱动</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E5%8A%A8%E5%AD%A6%E4%B9%A0/1.htm">驱动学习</a><a class="tag" taget="_blank" href="/search/Kernel/1.htm">Kernel</a><a class="tag" taget="_blank" href="/search/Ubuntu/1.htm">Ubuntu</a><a class="tag" taget="_blank" href="/search/Buildroot/1.htm">Buildroot</a>
                        <div>提示:低配置电脑下驱动编译环境搭建,驱动学习环境准备文章目录目的需求环境Ubuntu18Desk桌面开发环境Buildroot编译环境基本要求个人环境VM环境配置+Buildroot编译环境配置Buildroot编译总结目的搭建驱动开发编译环境硬件环境要求不达标如何进行配置规避,使编译环境编译OK为后续自己开发工作中,学习环境做一个简单的指导需求这里我需要搭建的环境是Ubuntu上面用Linux源</div>
                    </li>
                    <li><a href="/article/1903854715993649152.htm"
                           title="编译乱序 vs 执行乱序" target="_blank">编译乱序 vs 执行乱序</a>
                        <span class="text-muted">三境界</span>
<a class="tag" taget="_blank" href="/search/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">操作系统</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">驱动开发</a>
                        <div>背景今天留意了一下linux内核对writel和readl的实现,涉及到了dmb,imb这类屏障指令,过去对这类机制的了解比较模糊,所以查阅了一些资料,做一下记录。#if__LINUX_ARM_ARCH__>=7#defineisb(option)__asm____volatile__("isb"#option:::"memory")#definedsb(option)__asm____volat</div>
                    </li>
                    <li><a href="/article/1903853327066656768.htm"
                           title="Qemu&KVM 第一篇 (3)QEMU 架构" target="_blank">Qemu&KVM 第一篇 (3)QEMU 架构</a>
                        <span class="text-muted">weixin_34160277</span>
<a class="tag" taget="_blank" href="/search/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">操作系统</a>
                        <div>QEMU架构我们首先了解一下QEMU如何实现仿真。本节将介绍QEMU的两种操作模式,以及QEMU动态翻译程序的一些有趣特点。QEMU基本操作QEMU支持两种操作模式:用户模式仿真和系统模式仿真。用户模式仿真允许一个CPU构建的进程在另一个CPU上执行(执行主机CPU指令的动态翻译并相应地转换Linux系统调用)。系统模式仿真允许对整个系统进行仿真,包括处理器和配套的外围设备。在x86主机系统上仿真</div>
                    </li>
                    <li><a href="/article/1903851055628742656.htm"
                           title="QEMU源码全解析 —— CPU虚拟化(12)" target="_blank">QEMU源码全解析 —— CPU虚拟化(12)</a>
                        <span class="text-muted">蓝天居士</span>
<a class="tag" taget="_blank" href="/search/QEMU%2FKVM/1.htm">QEMU/KVM</a><a class="tag" taget="_blank" href="/search/QEMU/1.htm">QEMU</a><a class="tag" taget="_blank" href="/search/KVM/1.htm">KVM</a><a class="tag" taget="_blank" href="/search/CPU%E8%99%9A%E6%8B%9F%E5%8C%96/1.htm">CPU虚拟化</a>
                        <div>接前一篇文章:本文内容参考:《趣谈Linux操作系统》——刘超,极客时间《QEMU/KVM》源码解析与应用——李强,机械工业出版社《深度探索Linux系统虚拟化原理与实现》——王柏生谢广军,机械工业出版社特此致谢!三、KVM模块初始化介绍1.KVM简介与源码组织结构KVM全称为Kernel-BasedVirtualMachine,中文译为基于内核的虚拟化技术。KVM是由以色列初创公司Qumrane</div>
                    </li>
                    <li><a href="/article/1903846389566205952.htm"
                           title="Docker 容器基础技术:namespace" target="_blank">Docker 容器基础技术:namespace</a>
                        <span class="text-muted">寻雾&启示</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>在容器内进程是隔离的,比如容器有自己的网络和文件系统,容器内进程的PID为1,这些都是依赖于Linuxnamespace所提供的隔离机制。本篇我们来了解下Linux有哪些namespace,以及它们是如何实现隔离的。文中案例代码均由ChatGPT生成,在Linux内核5.15.0-124-generic,ubuntu22.04LTS系统上测试通过。namespace类型每个进程都有自己所属的nam</div>
                    </li>
                    <li><a href="/article/1903845003264847872.htm"
                           title="Linux系统编程:目录操作、文件权限与库管理" target="_blank">Linux系统编程:目录操作、文件权限与库管理</a>
                        <span class="text-muted">网恋东雪莲被骗114514</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>Linux系统编程:目录操作、文件权限与库管理目录的读取在Linux系统编程中,目录操作是常见的任务之一。以下是用于目录操作的核心函数及其用法:1.opendir功能:打开一个目录,返回指向目录流的指针。原型:#includeDIR*opendir(constchar*name);参数:name:目录路径字符串。返回值:成功:返回DIR*指针;失败返回NULL。示例:DIR*dir=opendir</div>
                    </li>
                    <li><a href="/article/1903825584694292480.htm"
                           title="Linux脚本实践1" target="_blank">Linux脚本实践1</a>
                        <span class="text-muted">一点多余.</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a>
                        <div>前言日常在Liunx中用到多个版本的java修改很麻烦,一个脚本搞定。1.准备两个jdk(如下图所示)2.准备脚本文件viswitch_jdk.sh#!/bin/bash#提示用户输入JDK路径read-p"请输入JDK的绝对路径(例如/usr/local/jdk/jdk-11.0.21):"jdk_path#检查输入的路径是否存在if[!-d"$jdk_path"];thenecho"错误:路径</div>
                    </li>
                    <li><a href="/article/1903822055128756224.htm"
                           title="Windows10本地部署Dify+Xinference" target="_blank">Windows10本地部署Dify+Xinference</a>
                        <span class="text-muted">橘长长长</span>
<a class="tag" taget="_blank" href="/search/AI%E7%9B%B8%E5%85%B3/1.htm">AI相关</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a><a class="tag" taget="_blank" href="/search/dify/1.htm">dify</a><a class="tag" taget="_blank" href="/search/xinference/1.htm">xinference</a><a class="tag" taget="_blank" href="/search/glm4/1.htm">glm4</a>
                        <div>目录前言一、安装必要项1.安装Docker和AnaConda2.安装Xinference3.通过Xinference部署本地glm4-chat-1m4.验证glm4-chat-1m是否部署完成5.安装Dify三、Dify中配置大模型1.浏览器输入http://localhost:80启动Dify页面2.随便注册账户登录3.配置Xinference四、运行Dify1.设置系统推理模型2.对话窗口验证</div>
                    </li>
                    <li><a href="/article/1903821676244692992.htm"
                           title="Docker之安装与配置" target="_blank">Docker之安装与配置</a>
                        <span class="text-muted">雨五夜</span>
<a class="tag" taget="_blank" href="/search/Docker/1.htm">Docker</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>Docker之安装与配置一、Docker环境配置1.基本配置2.镜像加速3.网络配置4.数据持久化5.优化建议6.常见问题与解决方案7.补充工具二、Docker配置本地仓库指南1.拉取Registry镜像2.启动本地仓库3.配置Docker客户端Linux/macOSWindows4.推送镜像到本地仓库标记镜像推送镜像5.推送镜像到本地仓库6.管理本地仓库7.优化与安全性8.常见问题一、Docke</div>
                    </li>
                    <li><a href="/article/1903820538418098176.htm"
                           title="Linux中的 mutex [二] —— 乐观自旋机制" target="_blank">Linux中的 mutex [二] —— 乐观自旋机制</a>
                        <span class="text-muted">jianchi88</span>
<a class="tag" taget="_blank" href="/search/%E5%86%85%E6%A0%B8%E5%90%8C%E6%AD%A5/1.htm">内核同步</a><a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/%E7%A8%B3%E5%AE%9A%E6%80%A7/1.htm">稳定性</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a>
                        <div>本文基于5.4.86版本内核mutex可视作是spinlock的可睡眠版本,同样是线程无法继续向前执行,但spinlock是"spin",导致该CPU上无法发生线程切换,而mutex是"block"(我们通常翻译成「阻塞」),可以发生线程切换,让所在CPU上的其他线程继续执行。阻塞既可以发生在线程试图获取mutex时,也可以发生在线程持有mutex时。现在的mutex机制,要从这几方面纬度理解:o</div>
                    </li>
                    <li><a href="/article/1903817384968384512.htm"
                           title="Linux中mutex机制" target="_blank">Linux中mutex机制</a>
                        <span class="text-muted">C嘎嘎嵌入式开发</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>在Linux中,mutex是一种用于多线程编程的同步机制,用于保护共享资源,防止多个线程同时访问或修改这些资源,从而避免竞态条件的发生。mutex是“mutualexclusion”的缩写,意为“互斥”。1.Mutex的基本概念互斥锁:mutex是一种锁机制,用于确保在任何时刻只有一个线程可以访问共享资源。当一个线程持有mutex时,其他试图获取该mutex的线程将被阻塞,直到持有mutex的线程</div>
                    </li>
                                <li><a href="/article/22.htm"
                                       title="redis学习笔记——不仅仅是存取数据" target="_blank">redis学习笔记——不仅仅是存取数据</a>
                                    <span class="text-muted">Everyday都不同</span>
<a class="tag" taget="_blank" href="/search/returnSource/1.htm">returnSource</a><a class="tag" taget="_blank" href="/search/expire%2Fdel/1.htm">expire/del</a><a class="tag" taget="_blank" href="/search/incr%2Flpush/1.htm">incr/lpush</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%88%86%E5%8C%BA/1.htm">数据库分区</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a>
                                    <div>最近项目中用到比较多redis,感觉之前对它一直局限于get/set数据的层面。其实作为一个强大的NoSql数据库产品,如果好好利用它,会带来很多意想不到的效果。(因为我搞java,所以就从jedis的角度来补充一点东西吧。PS:不一定全,只是个人理解,不喜勿喷) 
  
1、关于JedisPool.returnSource(Jedis jeids) 
  
这个方法是从red</div>
                                </li>
                                <li><a href="/article/149.htm"
                                       title="SQL性能优化-持续更新中。。。。。。" target="_blank">SQL性能优化-持续更新中。。。。。。</a>
                                    <span class="text-muted">atongyeye</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a>
                                    <div>1 通过ROWID访问表--索引 
你可以采用基于ROWID的访问方式情况,提高访问表的效率, , ROWID包含了表中记录的物理位置信息..ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系. 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高. 
 
2 共享SQL语句--相同的sql放入缓存 
 
3 选择最有效率的表</div>
                                </li>
                                <li><a href="/article/276.htm"
                                       title="[JAVA语言]JAVA虚拟机对底层硬件的操控还不完善" target="_blank">[JAVA语言]JAVA虚拟机对底层硬件的操控还不完善</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/JAVA%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">JAVA虚拟机</a>
                                    <div> 
     如果我们用汇编语言编写一个直接读写CPU寄存器的代码段,然后利用这个代码段去控制被操作系统屏蔽的硬件资源,这对于JVM虚拟机显然是不合法的,对操作系统来讲,这样也是不合法的,但是如果是一个工程项目的确需要这样做,合同已经签了,我们又不能够这样做,怎么办呢? 那么一个精通汇编语言的那种X客,是否在这个时候就会发生某种至关重要的作用呢? 
 
&n</div>
                                </li>
                                <li><a href="/article/403.htm"
                                       title="lvs- real" target="_blank">lvs- real</a>
                                    <span class="text-muted">男人50</span>
<a class="tag" taget="_blank" href="/search/LVS/1.htm">LVS</a>
                                    <div>#!/bin/bash 
# 
# Script to start LVS DR real server. 
# description: LVS DR real server 
# 
#.  /etc/rc.d/init.d/functions 
 
VIP=10.10.6.252 
host='/bin/hostname' 
 
case "$1" in 
sta</div>
                                </li>
                                <li><a href="/article/530.htm"
                                       title="生成公钥和私钥" target="_blank">生成公钥和私钥</a>
                                    <span class="text-muted">oloz</span>
<a class="tag" taget="_blank" href="/search/DSA/1.htm">DSA</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8%E5%8A%A0%E5%AF%86/1.htm">安全加密</a>
                                    <div>package com.msserver.core.util;

import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;

public class SecurityUtil {
</div>
                                </li>
                                <li><a href="/article/657.htm"
                                       title="UIView 中加入的cocos2d,背景透明" target="_blank">UIView 中加入的cocos2d,背景透明</a>
                                    <span class="text-muted">374016526</span>
<a class="tag" taget="_blank" href="/search/cocos2d/1.htm">cocos2d</a><a class="tag" taget="_blank" href="/search/glClearColor/1.htm">glClearColor</a>
                                    <div>要点是首先pixelFormat:kEAGLColorFormatRGBA8,必须有alpha层才能透明。然后view设置为透明glView.opaque = NO;[director setOpenGLView:glView];[self.viewController.view setBackgroundColor:[UIColor clearColor]];[self.viewControll</div>
                                </li>
                                <li><a href="/article/784.htm"
                                       title="mysql常用命令" target="_blank">mysql常用命令</a>
                                    <span class="text-muted">香水浓</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>连接数据库 
mysql -u troy -ptroy 
 
备份表 
mysqldump -u troy -ptroy mm_database mm_user_tbl > user.sql 
 
恢复表(与恢复数据库命令相同) 
mysql -u troy -ptroy mm_database < user.sql 
 
备份数据库 
mysqldump -u troy -ptroy</div>
                                </li>
                                <li><a href="/article/911.htm"
                                       title="我的架构经验系列文章 - 后端架构 - 系统层面" target="_blank">我的架构经验系列文章 - 后端架构 - 系统层面</a>
                                    <span class="text-muted">agevs</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a>
                                    <div>系统层面:
高可用性

所谓高可用性也就是通过避免单独故障加上快速故障转移实现一旦某台物理服务器出现故障能实现故障快速恢复。一般来说,可以采用两种方式,如果可以做业务可以做负载均衡则通过负载均衡实现集群,然后针对每一台服务器进行监控,一旦发生故障则从集群中移除;如果业务只能有单点入口那么可以通过实现Standby机加上虚拟IP机制,实现Active机在出现故障之后虚拟IP转移到Standby的快速</div>
                                </li>
                                <li><a href="/article/1038.htm"
                                       title="利用ant进行远程tomcat部署" target="_blank">利用ant进行远程tomcat部署</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a>
                                    <div>在javaEE项目中,需要将工程部署到远程服务器上,如果部署的频率比较高,手动部署的方式就比较麻烦,可以利用Ant工具实现快捷的部署。这篇博文详细介绍了ant配置的步骤(http://www.cnblogs.com/GloriousOnion/archive/2012/12/18/2822817.html),但是在tomcat7以上不适用,需要修改配置,具体如下: 
1.配置tomcat的用户角色</div>
                                </li>
                                <li><a href="/article/1165.htm"
                                       title="获取复利总收入" target="_blank">获取复利总收入</a>
                                    <span class="text-muted">baalwolf</span>
<a class="tag" taget="_blank" href="/search/%E8%8E%B7%E5%8F%96/1.htm">获取</a>
                                    <div>       public static void main(String args[]){ 
        int money=200; 
        int year=1; 
        double rate=0.1; 
&</div>
                                </li>
                                <li><a href="/article/1292.htm"
                                       title="eclipse.ini解释" target="_blank">eclipse.ini解释</a>
                                    <span class="text-muted">BigBird2012</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a>
                                    <div>大多数java开发者使用的都是eclipse,今天感兴趣去eclipse官网搜了一下eclipse.ini的配置,供大家参考,我会把关键的部分给大家用中文解释一下。还是推荐有问题不会直接搜谷歌,看官方文档,这样我们会知道问题的真面目是什么,对问题也有一个全面清晰的认识。 
Overview 
1、Eclipse.ini的作用 
Eclipse startup is controlled by th</div>
                                </li>
                                <li><a href="/article/1419.htm"
                                       title="AngularJS实现分页功能" target="_blank">AngularJS实现分页功能</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E9%A1%B5/1.htm">分页</a>
                                    <div>        对于大多数web应用来说显示项目列表是一种很常见的任务。通常情况下,我们的数据会比较多,无法很好地显示在单个页面中。在这种情况下,我们需要把数据以页的方式来展示,同时带有转到上一页和下一页的功能。既然在整个应用中这是一种很常见的需求,那么把这一功能抽象成一个通用的、可复用的分页(Paginator)服务是很有意义的。 
  &nbs</div>
                                </li>
                                <li><a href="/article/1546.htm"
                                       title="[Maven学习笔记三]Maven archetype" target="_blank">[Maven学习笔记三]Maven archetype</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/ArcheType/1.htm">ArcheType</a>
                                    <div>archetype的英文意思是原型,Maven archetype表示创建Maven模块的模版,比如创建web项目,创建Spring项目等等. 
  
mvn archetype提供了一种命令行交互式创建Maven项目或者模块的方式, 
  
mvn archetype 
  
1.在LearnMaven-ch03目录下,执行命令mvn archetype:gener</div>
                                </li>
                                <li><a href="/article/1673.htm"
                                       title="【Java命令三】jps" target="_blank">【Java命令三】jps</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Java%E5%91%BD%E4%BB%A4/1.htm">Java命令</a>
                                    <div>jps很简单,用于显示当前运行的Java进程,也可以连接到远程服务器去查看 
  
[hadoop@hadoop bin]$ jps -help
usage: jps [-help]
       jps [-q] [-mlvV] [<hostid>]

Definitions:
    <hostid>:      <hostname>[:</div>
                                </li>
                                <li><a href="/article/1800.htm"
                                       title="ZABBIX2.2 2.4 等各版本之间的兼容性" target="_blank">ZABBIX2.2 2.4 等各版本之间的兼容性</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>zabbix更新很快,从2009年到现在已经更新多个版本,为了使用更多zabbix的新特性,随之而来的便是升级版本,zabbix版本兼容性是必须优先考虑的一点 客户端AGENT兼容 
zabbix1.x到zabbix2.x的所有agent都兼容zabbix server2.4:如果你升级zabbix server,客户端是可以不做任何改变,除非你想使用agent的一些新特性。 Zabbix代理(p</div>
                                </li>
                                <li><a href="/article/1927.htm"
                                       title="unity 3d还是cocos2dx哪个适合游戏?" target="_blank">unity 3d还是cocos2dx哪个适合游戏?</a>
                                    <span class="text-muted">brotherlamp</span>
<a class="tag" taget="_blank" href="/search/unity%E8%87%AA%E5%AD%A6/1.htm">unity自学</a><a class="tag" taget="_blank" href="/search/unity%E6%95%99%E7%A8%8B/1.htm">unity教程</a><a class="tag" taget="_blank" href="/search/unity%E8%A7%86%E9%A2%91/1.htm">unity视频</a><a class="tag" taget="_blank" href="/search/unity%E8%B5%84%E6%96%99/1.htm">unity资料</a><a class="tag" taget="_blank" href="/search/unity/1.htm">unity</a>
                                    <div>unity 3d还是cocos2dx哪个适合游戏? 
问:unity 3d还是cocos2dx哪个适合游戏? 
答:首先目前来看unity视频教程因为是3d引擎,目前对2d支持并不完善,unity 3d 目前做2d普遍两种思路,一种是正交相机,3d画面2d视角,另一种是通过一些插件,动态创建mesh来绘制图形单元目前用的较多的是2d toolkit,ex2d,smooth moves,sm2, 
</div>
                                </li>
                                <li><a href="/article/2054.htm"
                                       title="百度笔试题:一个已经排序好的很大的数组,现在给它划分成m段,每段长度不定,段长最长为k,然后段内打乱顺序,请设计一个算法对其进行重新排序" target="_blank">百度笔试题:一个已经排序好的很大的数组,现在给它划分成m段,每段长度不定,段长最长为k,然后段内打乱顺序,请设计一个算法对其进行重新排序</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E7%99%BE%E5%BA%A6/1.htm">百度</a><a class="tag" taget="_blank" href="/search/%E6%8B%9B%E8%81%98/1.htm">招聘</a>
                                    <div>

import java.util.Arrays;

/**
 * 最早是在陈利人老师的微博看到这道题:
 * #面试题#An array with n elements which is K most sorted,就是每个element的初始位置和它最终的排序后的位置的距离不超过常数K
 * 设计一个排序算法。It should be faster than O(n*lgn)。</div>
                                </li>
                                <li><a href="/article/2181.htm"
                                       title="获取checkbox复选框的值" target="_blank">获取checkbox复选框的值</a>
                                    <span class="text-muted">chiangfai</span>
<a class="tag" taget="_blank" href="/search/checkbox/1.htm">checkbox</a>
                                    <div><title>CheckBox</title>
  <script type = "text/javascript">
	doGetVal: function  doGetVal()
	{
		//var fruitName = document.getElementById("apple").value;//根据</div>
                                </li>
                                <li><a href="/article/2308.htm"
                                       title="MySQLdb用户指南" target="_blank">MySQLdb用户指南</a>
                                    <span class="text-muted">chenchao051</span>
<a class="tag" taget="_blank" href="/search/mysqldb/1.htm">mysqldb</a>
                                    <div>原网页被墙,放这里备用。  MySQLdb User's Guide  
Contents 
 
 Introduction 
 Installation 
  _mysql 
   
   MySQL C API translation 
   MySQL C API function mapping 
   Some _mysql examples 
    
  MySQLdb 
   
 </div>
                                </li>
                                <li><a href="/article/2435.htm"
                                       title="HIVE 窗口及分析函数" target="_blank">HIVE 窗口及分析函数</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/%E7%AA%97%E5%8F%A3%E5%87%BD%E6%95%B0/1.htm">窗口函数</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E6%9E%90%E5%87%BD%E6%95%B0/1.htm">分析函数</a>
                                    <div>窗口函数应用场景: 
(1)用于分区排序 
(2)动态Group By 
(3)Top N 
(4)累计计算 
(5)层次查询 
 
一、分析函数 
用于等级、百分点、n分片等。 
函数             说明 
RANK()     &nbs</div>
                                </li>
                                <li><a href="/article/2562.htm"
                                       title="PHP ZipArchive 实现压缩解压Zip文件" target="_blank">PHP ZipArchive 实现压缩解压Zip文件</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/zip/1.htm">zip</a>
                                    <div>  
PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流。这里整理一下常用的示例供参考。 
一、解压缩zip文件        01   02   03   04   05   06   07   08   09   10   11   </div>
                                </li>
                                <li><a href="/article/2689.htm"
                                       title="精彩英语贺词" target="_blank">精彩英语贺词</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E8%8B%B1%E8%AF%AD/1.htm">英语</a>
                                    <div>I'm always here  
            我会一直在这里支持你  
              &nb</div>
                                </li>
                                <li><a href="/article/2816.htm"
                                       title="基于Java注解的Spring的IoC功能" target="_blank">基于Java注解的Spring的IoC功能</a>
                                    <span class="text-muted">e200702084</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/IOC/1.htm">IOC</a><a class="tag" taget="_blank" href="/search/Office/1.htm">Office</a>
                                    <div>                                
  </div>
                                </li>
                                <li><a href="/article/2943.htm"
                                       title="java模拟post请求" target="_blank">java模拟post请求</a>
                                    <span class="text-muted">geeksun</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>一般API接收客户端(比如网页、APP或其他应用服务)的请求,但在测试时需要模拟来自外界的请求,经探索,使用HttpComponentshttpClient可模拟Post提交请求。  此处用HttpComponents的httpclient来完成使命。   
import org.apache.http.HttpEntity ;
import org.apache.http.HttpRespon</div>
                                </li>
                                <li><a href="/article/3070.htm"
                                       title="Swift语法之 ---- ?和!区别" target="_blank">Swift语法之 ---- ?和!区别</a>
                                    <span class="text-muted">hongtoushizi</span>
<a class="tag" taget="_blank" href="/search/%3F/1.htm">?</a><a class="tag" taget="_blank" href="/search/swift/1.htm">swift</a><a class="tag" taget="_blank" href="/search/%21/1.htm">!</a>
                                    <div>转载自: http://blog.sina.com.cn/s/blog_71715bf80102ux3v.html 
  
Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化。如果在使用变量之前不进行初始化就会报错:  
var stringValue : String 
//</div>
                                </li>
                                <li><a href="/article/3197.htm"
                                       title="centos7安装jdk1.7" target="_blank">centos7安装jdk1.7</a>
                                    <span class="text-muted">jisonami</span>
<a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a>
                                    <div>安装JDK1.7 
步骤1、解压tar包在当前目录 
[root@localhost usr]#tar -xzvf jdk-7u75-linux-x64.tar.gz 
步骤2:配置环境变量 
在etc/profile文件下添加 
export JAVA_HOME=/usr/java/jdk1.7.0_75 
export CLASSPATH=/usr/java/jdk1.7.0_75/lib 
</div>
                                </li>
                                <li><a href="/article/3324.htm"
                                       title="数据源架构模式之数据映射器" target="_blank">数据源架构模式之数据映射器</a>
                                    <span class="text-muted">home198979</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%98%A0%E5%B0%84%E5%99%A8/1.htm">数据映射器</a><a class="tag" taget="_blank" href="/search/datamapper/1.htm">datamapper</a>
                                    <div>前面分别介绍了数据源架构模式之表数据入口、数据源架构模式之行和数据入口数据源架构模式之活动记录,相较于这三种数据源架构模式,数据映射器显得更加“高大上”。 
  
一、概念 
数据映射器(Data Mapper):在保持对象和数据库(以及映射器本身)彼此独立的情况下,在二者之间移动数据的一个映射器层。概念永远都是抽象的,简单的说,数据映射器就是一个负责将数据映射到对象的类数据。 
&nb</div>
                                </li>
                                <li><a href="/article/3451.htm"
                                       title="在Python中使用MYSQL" target="_blank">在Python中使用MYSQL</a>
                                    <span class="text-muted">pda158</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                                    <div>缘由     近期在折腾一个小东西须要抓取网上的页面。然后进行解析。将结果放到 
数据库中。     了解到 
Python在这方面有优势,便选用之。     由于我有台 
server上面安装有 
mysql,自然使用之。在进行数据库的这个操作过程中遇到了不少问题,这里 
记录一下,大家共勉。      
python中mysql的调用      
百度之后能够通过MySQLdb进行数据库操作。</div>
                                </li>
                                <li><a href="/article/3578.htm"
                                       title="单例模式" target="_blank">单例模式</a>
                                    <span class="text-muted">hxl1988_0311</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BB%B6/1.htm">单件</a>
                                    <div>package com.sosop.designpattern.singleton;

/*
 * 单件模式:保证一个类必须只有一个实例,并提供全局的访问点
 * 
 * 所以单例模式必须有私有的构造器,没有私有构造器根本不用谈单件
 * 
 * 必须考虑到并发情况下创建了多个实例对象
 * */

/**
 * 虽然有锁,但是只在第一次创建对象的时候加锁,并发时不会存在效率</div>
                                </li>
                                <li><a href="/article/3705.htm"
                                       title="27种迹象显示你应该辞掉程序员的工作" target="_blank">27种迹象显示你应该辞掉程序员的工作</a>
                                    <span class="text-muted">vipshichg</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a>
                                    <div>1、你仍然在等待老板在2010年答应的要提拔你的暗示。 2、你的上级近10年没有开发过任何代码。 3、老板假装懂你说的这些技术,但实际上他完全不知道你在说什么。 4、你干完的项目6个月后才部署到现场服务器上。 5、时不时的,老板在检查你刚刚完成的工作时,要求按新想法重新开发。 6、而最终这个软件只有12个用户。 7、时间全浪费在办公室政治中,而不是用在开发好的软件上。 8、部署前5分钟才开始测试。</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>