zoukankan      html  css  js  c++  java
  • Docker容器基本命令注意点

    Docker 容器基本命令注意点

    前言:

    a. 本文主要为 Docker的视频教程 笔记。
    b. 本机环境为 Windows 10 专业版,使用的命令行为 PowerShell。

    1. docker run -d 表示在后台运行,不加 -d 表示依附于当前的命令行运行

    例如:使用 Docker 运行一个 alpine 的镜像,并开启一个终端。如果不使用 “-d” 参数会直接在当前命令行响应

    PS C:UsersXXX> docker run -it alpine /bin/sh
    / #

    注:直接使用 docker run + <容器> 而不使用 “-it” 参数会使容器执行完毕后很快退出。故如果要运行服务镜像,就应使用让容器阻塞的命令。

    2. docker 命令有分组

    使用 docker image 命令查看 docker 在 image 组中的命令, 使用 docker container 命令查看docker container组中的命令。

    很多命令为简写:如 docker container ps -a 可简写为 docker ps -a。

    3. 查看镜像的具体信息

    使用 docker image inspect 命令。在 PowerShell 中配合使用 findstr /i version 可以查看某些镜像中软件的版本(在Linux下可以配合使用 grep -i version )

    4. 镜像的导出和导入

    原环境:

    PS C:UsersXXX> docker images | findstr busybox
    busybox latest be5888e67be6 2 weeks ago 1.22MB

    导出:

    docker image save -o <OUT_FILE_NAME> <WHICH_IMAGE>
    

    例如:docker image save -o docker_busybox.tar.gz busybox:latest

    此时执行:docker image rm busybox 删除 busybox 镜像

    PS C:UsersXXX> docker images | findstr busybox
    PS C:UsersXXX>

    导入:

    docker image load -i <FILE_PATH>
    

    例如: docker image load -i .docker_busybox.tar.gz

    5. 查看容器

    docker container ls -a -l
    

    其中 “-a” 表示查看所有容器,包括未启动的容器;“-l” 表示查看最近启动的一条

    6. 删除所有容器

    在 PowerShell 中为:

    docker container rm -f $(docker ps -a -q)
    

    (在 Linux 中为 docker container rm -f `docker ps -a -q`)可以删除所有容器 (存在容器的情况下)。

    7. 附加到容器的命令行

    首先运行一个 alpine 镜像:docker run -it -d alpine /bin/sh,之后使用 docker attach <CONTAINER_ID> 附加到该命令行。

    注1:此时如果再开启一个终端附加到容器的命令行,二者会同步显示

    注2:使用 exit 命令退出附加后,容器会停止

    可以使用 Ctrl+P 和 Ctrl + Q 取消附加(取消后不停止)

    推荐使用 docker container exec -it 命令

    注3:使用 echo "" > /dev/pts/<X> 可以向别的终端发送消息

    6. 完整查看容器的启动信息(即使太长也不省略)

    docker ps -a -l --no-trunc
    

    7. 端口号的分配

    • docker run -p 表示指定端口号映射,docker run -P 表示自动分配端口

    • docker -p :<HOST_PORT>:<CONTAINER_PORT> 利用多ip增加对同一端口的复用

      由于对 Windows 中的分配多个ip地址不熟悉,因此跟着教程步骤操作,使用操作系统为 CentOS7 的云服务器

      先使用 ifcofig eth0 查看网卡信息

      [root@VM_0_2_centos ~]# ifconfig eth0 | grep inet
              inet 172.21.0.2 netmask 255.255.240.0 broadcast 172.21.15.255

      之后再同一网段为该网卡新增一个ip

      [root@VM_0_2_centos ~]# ifconfig eth0:1 172.21.0.3 netmask 255.255.240.0 up

      使用 ping 命令 ping 172.21.0.3 可以得到响应
      使用两个地址分别运行 nginx

      [root@VM_0_2_centos ~]# docker run -d -p 172.21.0.2:8080:80 nginx
      [root@VM_0_2_centos ~]# docker run -d -p 172.21.0.3:8080:80 nginx
      进入两个容器中的 /usr/share/nginx/html 目录,修改 index.html 文件

      由于没有GUI,使用 curl 命令访问:

      [root@VM_0_2_centos ~]# curl 172.21.0.2:8080
      hello from 172.21.0.2
      [root@VM_0_2_centos ~]# curl 172.21.0.3:8080
      hello from 172.21.0.3

      成功!

    • docker -p <IP>::<CONTAINER_PORT> 宿主机分配随机端口

    • docker -p <HOST_PORT>:<CONTAINER_PORT>/udp 表示分配udp的端口

    • docker -p <IP>::<CONTAINER_PORT>/udp 表示随机分配udp的端口

    • 可以多次使用 “-p” 指定多个端口映射

    注:以上操作都在宿主机上进行

    8. 在容器上挂载本地目录

    使用 “-v” 命令

    docker run -it -d -p <HOST_PORT>:<CONTAINER_PORT> -v <HOST_ADDRESS>:<CONTAINER_ADDRESS> <IMAGE_NAME>
    

    例如:

    docker run -it -d -p 8080:80 -v D:CustomIndex:/usr/share/nginx/html nginx

    并在 D 盘的 CustomIndex 目录下新建 index.html,并写入 “Hello World!Heroes never die!”。访问效果为:

    注1:使用 -v 命令时,地址性质要对应,文件要对应文件,目录要对应目录。目录映射时应尽量避免使用 C 盘
    注2:如果此时删掉目录,不会取消挂载,而是访问时显示404
    注3:上面的命令亦可写作:docker run -it -d -p 8080:80 -v /d/CustomIndex:/usr/share/nginx/html nginx (注意表示Windows目录的斜线的方向)
    注4:在Linux中,将某个目录设置为挂载点后,读取该目录将取得挂载点的内容,原目录内容自动隐藏

    9. 数据卷(Volume)的使用

    由于Windows中的DockerDesktop是使用Hyper-V创建的虚拟机,在其上使用的Docker,因此数据卷映射的是虚拟机上的目录。而DockerDesktop的目录无法访问(明明是暂时不想研究0.0),再次使用CentOS云服务器

    “-v” 后面不接地址而是接一个自定义的卷名

    docker run -it -d -p <HOST_PORT>:<CONTAINER_PORT> -v <VOLUME_NAME>:<CONTAINER_ADDRESS> <IMAGE_NAME>
    

    例如:docker run -it -d -p 8080:80 -v my_volume:/usr/share/nginx/html nginx

    再使用 docker volume inspect 命令查看具体的挂载位置:

    docker volume inspect <VOLUME_NAME>
    

    [root@VM_0_2_centos ~]# docker volume inspect my_volume | grep Mountpoint
              "Mountpoint": "/var/lib/docker/volumes/my_volume/_data",

    注:第一次设置某个数据卷时,会自动将容器中对应目录的内容映射至宿主机的对应目录(如果容器中的目录有内容),之后再设置该数据卷时就不再拷贝。比如此时修改了其中的内容,再次启动一个容器使用该数据卷

    [root@VM_0_2_centos _data]# echo I've got you in my sight! > index.html
    [root@VM_0_2_centos _data]# docker run -it -d -p 8082:80 -v my_volume:/usr/share/nginx/html nginx

    此时依然得到修改后的内容

  • 相关阅读:
    ES基础(十三)Dynamic Template和Index Template
    ES基础(十一)显式Mapping设置与常见参数介绍
    ES基础(十)Dynamic Mapping 和常见字段类型
    ES基础(九)Query & Simple Query String Query
    ES基础(八)Request Body 与 Query DSL
    Docker 核心技术与实现原理
    error gathering device information while adding custom device
    Linux下使用内核源码单独编译某一模块
    kata container endpoint
    Virtio_user for Container Networking
  • 原文地址:https://www.cnblogs.com/battor/p/docker_basic_command_notice.html
Copyright © 2011-2022 走看看