• Docker实践之04-操作容器


    目录

    一.查看容器列表

    可以使用命令docker container ls查看容器信息,默认情况下只能查看到当前处于启动状态的容器。如果需要查看所有容器信息,需要使用-a参数,如:docker container ls -a
    还可以使用命令docker inspect可以查看指定容器的详细信息:docker inspect <container id>

    二.启动容器

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

    1.基于镜像新建并启动容器

    命令:docker run
    例如:

    $ docker run -it ubuntu:16.04 /bin/bash
    Unable to find image 'ubuntu:16.04' locally
    16.04: Pulling from library/ubuntu
    7e6591854262: Pulling fs layer 
    089d60cb4e0a: Pulling fs layer 
    9c461696bc09: Download complete 
    45085432511a: Waiting 
    16.04: Pulling from library/ubuntu
    7e6591854262: Pull complete 
    089d60cb4e0a: Pull complete 
    9c461696bc09: Pull complete 
    45085432511a: Pull complete 
    Digest: sha256:6aa6090ee9c1a525cbad1bb6c2ec9278914db754a3a3c5dc9e7d8daa5ee40dce
    Status: Downloaded newer image for ubuntu:16.04
    root@c421520d8484:/# 
    

    上述操作从一个标签为16.04的ubuntu镜像新建并启动了一个容器实例,同时在容器中启动了一个bash终端。

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

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

    2.启动已终止容器

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

    命令:docker container start
    例如:

    $ docker start c421520d8484
    c421520d8484
    

    上述操作启动了一个id为c421520d8484的已经停止的容器。

    三.终止容器

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

    $ docker stop c421520d8484
    c421520d8484
    

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

    四.重启容器

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

    五.后台运行容器

    更多的时候,需要让Docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加-d参数来实现。

    $ docker run -d ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
    

    注: 容器是否会长久运行,是和docker run指定的命令有关,和-d参数无关。

    需要区分容器"在后台运行"和"长久运行"这2个概念的区别:

    • 后台运行: Docker容器本身只是一个进程,那么这个进程在前台运行和在后台运行与其他进程没有区别,通过"-d"参数控制;
    • 长久运行: 长久运行是指Docker容器中运行的程序是否为长期运行的,如:Tomcat、Nginx这样的服务进程都是长久运行的,而bash、echo这样的程序就是执行一次就结束的,不是长久运行的。但是需要注意的是:在Docker中运行的程序(不论长久运行与否)都是在前台运行的。

    六.获取容器输出信息

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

    $ docker container logs c421520d8484
    

    或者

    $ docker container logs -f c421520d8484
    

    七.进入容器

    在使用-d参数时,容器启动后会进入后台。某些时候需要进入容器进行操作,需要使用docker attach命令或docker exec命令,推荐使用docker exec命令。
    原因:使用attach命令进入容器,退出时会导致容器终止;而使用exec命令进入容器,退出时不会导致容器终止。

    # 使用attach命令进入容器,退出时会导致容器终止
    $ docker attach <container id>
    
    # 使用exec命令进入容器,退出时不会导致容器终止
    $ docker exec -it <container id> bash
    

    八.导出和导入容器

    1.可以使用docker export命令导出容器快照到本地文件,格式: docker export [选项] CONTAINER

    $ docker container ls
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    a386ed46adbe        ubuntu:16.04        "/bin/bash"              8 minutes ago       Up 8 minutes                             tender_joliot
    d4ba59c159a3        nginx:v3            "nginx -g 'daemon of…"   5 hours ago         Up 5 hours          0.0.0.0:82->80/tcp   web3
    afb890786e0d        nginx:v2            "nginx -g 'daemon of…"   6 hours ago         Up 6 hours          0.0.0.0:81->80/tcp   web2
    7849b575df3d        nginx               "nginx -g 'daemon of…"   6 hours ago         Up 6 hours          0.0.0.0:80->80/tcp   webserver
    
    # 导出容器快照为本地文件
    $ docker export a386ed46adbe > ubuntu.tar
    

    2.可以使用docker import从容器快照文件中再导入为镜像,格式:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

    $ cat ubuntu.tar | docker import - test/ubuntu:v1.0
    sha256:e1d815eee91a11506af4239bde3305e5bcca9f5b9ce0c8eddd7d4e2f2bf80f17
    $ docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    test/ubuntu         v1.0                e1d815eee91a        28 seconds ago      85.9MB
    nginx               v3                  f8411fc0b25c        5 hours ago         109MB
    nginx               v2                  87e23809f4d8        6 hours ago         109MB
    nginx               latest              ae513a47849c        2 days ago          109MB
    ubuntu              16.04               0b1edfbffd27        5 days ago          113MB
    tomcat              latest              33e02377a00f        3 weeks ago         554MB
    hello-world         latest              e38bc07ac18e        3 weeks ago         1.85kB
    

    此外,也可以通过指定URL或者某个目录来导入,如:

    $ docker import http://example.com/exampleimage.tgz example/imagerepo
    

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

    九.删除容器

    1.可以使用docker container rm来删除一个处于终止状态的容器,如:

    $ docker container rm 25af9f20d6a2
    

    2.如果要删除一个运行中的容器,可以添加-f参数。Docker会发送SIGKILL信号给容器。

    $ docker container rm -f d4ba59c159a3
    

    3.使用命令docker container prune清理掉所有处于终止状态的容器。

    $ docker container prune 
    WARNING! This will remove all stopped containers.
    Are you sure you want to continue? [y/N] y
    Deleted Containers:
    04c3079ec43a68e80dbf602935d17c75062e36ede0fadad1e8022d37b93bb97d
    a48335a0bbf1afd1d6ae81bf6028852a0e57f2c48fdfa86b0ede343195ec97d6
    3a9ff5d11acddddccfc4f23447eb4a731d3ae22b605f48ac7f3c4bfba789cb72
    c8b00c9a2beb30934c6747bb32ae5d610eb00e630c6ef993de18cc54b646b35c
    97b7f9d496edc2087001b47b6959a39c772c10ed72fedcb6bea0e22404a11e0d
    73a8fd203031a15ae1db17cd8e816dc0859535f93010f4848961e76ba7471252
    ae723bca424cd694cc9f8a1ebd7f958dd7b674c55922a9e84fe36f9e2c6e8b49
    ffb07022d5f8f993fa42b33ae6ea7b5ae199f68ea41c6c0739be367cea376beb
    
    Total reclaimed space: 76.96kB
    
  • 相关阅读:
    为https请求配置ssl(不用keystore,直接用证书,rsa私钥,java代码)
    http请求对于List类型参数的处理
    java中string转ByteBuffer
    lua for循环如何从第0位开始
    lua中的cjson简单使用
    mongodb返回方便读的数据
    markdown简单插入图片
    #问题#java报Annotation processing is not supported for module cycles
    #问题#java报can't create non-static inner class instance
    git commit+push的完整步骤
  • 原文地址:https://www.cnblogs.com/nuccch/p/10835234.html
Copyright © 2020-2023  润新知