zoukankan      html  css  js  c++  java
  • 菜鸟系列docker——docker容器(7)

    docker 容器

    1. docker 守护进程daemon

    Daemon是Docker的守护进程,Docker Client通过命令行与Docker Damon通信,完成Docker相关操作,Docker daemon通过位于/var/run/docker.sock的本地IPC/Unix socket来实现Docker远程API;在Windows中,Docker daemon通过监听名为npipe:////./pipe/docker_engine的管道来实现。通过配置,也可以借助网络来实现Docker Client和daemon之间的通信。Docker默认非TLS网络端口为2375,TLS默认端口为2376。

    1. UNIX域套接字
      默认就是这种方式, 会生成一个 /var/run/docker.sock 文件, UNIX 域套接字用于本地进程之间的通讯, 这种方式相比于网络套接字效率更高, 但局限性就是只能被本地的客户端访问。

    2. TCP 端口监听
      服务端开启端口监听:dockerd -H IP:PORT

    客户端通过指定的 IP 和 端口 访问服务端:docker -H IP:PORT,从而在服务端的服务器上创建容器。

    2. docker container相关操作

    2.1 相关命令

    在实际操作过程中部分命令container可以省略。

    Usage:	docker container COMMAND
    
    Manage containers
    
    Commands:
      attach      Attach local standard input, output, and error streams to a running container
      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
      exec        Run a command in a running container
      export      Export a container's filesystem as a tar archive
      inspect     Display detailed information on one or more containers
      kill        Kill one or more running containers
      logs        Fetch the logs of a container
      ls          List containers
      pause       Pause all processes within one or more containers
      port        List port mappings or a specific mapping for the container
      prune       Remove all stopped containers
      rename      Rename a container
      restart     Restart one or more containers
      rm          Remove one or more containers
      run         Run a command in a new container
      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
      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
      wait        Block until one or more containers stop, then print their exit codes
    

    2.2 启动容器

    启动容器的一个简单的方式是通过docker container run命令。

    docker container run ubuntu
    Unable to find image 'ubuntu:latest' locally
    latest: Pulling from library/ubuntu
    7ddbc47eeb70: Pull complete
    c1bbdc448b72: Pull complete
    8c3b70e39044: Pull complete
    45d437916d57: Pull complete
    Digest: sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d
    Status: Downloaded newer image for ubuntu:latest
    

    由于本地不存在ubuntu:latest镜像,启动时从docker hub pull对应镜像并启动。一旦镜像拉取到本地,daemon就创建容器并在其中运行指定的应用。

    通过docker ps发现容器退出了,因为启动时没有启动任何进程,此时启动容器时额外启动一个进程。

    docker container run -it ubuntu bash
    root@7f1b6cf7b7aa:/# ps -elf
    F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
    4 S root         1     0  0  80   0 -  4626 -      06:37 pts/0    00:00:00 bash
    0 R root        11     1  0  80   0 -  8599 -      06:38 pts/0    00:00:00 ps -elf
    

    当执行exit时会退出1号进程,则容器也会停止运行,“杀死容器中的主进程,则容器也会被杀死”。因此可以执行Ctrl-PQ组合键则会退出容器但并不终止容器运行。这样做会切回到Docker主机的Shell,并保持容器在后台运行。

    docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    3f2c72504e24        ubuntu              "bash"              20 seconds ago      Up 19 seconds                           sweet_heisenberg
    

    也可以启动时+ -d让容器后台运行。

    docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    3f2c72504e24        ubuntu              "bash"              20 seconds ago      Up 19 seconds                           sweet_heisenberg
    docker container stop 3f2c72504e24
    3f2c72504e24
    docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    docker container run -it -d ubuntu bash
    c95be4dcad34d69693964158138ce19f946b13afd669012659e5cff7715f0400
    docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    c95be4dcad34        ubuntu              "bash"              11 seconds ago      Up 10 seconds                           priceless_hofstadter
    

    此时再进入容器可以执行

    docker exec -it c95be4dcad34 bash
    

    2.3 容器生命周期

    节主要关注容器的生命周期——从创建、运行、休眠,直至销毁的整个过程。

    • 启动容器
    docker container run --name percy -it ubuntu:latest /bin/bash
    
    • 停止容器
      docker container stop命令来停止容器运行,切换到暂停(vacation)状态。
    docker container stop percy
    
    • 重启容器
      使用docker container start命令可以将容器重新启动。
    docker container start percy
    
    • 删除容器
      通过在docker container rm命令后面添加-f参数来一次性删除运行中的容器是可行的。但是,删除容器的最佳方式还是分两步,先停止容器然后删除。这样可以给容器中运行的应用/进程一个停止运行并清理残留数据的机会。
    docker container rm percy
    

    总结一下容器的生命周期。可以根据需要多次停止、启动、暂停以及重启容器,并且这些操作执行得很快。但是容器及其数据是安全的。直至明确删除容器前,容器都不会丢弃其中的数据。就算容器被删除了,如果将容器数据存储在卷中,数据也会被保存下来。

    2.4 查看容器详情

    当构建Docker镜像的时候,可以通过嵌入指令来列出希望容器运行时启动的默认应用。如果运行docker image inspect命令来查看运行容器时使用的镜像,就能看到容器启动时将要运行的应用列表了。同时通过docker container inspect c95be4dcad34 可以查看容器详情

    3. 总结

    docker container run是启动新容器的命令。该命令的最简形式接收镜像和命令作为参数。镜像用于创建容器,而命令则是希望容器运行的应用。docker container run -it ubuntu /bin/bash命令会在前台启动一个Ubuntu容器,并运行Bash Shell。
    Ctrl-PQ会断开Shell和容器终端之间的链接,并在退出后保持容器在后台处于运行(UP)状态。
    docker container ls用于列出所有在运行(UP)状态的容器。如果使用-a标记,还可以看到处于停止(Exited)状态的容器。
    docker container exec允许用户在运行状态的容器中,启动一个新进程。该命令在将Docker主机Shell连接到一个运行中容器终端时非常有用。docker container exec -it <container-name or container-id> bash命令会在容器内部启动一个Bash Shell进程,并连接到该Shell。为了使该命令生效,用于创建容器的镜像必须包含Bash Shell。
    docker container stop命令会停止运行中的容器,并将状态置为Exited(0)。该命令通过发送SIGTERM信号给容器内PID为1的进程达到目的。如果进程没有在10s之内得到清理并停止运行,那么会接着发送SIGKILL信号来强制停止该容器。docker container stop可以接收容器ID以及容器名称作为参数。
    docker container start会重启处于停止(Exited)状态的容器。可以在docker container start命令中指定容器的名称或者ID。
    docker container rm会删除停止运行的容器。可以通过容器名称或者ID来指定要删除的容器。推荐首先使用docker container stop命令停止容器,然后使用docker container rm来完成删除。
    docker container inspect命令会显示容器的配置细节和运行时信息。该命令接收容器名称和容器ID作为主要参数。
    
    如果你觉得写的不错,请移步www.itkezhan.top或者关注公众号IT程序员客栈
  • 相关阅读:
    Debian/Kali下Subversion的配置
    Linux下解压Windows中的压缩包乱码解决办法
    JavaSocket全双工通信 问题 待解决
    MYSQL学习笔记
    Java Socket 全双工通信
    Kali2017安装后的那些事
    nginx的一次安装与配置
    解决1130 Host 'localhost' is not allowed to connect to this MySQL server
    SimpleDateFormat 和 LocalDate、LocalTime 以及时间大小比较简单示例
    java 线程池 ExeutorService
  • 原文地址:https://www.cnblogs.com/i-dandan/p/11966791.html
Copyright © 2011-2022 走看看