zoukankan      html  css  js  c++  java
  • Docker容器技术-命令进阶

    一、基本命令

    1.Docker布尔型选项
    使用某选项但没有提供参数,等同于把选项设置为true,要改变它的值,唯一的方法是将其设置成false。

    找出一个选项的默认值是true还是false:

    [root@bogon ~]# docker --help
    
    Usage:	docker COMMAND
    
    A self-sufficient runtime for containers
    
    Options:
          --config string      Location of client config files (default "/root/.docker")
      -D, --debug              Enable debug mode
          --help               Print usage
      -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
    

    设置默认值:

    [root@bogon ~]# docker run --sig-proxy=false
    [root@bogon ~]# docker run --read-only=true
    

    2.run命令
    控制容器的生命周期以及基本运行模式

    -a, --attach list                    Attach to STDIN, STDOUT or STDERR
    把指定的数据流(ETDOUT)连接至终端;若未指定,则默认连接stdout和stderr;若数据流未指定,容器以交互模式(-i)启动,则stdin被连接至终端。
    
    -d, --detach                         Run container in background and print container ID
    使容器在“分离”模式下运行;容器会在后台运行,而命令的返回值是容器的ID。
    
    -i, --interactive                    Keep STDIN open even if not attached
    保持stdin打开。一般与-t同时使用,用作启动交互式会话的容器。
    
    --restart string                 Restart policy to apply when a container exits (default "no")
    配置Docker在什么情况下尝试重启已退出的容器。
    参数no为永远不会尝试重启容器;
    参数always指不管退出状态是什么,总会尝试重启;
    参数on-failure仅当退出状态不为0时重启,并可以追加一个可选参数,指定尝试次数,超过次数会放弃(未指定会一直重试);
    例如:
    [root@bogon ~]# docker run --restart on-failure:10 postgres
    
    --rm                             Automatically remove the container when it exits
    退出时自动删除容器,不能与-d同时使用。
    
    -t, --tty                            Allocate a pseudo-TTY
    分配一个伪终端,通常与-t使用,启动交互式容器。
    

    允许设置容器名称和变量

    -e, --env list                       Set environment variables
    设置容器内的环境变量。
    例如:
    [root@bogon ~]# docker run -e var1=var -e var2="val 2" debian env
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=9eb154072928
    var1=var
    var2=val 2
    HOME=/root
    
    --env-file list                  Read in a file of environment variables
    可以经文件传入环境变量。
    
    -h, --hostname string                Container host name
    设置容器的unix主机名NAME。
    例如:
    [root@bogon ~]# docker run -h "myhost" debian hostname
    
    --name string                    Assign a name to the container
    把string设置为容器的名称。
    

    允许用户进行数据卷的设置
    说明:
    数据卷—即一个容器中的文件或目录,实际属于主机的文件系统,而非容器的联合文件系统的一部分。

    -v, --volume list                    Bind mount a volume
    用来设置数据卷。
    1)仅指定容器中的目录,docker会自行选定一个主机上的目录与之绑定;
    2)指定与容器目录绑定的主机目录;
    
    --volumes-from list              Mount volumes from the specified container(s)
    挂载指定容器拥有的数据卷。
    

    网络连接

    --expose list                    Expose a port or a range of ports
    指定容器将会使用的端口或端口范围,但不会把端口打开;与-P参数同时使用或在连接容器时才有用。
    
    --link list                      Add link to another container
    建立一个与指定容器连接的内部网络接口。
    
    -p, --publish list                   Publish a container's port(s) to the host
    “发布”容器的端口,使主机能访问它;若未指定端口,会随机分配一个高端口;或指定端口在主机的那个网络接口开放。
    使用docker port查看分配了哪个端口及映射关系。
    
    -P, --publish-all                    Publish all exposed ports to random ports
    “发布”所有已指定为开放(exposed)的容器端口,使主机能访问它们;每个容器端口均对应一个随机高端口。
    

    控制容器权限及性能

    --entrypoint string              Overwrite the default ENTRYPOINT of the image
    把参数string指定为容器的入口,覆盖任何Dockerfile中的ENTRYPOINT指令。
    
    -u, --user string                    Username or UID (format: <name|uid>[:<group|gid>])
    设置命令运行时所使用的用户;可以以用户名或UID指定;同样会覆盖Dockerfile中的USER指令。
    
    -w, --workdir string                 Working directory inside the container
    将参数的路径设置为容器的工作目录;会覆盖Dockerfile中的WORKDIR指令。
    

    3.容器管理
    1) docker attach命令
    允许用户查看容器内的主进程或与之交互。

    [root@bogon ~]# docker attach --help
    
    Usage:	docker attach [OPTIONS] CONTAINER
    
    Attach local standard input, output, and error streams to a running container
    
    Options:
          --detach-keys string   Override the key sequence for detaching a container
          --help                 Print usage
          --no-stdin             Do not attach STDIN
          --sig-proxy            Proxy all received signals to the process (default true)
    
    [root@bogon ~]# ID=$(docker run -d debian sh -c "while true; do echo 'tick'; sleep 2; done;")
    [root@bogon ~]# docker attach $ID
    tick
    tick
    tick
    tick
    

    2)docker create命令
    从镜像创建容器,但不启动。

    [root@bogon ~]# docker start --help
    
    Usage:	docker start [OPTIONS] CONTAINER [CONTAINER...]
    
    Start one or more stopped containers
    
    Options:
      -a, --attach               Attach STDOUT/STDERR and forward signals
          --detach-keys string   Override the key sequence for detaching a container
          --help                 Print usage
      -i, --interactive          Attach container's STDIN
    

    3) docker cp命令
    在容器和主机之间复制文件和目录

    [root@bogon ~]# docker cp --help
    
    Usage:	docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
    	docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
    
    Copy files/folders between a container and the local filesystem
    
    Options:
      -a, --archive       Archive mode (copy all uid/gid information)
      -L, --follow-link   Always follow symbol link in SRC_PATH
          --help          Print usage
    

    4) docker exec命令
    在容器中运行一个命令。用于执行维护工作或替代SSH用作登入容器。

    [root@bogon ~]# docker exec --help
    
    Usage:	docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    
    Run a command in a running container
    
    Options:
      -d, --detach               Detached mode: run command in the background
          --detach-keys string   Override the key sequence for detaching a container
      -e, --env list             Set environment variables
          --help                 Print usage
      -i, --interactive          Keep STDIN open even if not attached
          --privileged           Give extended privileges to the command
      -t, --tty                  Allocate a pseudo-TTY
      -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])
    
    [root@bogon ~]# ID=$(docker run -d debian bash -c 
    > "trap 'echo caught' SIGTRAP; while true; do sleep 2; done;")
    [root@bogon ~]# docker kill -s SIGTRAP $ID
    320175afeec0192844073a00a3ba1fecc6cc15879fcdbbe08683ff63bd0dc215
    [root@bogon ~]# docker logs $ID
    caught
    [root@bogon ~]# docker kill $ID
    320175afeec0192844073a00a3ba1fecc6cc15879fcdbbe08683ff63bd0dc215
    

    5) docker pause命令
    暂停容器内的所有进程。
    进程不会接收到被暂停的信号,因此它们无法执行正常结束或清理的程序。(与docker stop不同)
    通过docker unpause命令重启。

    [root@bogon ~]# docker pause --help
    
    Usage:	docker pause CONTAINER [CONTAINER...]
    
    Pause all processes within one or more containers
    
    Options:
          --help   Print usage
    

    6) docker restart命令
    重新启动一个或多个容器。

    • 先执行docker stop
    • 再执行docker start
    [root@bogon ~]# docker restart --help
    
    Usage:	docker restart [OPTIONS] CONTAINER [CONTAINER...]
    
    Restart one or more containers
    
    Options:
          --help       Print usage
      -t, --time int   Seconds to wait for stop before killing the container (default 10)
    

    7) docker rm命令
    删除一个或多个容器。
    默认不会删除任何数据卷。

    [root@bogon ~]# docker rm --help
    
    Usage:	docker rm [OPTIONS] CONTAINER [CONTAINER...]
    
    Remove one or more containers
    
    Options:
      -f, --force     Force the removal of a running container (uses SIGKILL)
          --help      Print usage
      -l, --link      Remove the specified link
      -v, --volumes   Remove the volumes associated with the container
    
    [root@bogon ~]# docker rm $(docker ps -aq)
    320175afeec0
    447963b7b845
    9eb154072928
    096ff53edbaf
    36c220e77949
    Error response from daemon: You cannot remove a running container d07dd579ee128a9500b81507764edbcf81aef3281a22eee22fe04c74163c6986. Stop the container before attempting removal or force remove
    [root@bogon ~]# docker rm -f $(docker ps -aq)
    d07dd579ee12
    

    8) docker start命令
    启动一个或多个已停止的容器,或由create创建未启动的容器。

    [root@bogon ~]# docker start --help
    
    Usage:	docker start [OPTIONS] CONTAINER [CONTAINER...]
    
    Start one or more stopped containers
    
    Options:
      -a, --attach               Attach STDOUT/STDERR and forward signals
          --detach-keys string   Override the key sequence for detaching a container
          --help                 Print usage
      -i, --interactive          Attach container's STDIN
    

    9) docker stop命令
    停止但不删除一个或多个容器。

    [root@bogon ~]# docker stop --help
    
    Usage:	docker stop [OPTIONS] CONTAINER [CONTAINER...]
    
    Stop one or more running containers
    
    Options:
          --help       Print usage
      -t, --time int   Seconds to wait for stop before killing it (default 10)
    

    10) docker unpause命令
    重启先前被docker pause命令暂停的容器。

    [root@bogon ~]# docker unpause --help
    
    Usage:	docker unpause CONTAINER [CONTAINER...]
    
    Unpause all processes within one or more containers
    
    Options:
          --help   Print usage
    

    4.Docker信息

    [root@bogon ~]# docker info
    Containers: 0
     Running: 0
     Paused: 0
     Stopped: 0
    Images: 13
    Server Version: 17.09.0-ce
    Storage Driver: overlay
     Backing Filesystem: xfs
     Supports d_type: true
    Logging Driver: json-file
    Cgroup Driver: cgroupfs
    Plugins:
     Volume: local
    ...省略部分
    
    [root@bogon ~]# docker version
    Client:
     Version:      17.09.0-ce
     API version:  1.32
     Go version:   go1.8.3
     Git commit:   afdb6d4
     Built:        Tue Sep 26 22:41:23 2017
     OS/Arch:      linux/amd64
    
    Server:
     Version:      17.09.0-ce
     API version:  1.32 (minimum version 1.12)
     Go version:   go1.8.3
     Git commit:   afdb6d4
     Built:        Tue Sep 26 22:42:49 2017
     OS/Arch:      linux/amd64
     Experimental: false
    

    5.容器信息
    1) docker diff命令
    对比容器所使用的镜像,显示容器的文件系统的变化。

    [root@bogon ~]# ID=$(docker run -d debian touch /NEW-FILE)
    [root@bogon ~]# docker diff $ID
    A /NEW-FILE
    

    2) docker events命令
    打印守护进程的实时事件。

    3) docker inspect命令
    把容器或镜像作为参数,获取它们的详细信息(配置、联网、数据卷)。

    [root@bogon ~]# docker inspect --help
    
    Usage:	docker inspect [OPTIONS] NAME|ID [NAME|ID...]
    
    Return low-level information on Docker objects
    
    Options:
      -f, --format string   Format the output using the given Go template
          --help            Print usage
      -s, --size            Display total file sizes if the type is container
          --type string     Return JSON for specified type
    

    4) docker logs命令
    输出容器的日志,也就是曾经输出到容器中的STDOUT或STDERR内容。

    5) docker port命令
    把容器作为参数,列出它的端口映射信息,查看容器内部端口和协议。

    [root@bogon ~]# ID=$(docker run -P -d redis)
    [root@bogon ~]# docker port $ID
    6379/tcp -> 0.0.0.0:32768
    [root@bogon ~]# docker port $ID 6379/tcp
    0.0.0.0:32768
    

    6) docker ps命令
    提供当前容器的高阶信息

    [root@bogon ~]# docker ps --help
    
    Usage:	docker ps [OPTIONS]
    
    List containers
    
    Options:
      -a, --all             Show all containers (default shows just running)
      -f, --filter filter   Filter output based on conditions provided
          --format string   Pretty-print containers using a Go template
          --help            Print usage
      -n, --last int        Show n last created containers (includes all states) (default -1)
      -l, --latest          Show the latest created container (includes all states)
          --no-trunc        Don't truncate output
      -q, --quiet           Only display numeric IDs
      -s, --size            Display total file sizes
    

    7) docker top命令
    把容器作为参数,提供该容器内运行中进程信息。

    [root@bogon ~]# ID=$(docker run -d redis)
    
    [root@bogon ~]# docker top $ID
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    systemd+            3881                3865                0                   00:34               ?                   00:00:00            redis-server *:6379
    
    [root@bogon ~]# docker top $ID -axZ
    LABEL               PID                 TTY                 STAT                TIME                COMMAND
    -                   3881                ?                   Ssl                 0:00                redis-server *:6379
    

    6.镜像管理
    1) docker build命令
    从Dockerfile建立镜像

    2) docker commit命令
    从指定的容器创建镜像。

    [root@bogon ~]# docker commit --help
    
    Usage:	docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    
    Create a new image from a container's changes
    
    Options:
      -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
      -c, --change list      Apply Dockerfile instruction to the created image
          --help             Print usage
      -m, --message string   Commit message
      -p, --pause            Pause container during commit (default true)
    
    [root@bogon ~]# ID=$(docker run -d redis touch /new-file)
    [root@bogon ~]# docker commit -a "Da Yun" -m "Comment" $ID commit:test
    sha256:8794a1466b56e19d89b78d62eaa7cc04c5c1cd9fed8cf0a511d57ea387d6065d
    [root@bogon ~]# docker images commit
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    commit              test                8794a1466b56        10 seconds ago      107MB
    [root@bogon ~]# docker run commit:test ls /new-file
    /new-file
    

    3) docker export命令
    将容器的文件系统中的内容以tar归档的格式导出,并输出到STDOUT。
    归档的文件可通过docker import导入,但只会导入文件系统,元数据将丢失。

    4) docker history命令
    输出镜像中每个镜像层的信息。

    5) docker images命令
    列出所有本地镜像。

    [root@bogon ~]# 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
          --help            Print usage
          --no-trunc        Don't truncate output
      -q, --quiet           Only show numeric IDs
    
    [root@bogon ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    commit              test                8794a1466b56        5 minutes ago       107MB
    hubuser/webapp      latest              cbe52807fcad        8 hours ago         362MB
    redis               latest              1fb7b6c8c0d0        13 days ago         107MB
    debian              latest              874e27b628fd        13 days ago         100MB
    ubuntu              14.04               dea1945146b9        5 weeks ago         188MB
    busybox             latest              54511612f1c4        5 weeks ago         1.13MB
    [root@bogon ~]# docker images | head -2
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    commit              test                8794a1466b56        5 minutes ago       107MB
    

    6) docker import命令
    从一个含有文件系统的归档文件创建镜像。

    docker export  8794a1466b56 |docker import - flatten:test
    docker history flatten:test
    

    7) docker load命令
    加载仓库,仓库以tar归档形式从STDIN读入。
    仓库可以包含数个镜像和标签,并包含元数据。

    8) docker rmi
    删除指定的一个或多个镜像。

    删除所有被遗留的镜像
    docker rmi $(docker images -q -f dangling=true)
    

    9) docker save命令
    把指定的镜像或仓库储存到tar归档,并输出到STDOUT。

    [root@bogon ~]# docker save -o /tmp/redis.tar redis:latest
    [root@bogon ~]# docker rmi redis:latest
    Error response from daemon: conflict: unable to remove repository reference "redis:latest" (must force) - container dd923378c826 is using its referenced image 1fb7b6c8c0d0
    [root@bogon ~]# docker rmi -f redis:latest
    Untagged: redis:latest
    Untagged: redis@sha256:07e7b6cb753f8d06a894e22af30f94e04844461ab6cb002c688841873e5e5116
    [root@bogon ~]# docker load -i /tmp/redis.tar
    Loaded image: redis:latest
    [root@bogon ~]# docker images redis
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    redis               latest              1fb7b6c8c0d0        13 days ago         107MB
    

    10) docker tag命令
    将镜像与一个仓库和标签名称关联。

    把ID为1fb7b6c8c0d0的镜像添加到仓库newname
    [root@bogon ~]# docker tag 1fb7b6c8c0d0 newname
    
    把newname:latest镜像添加到hdlptz/newname仓库(适用于推送到Hub)
    [root@bogon ~]# docker tag newname:latest hdlptz/newname
    
    与上面一样,但标签变为newtag
    [root@bogon ~]# docker tag newname:latest hdlptz/newname:newtag
    
    适用于将镜像推送到myregistry.com:5000寄存服务器
    [root@bogon ~]# docker tag newname:latest myregistry.com:5000/newname:newtag
    

    7.寄存服务器
    1) docker login命令
    在指定寄存服务器进行注册或登录。未指定则为Docker Hub。

    2) docker logout命令
    从Docker寄存服务器注销。

    3) docker pull命令
    从寄存服务器下载指定镜像。

    4) docker push命令
    将镜像或仓库推送到寄存服务器。

    5) docker search命令
    列出Docker Hub上匹配搜索词的公共仓库,结果最多25个仓库。

    二、发布容器

    将主机8000端口转发至容器80端口
    [root@bogon ~]# docker run -d -p 8000:80 nginx
    Unable to find image 'nginx:latest' locally
    latest: Pulling from library/nginx
    bc95e04b23c0: Pull complete 
    110767c6efff: Pull complete 
    f081e0c4df75: Pull complete 
    Digest: sha256:004ac1d5e791e705f12a17c80d7bb1e8f7f01aa7dca7deee6e65a03465392072
    Status: Downloaded newer image for nginx:latest
    521006b3e1d0b967bbde857f8940274e52418faf79b5bedda6fd36eb9a811e42
    
    [root@bogon ~]# curl localhost:8000
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
             35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    
    [root@bogon ~]# ID=$(docker run -d -P nginx)
    [root@bogon ~]# docker port $ID 80
    0.0.0.0:32769
    [root@bogon ~]# curl localhost:32769
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    ...省略部分
    

    三、容器互联

    link是允许同一主机上的容器互相通信。

    [root@bogon ~]# docker run -d --name myredis redis
    315436a9429604a1e1eb87dfb3d88358afea9b1a0fae44a67b506fd5015b4d76
    [root@bogon ~]# docker run --link myredis:redis debian env
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=f53e2bf05ea1
    REDIS_PORT=tcp://172.17.0.6:6379
    REDIS_PORT_6379_TCP=tcp://172.17.0.6:6379
    REDIS_PORT_6379_TCP_ADDR=172.17.0.6
    REDIS_PORT_6379_TCP_PORT=6379
    REDIS_PORT_6379_TCP_PROTO=tcp
    REDIS_NAME=/hopeful_pasteur/redis
    REDIS_ENV_GOSU_VERSION=1.10
    REDIS_ENV_REDIS_VERSION=4.0.2
    REDIS_ENV_REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-4.0.2.tar.gz
    REDIS_ENV_REDIS_DOWNLOAD_SHA=b1a0915dbc91b979d06df1977fe594c3fa9b189f1f3d38743a2948c9f7634813
    HOME=/root
    

    四、利用数据卷和数据容器管理数据

    Docker的数据卷是一个目录,并不属于UFS的一部分,它只是在主机上被绑定挂载到容器的一个普通目录。

    三种初始化数据卷的方法:
    1.通过-v选项宣告一个数据卷

    [root@bogon ~]# docker run -it --name container-test -h CONTAINER -v /data debian /bin/bash
    root@CONTAINER:/# ls /data
    root@CONTAINER:/# 
    

    容器中的/data目录便成为一个数据卷;镜像的/data目录中的所有文件将被复制到数据卷中。

    查看数据卷在主机上的实际位置:

    [root@bogon ~]# docker inspect -f {{.Mounts}} container-test
    [{volume 8f85ec52ae72894b6a15065a3fd3f863f94be708cd17969d15516eb6a014d262 /var/lib/docker/volumes/8f85ec52ae72894b6a15065a3fd3f863f94be708cd17969d15516eb6a014d262/_data /data local  true }]
    

    2.通过Dockerfile使用VOLUME指令

    FROM debian:wheezy
    VOLUME /data
    

    注意:
    VOLUME指令之后的所有指令不可以对该数据卷有任何修改(这些修改只会在临时容器层内的数据卷上执行,指令结束后将被删除)。

    正确做法如下:

    FROM debian:wheezy
    RUN useradd foo
    RUN mkdir /data && touch /data/x
    RUN chown -R foo:foo /data
    VOLUME /data
    

    3.通过docker run -v用法进行扩展(绑定挂载)

    docker run -v /home/adrian/data:/data debian ls /data
    

    氢气可以使用/home/adrian/data目录下的任何文件,如果容器内已有/data目录,它的内容将被数据卷所隐藏。

    五、共享数据

    1. -v HOST_DIR:CONTAINER_DIR

    2.在运行docker run命令时,传入--volumes-from CONTAINER参数

    [root@bogon ~]# docker run -it -h NEWCONTAINER --volumes-from container-test debian /bin/bash
    root@NEWCONTAINER:/# ls /data
    test-file
    root@NEWCONTAINER:/# 
    

    3.数据容器
    创建数据容器,使之与其他容器分享数据。

    docker run --name dbdata postgres echo "Data-only container for postgres"
    从postgres镜像创建一个容器,并且初始化镜像中定义的所有数据卷,最后执行echo命令并退出。
    
    docker run -d --volumes-from dbdata --name db1 postgres
    使其他容器可以使用这个数据卷
    
    使用相同镜像不会占用任何额外空间,因为你已经下载或创建了用作数据使用方的镜像,这样也让镜像有机会为容器建立任何初始数据,并确保全县设置正确。
    
    删除数据卷满足的条件:
    1)容器被docker rm -v命令删除
    2)docker run命令执行时带有--rm选项
    3)目前没有容器与该数据卷关联
    4)该数据卷没有指定使用主机目录
    
  • 相关阅读:
    堆模板
    二叉树输出
    中序+层次遍历输出前序
    扩展二叉树 (根据特殊的前序遍历建树)
    Leecode no.124 二叉树中的最大路径和
    JVM类加载过程
    Leecode no.208 实现Tire(前缀树)
    Leecode no.300 最长递增子序列
    volatile关键字深入解析 JMM与内存屏障
    Leecode no.200 岛屿数量
  • 原文地址:https://www.cnblogs.com/tongxiaoda/p/7724732.html
Copyright © 2011-2022 走看看