zoukankan      html  css  js  c++  java
  • Docker整理

    Docker

    docker版本

    ajune@ubuntu:~$ docker -v
    Docker version 20.10.7, build f0df350
    

    安装后需要执行的操作

    将当前用户添加到docker用户组 docker 用户组,在安装docker后会自动创建

    sudo usermod -aG docker USER NAME 然后退出重新登陆即可。

    镜像

    查找

    • 查找, 通过docker search 可以进行对镜像的查找。查找是通过https://hub.docker.com/进行查找的。

      docker search 镜像名称

      ajune@ubuntu:~$ docker search --help
      
      Usage:  docker search [OPTIONS] TERM
      
      Search the Docker Hub for images
      
      Options:
        -f, --filter filter   Filter output based on conditions provided
            --format string   Pretty-print search using a Go template
            --limit int       Max number of search results (default 25)
            --no-trunc        Don't truncate output
      
      # 根据条件过滤
      ajune@ubuntu:~$ docker search nginx -f STARS=3000
      NAME      DESCRIPTION                STARS     OFFICIAL   AUTOMATED
      nginx     Official build of Nginx.   15317     [OK] 
      
      

    查看

    • 查看

      docker images

      ajune@ubuntu:~$ 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 image IDs
      
      

    拉取

    • 拉取,通过docker pull进行镜像的拉取,可以对拉取的镜像版本进行指定拉取。

      docker pull [选项] 镜像名称[:标签|@hash值]

      ajune@ubuntu:~$ docker pull --help
      
      Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]
      
      Pull an image or a repository from a registry
      
      Options:
        -a, --all-tags                Download all tagged images in the repository
            --disable-content-trust   Skip image verification (default true)
            --platform string         Set platform if server is multi-platform capable
        -q, --quiet                   Suppress verbose output 
      
      # 拉取不同版本的镜像
      # 拉取python3的镜像
      ajune@ubuntu:~$ docker pull python:3
      3: Pulling from library/python
      ...
      Digest: sha256:ec3fd3c3585160da037d2b01908ee7837a802be8984f449e65d3d80065d6d23a
      Status: Downloaded newer image for python:3
      docker.io/library/python:3
      # 拉取python2的镜像
      ajune@ubuntu:~$ docker pull python:2
      2: Pulling from library/python
      ...
      Digest: sha256:cfa62318c459b1fde9e0841c619906d15ada5910d625176e24bf692cf8a2601d
      Status: Downloaded newer image for python:2
      docker.io/library/python:2
      
      # 查看python的镜像
      ajune@ubuntu:~$ docker images python
      REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
      python       3         b2278d5ae327   3 days ago      886MB
      python       2         68e7be49c28c   16 months ago   902MB
      
      

    删除

    • 删除

      docker rmi python

      ajune@ubuntu:~$ docker rmi --help
      
      Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]
      
      Remove one or more images
      
      Options:
        -f, --force      Force removal of the image # 如果镜像被使用,那么直接删除会失败,如果要删除需要添加该参数
            --no-prune   Do not delete untagged parents
      # 删除tag为2 的python
      ajune@ubuntu:~$ docker rmi python:2
      

    清理

    docker image prune清理长时间未使用的镜像

    ajune@ubuntu:~$ docker image prune --help
    
    Usage:  docker image prune [OPTIONS]
    
    Remove unused images
    
    Options:
      -a, --all             Remove all unused images, not just dangling ones
          --filter filter   Provide filter values (e.g. 'until=<timestamp>')
      -f, --force           Do not prompt for confirmation
    

    创建

    commit

    ajune@ubuntu:~$ 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
      -m, --message string   Commit message
      -p, --pause            Pause container during commit (default true)
    
    ajune@ubuntu:~$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS                                   NAMES
    c6d7d2387c2f   nginx     "/docker-entrypoint.…"   2 hours ago   Up 2 hours   0.0.0.0:8081->80/tcp, :::8081->80/tcp   nginxVolumeTest
    fcff774abdc3   nginx     "/docker-entrypoint.…"   2 hours ago   Up 2 hours   0.0.0.0:8080->80/tcp, :::8080->80/tcp   nginx01
    ajune@ubuntu:~$ docker commit  -m "修改了index.html" -a "ajune" nginx01 nginxowner:v1
    sha256:8e0d4807304c1bb96211c6e877df6430bb0d00377a31558c952208f76466dfde
    ajune@ubuntu:~$ docker images
    REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
    nginxowner   v1        8e0d4807304c   5 seconds ago   133MB
    nginx        latest    08b152afcfae   3 weeks ago     133MB
    
    

    import

    ajune@ubuntu:~$ docker import --help
    
    Usage:  docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
    
    Import the contents from a tarball to create a filesystem image
    
    Options:
      -c, --change list       Apply Dockerfile instruction to the created image
      -m, --message string    Set commit message for imported image
          --platform string   Set platform if server is multi-platform capable
    
    

    基于Dockerfile创建

    导出与导入

    导出

    ajune@ubuntu:~$ docker save --help
    
    Usage:  docker save [OPTIONS] IMAGE [IMAGE...]
    
    Save one or more images to a tar archive (streamed to STDOUT by default)
    
    Options:
      -o, --output string   Write to a file, instead of STDOUT
    
    
    ajune@ubuntu:~$ docker images
    REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
    dtest               v1        683cb0154877   16 hours ago   141MB
    ajune@ubuntu:~$ docker save -o dtest.tar dtest:v1
    ajune@ubuntu:~$ ll dtest*
    -rw------- 1 ajune docker 147870208 Aug 17 09:47 dtest.tar
    
    

    导入

    ajune@ubuntu:~$ docker load --help
    
    Usage:  docker load [OPTIONS]
    
    Load an image from a tar archive or STDIN
    
    Options:
      -i, --input string   Read from tar archive file, instead of STDIN
      -q, --quiet          Suppress the load output
    
    
    ajune@ubuntu:~$ docker load -i dtest.tar
    

    容器

    创建

    docker create -it ubuntu
    仅仅是创建了一个容器

    ajune@ubuntu:~$ docker ps -a
    CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS       PORTS                                   NAMES
    8111753f3fc2   ubuntu    "bash"                   5 minutes ago   Created                                              dazzling_bardeen
    
    

    启动

    docker start

    ajune@ubuntu:~$ 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
      -i, --interactive          Attach container's STDIN
    
    ajune@ubuntu:~$ docker start 8111753f3fc2
    ajune@ubuntu:~$ docker ps -a
    CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                     PORTS                                   NAMES
    8111753f3fc2   ubuntu    "bash"                   5 minutes ago   Exited (0) 2 seconds ago                                           dazzling_bardeen
    

    运行

    • 运行

      docker run

      docker run命令首先creates在指定映像上创建一个可写容器层,然后starts使用指定的命令。也就是说, docker run相当于 API /containers/createthen /containers/(id)/start。一个停止的容器可以使用docker start. 查看docker ps -a以查看所有容器的列表。
      Docker在后台运行的标准操作:

      • 检查本地是否存在指定的镜像,如果不存在,从公共仓库下下载

      • 利用镜像创建一个容器,并启动该容器

      • 分配一个文件系统给容器,并在只读的镜像层外面怪在一层可读写层

      • 从宿主机配置的网桥接一个虚拟接口到容器中

      • 从网桥的地址池配置一个IP地址给容器

      • 执行用户指定的应用程序

      • 执行完毕后容器被自动终止

      # 使用交互终端的方式启动名字为python3的容器,并且使用的镜像为python镜像tag为3.
      ajune@ubuntu:~$ docker run -it --name python3 python:3 /bin/bash 
      root@8665c5fb049e:/# python
      Python 3.9.6 (default, Jul 22 2021, 15:16:20) 
      [GCC 8.3.0] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>> exit()
      # 退出容器
      root@8665c5fb049e:/# exit
      exit
      # 此时对应的容器也停止了
      ajune@ubuntu:~$ docker ps -a
      CONTAINER ID   IMAGE      COMMAND       CREATED              STATUS                     PORTS     NAMES
      8665c5fb049e   python:3   "/bin/bash"   About a minute ago   Exited (0) 4 seconds ago             python3
      
      # 运行一个nginx容器, 启动一个名字为nginx01的容器,将宿主机的8080端口映射到容器的80端口。
      ajune@ubuntu:~$ docker run -d --name nginx01 -p 8080:80 nginx
      fcff774abdc3f80685212e27372f3a2c710f535aaebc4d5bb31e6a8dfbbea73d
      ajune@ubuntu:~$ docker ps --filter name=nginx
      CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES
      fcff774abdc3   nginx     "/docker-entrypoint.…"   8 seconds ago   Up 7 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   nginx01
      ajune@ubuntu:~$ 
      
      
      参数 默认值 含义
      --add-host 添加自定义主机到 IP 映射 (host:ip)
      --attach , -a 附加到 STDIN、STDOUT 或 STDERR
      --blkio-weight Block IO(相对权重),在 10 到 1000 之间,或 0 表示禁用(默认为 0)
      --blkio-weight-device 块IO权重(相对设备权重)
      --cap-add 添加 Linux 功能
      --cap-drop 删除 Linux 功能
      --cgroup-parent 容器的可选父 cgroup
      --cgroupns API 1.41+ 要使用的 Cgroup 命名空间 (host|private) 'host':在 Docker 主机的 cgroup 命名空间中运行容器 'private':在其自己的私有 cgroup 命名空间中运行容器 '':使用由 default-cgroupns-配置的 cgroup 命名空间守护进程的模式选项(默认)
      --cidfile 将容器 ID 写入文件
      --cpu-count CPU 计数(仅限 Windows)
      --cpu-percent CPU 百分比(仅限 Windows)
      --cpu-period 限制 CPU CFS(完全公平调度程序)周期
      --cpu-quota 限制 CPU CFS(完全公平调度程序)配额
      --cpu-rt-period API 1.25+ 以微秒为单位限制 CPU 实时周期
      --cpu-rt-runtime API 1.25+ 以微秒为单位限制 CPU 实时运行时间
      --cpu-shares , -c CPU份额(相对权重)
      --cpus API 1.25+ CPU数量
      --cpuset-cpus 允许执行的 CPU (0-3, 0,1)
      --cpuset-mems 允许执行的 MEM (0-3, 0,1)
      --detach , -d 在后台运行容器并打印容器 ID
      --detach-keys 覆盖用于分离容器的键序列
      --device 将主机设备添加到容器
      --device-cgroup-rule 向 cgroup 允许的设备列表添加规则
      --device-read-bps 限制设备的读取速率(每秒字节数)
      --device-read-iops 限制设备的读取速率(每秒 IO)
      --device-write-bps 限制设备的写入速率(每秒字节数)
      --device-write-iops 限制设备的写入速率(每秒 IO)
      --disable-content-trust true 跳过图像验证
      --dns 设置自定义 DNS 服务器
      --dns-opt 设置 DNS 选项
      --dns-option 设置 DNS 选项
      --dns-search 设置自定义 DNS 搜索域
      --domainname 容器NIS域名
      --entrypoint 覆盖图像的默认 ENTRYPOINT
      --env , -e 设置环境变量
      --env-file 读入环境变量文件
      --expose 公开一个端口或一系列端口
      --gpus API 1.40+ 要添加到容器中的 GPU 设备('all' 以传递所有 GPU)
      --group-add 添加要加入的其他组
      --health-cmd 运行以检查健康状况的命令
      --health-interval 运行检查之间的时间(ms|s|m|h)(默认为 0s)
      --health-retries 报告不健康需要连续失败
      --health-start-period API 1.29+ 在开始健康重试倒计时(ms|s|m|h)之前容器初始化的开始时间(默认为 0s)
      --health-timeout 允许运行一次检查的最长时间(ms|s|m|h)(默认为 0s)
      --help 打印使用
      --hostname , -h 容器主机名
      --init API 1.25+ 在容器内运行一个 init 来转发信号和收获进程
      --interactive , -i 即使未连接,也要保持 STDIN 打开
      --io-maxbandwidth 系统驱动器的最大 IO 带宽限制(仅限 Windows)
      --io-maxiops 系统驱动器的最大 IOps 限制(仅限 Windows)
      --ip IPv4 地址(例如 172.30.100.104)
      --ip6 IPv6 地址(例如,2001:db8::33)
      --ipc 使用IPC模式
      --isolation 容器隔离技术
      --kernel-memory 内核内存限制
      --label , -l 在容器上设置元数据
      --label-file 读入一行分隔的标签文件
      --link 添加到另一个容器的链接
      --link-local-ip 容器 IPv4/IPv6 链路本地地址
      --log-driver 容器的日志驱动
      --log-opt 日志驱动程序选项
      --mac-address 容器 MAC 地址(例如,92:d0:c6:0a:29:33)
      --memory , -m 内存限制
      --memory-reservation 内存软限制
      --memory-swap 交换限制等于内存加交换:“-1”启用无限交换
      --memory-swappiness -1 调整容器内存交换(0 到 100)
      --mount 将文件系统挂载附加到容器
      --name 为容器指定名称
      --net 将容器连接到网络
      --net-alias 为容器添加网络范围的别名
      --network 将容器连接到网络
      --network-alias 为容器添加网络范围的别名
      --no-healthcheck 禁用任何容器指定的 HEALTHCHECK
      --oom-kill-disable 禁用 OOM 杀手
      --oom-score-adj 调整主机的 OOM 首选项(-1000 到 1000)
      --pid 要使用的 PID 命名空间
      --pids-limit 调整容器 pids 限制(设置 -1 表示无限制)
      --platform API 1.32+ 如果服务器支持多平台,则设置平台
      --privileged 授予此容器扩展权限
      --publish , -p 将容器的端口发布到主机
      --publish-all , -P 将所有暴露的端口发布到随机端口
      --pull missing 运行前拉取镜像(“总是”|“缺失”|“从不”)
      --read-only 将容器的根文件系统挂载为只读
      --restart no 容器退出时应用的重启策略
      --rm 退出时自动移除容器
      --runtime 用于此容器的运行时
      --security-opt 安全选项
      --shm-size /dev/shm 的大小
      --sig-proxy true 代理接收到进程的信号
      --stop-signal SIGTERM 停止容器的信号
      --stop-timeout API 1.25+ 停止容器的超时时间(以秒为单位)
      --storage-opt 容器的存储驱动程序选项
      --sysctl sysctl 选项
      --tmpfs 挂载一个 tmpfs 目录
      --tty , -t 分配一个伪 TTY
      --ulimit 超限选项
      --user , -u 用户名或 UID(格式:<name|uid>[:<group|gid>])
      --userns 要使用的用户命名空间
      --uts 要使用的 UTS 命名空间
      --volume , -v 绑定挂载卷
      --volume-driver 容器的可选卷驱动程序
      --volumes-from 从指定的容器挂载卷
      --workdir , -w 容器内的工作目录

    暂停

    docker pause

    ajune@ubuntu:~$ docker pause --help
    
    Usage:  docker pause CONTAINER [CONTAINER...]
    
    Pause all processes within one or more containers
    
    
    ajune@ubuntu:~$ docker ps -a
    CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                     PORTS                                   NAMES
    8111753f3fc2   ubuntu    "bash"                   5 minutes ago   Exited (0) 2 seconds ago                                           dazzling_bardeen
    c6d7d2387c2f   nginx     "/docker-entrypoint.…"   2 hours ago     Up 2 hours                 0.0.0.0:8081->80/tcp, :::8081->80/tcp   nginxVolumeTest
    fcff774abdc3   nginx     "/docker-entrypoint.…"   2 hours ago     Up 2 hours                 0.0.0.0:8080->80/tcp, :::8080->80/tcp   nginx01
    ajune@ubuntu:~$ docker pause nginx01
    nginx01
    ajune@ubuntu:~$ docker ps -a
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                     PORTS                                   NAMES
    8111753f3fc2   ubuntu    "bash"                   10 minutes ago   Exited (0) 4 minutes ago                                           dazzling_bardeen
    c6d7d2387c2f   nginx     "/docker-entrypoint.…"   2 hours ago      Up 2 hours                 0.0.0.0:8081->80/tcp, :::8081->80/tcp   nginxVolumeTest
    fcff774abdc3   nginx     "/docker-entrypoint.…"   2 hours ago      Up 2 hours (Paused)        0.0.0.0:8080->80/tcp, :::8080->80/tcp   nginx01
    
    

    终止

    • 终止

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

    进入

    • docker attach 无法进入一个已经停止的容器

      当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。

      因为这个原因,所以docker attach命令不太适合于生产环境,平时自己开发应用时可以使用该命令。

      ajune@ubuntu:~$ 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 # 指定退出attach的模式的快捷键,默认为Ctrl+P
            --no-stdin             Do not attach STDIN # 是否关闭标准输入,默认是打开
            --sig-proxy            Proxy all received signals to the process (default true) # 是否代理收到的信号给应用进程
      
      
      # 进入名字为python3的容器
      ajune@ubuntu:~$ docker ps  -a
      CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS                     PORTS     NAMES
      8665c5fb049e   python:3   "/bin/bash"   14 minutes ago   Exited (0) 4 seconds ago             python3
      ajune@ubuntu:~$ docker attach python3
      You cannot attach to a stopped container, start it first
      ajune@ubuntu:~$ docker start python3
      python3
      ajune@ubuntu:~$ docker attach python3
      # 如果使用exit退出容器会停止。
      # 如果使用Ctrl+P+Q可以退出,但是容器不会停止运行。
      root@8665c5fb049e:/# read escape sequence
      ajune@ubuntu:~$ docker ps  -a
      CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS              PORTS     NAMES
      8665c5fb049e   python:3   "/bin/bash"   16 minutes ago   Up About a minute             python3
      
      
    • docker exec 无法进入一个已经停止的容器

      打开一个新的终端

      ajune@ubuntu:~$ 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
            --env-file list        Read in a file of environment variables
        -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>])
        -w, --workdir string       Working directory inside the container
      
      
      ajune@ubuntu:~$ docker ps -a
      CONTAINER ID   IMAGE      COMMAND     CREATED         STATUS                     PORTS     NAMES
      2490845e7be8   python:3   "python3"   6 minutes ago   Exited (0) 6 minutes ago             python3
      # 与attach 一样,无法进入已停止运行的容器
      ajune@ubuntu:~$ docker exec -it python3 /bin/bash
      Error response from daemon: Container 2490845e7be8fd0c6ba6e8e6e744ac1d685795c40f4a55d5a63ef0c76227b75a is not running
      ajune@ubuntu:~$ docker start python3
      python3
      ajune@ubuntu:~$ docker exec -it python3 /bin/bash
      root@2490845e7be8:/# exit
      exit
      # 容器被挂起,但是没停止运行
      ajune@ubuntu:~$ docker ps -a
      CONTAINER ID   IMAGE      COMMAND     CREATED         STATUS          PORTS     NAMES
      2490845e7be8   python:3   "python3"   7 minutes ago   Up 28 seconds             python3
      

    删除

    • 删除, 一个正在运行的容器无法直接删除

      docker rm

      ajune@ubuntu:~$ 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)
        -l, --link      Remove the specified link
        -v, --volumes   Remove anonymous volumes associated with the container
      
      
      # 删除容器
      ajune@ubuntu:~$ docker rm python3
      Error response from daemon: You cannot remove a running container 8665c5fb049e127fcbd0cf527652b4d74bc17e0e27bebb3bcdda58b51edf19f6. Stop the container before attempting removal or force remove
      # 要删除的容器正在运行,无法删除
      ajune@ubuntu:~$ docker ps -a
      CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS         PORTS     NAMES
      8665c5fb049e   python:3   "/bin/bash"   20 minutes ago   Up 6 minutes             python3
      # 使用-f参数,强制删除。Docker后先发送SINGKILL信号给容器,终止其中的应用,之后强制删除。
      ajune@ubuntu:~$ docker rm -f python3
      python3
      ajune@ubuntu:~$ docker ps -a
      CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
      

    导入与导出

    导出容器

    docker export -o 文件名.tar 镜像

    ajune@ubuntu:~$ docker export --help
    
    Usage:  docker export [OPTIONS] CONTAINER
    
    Export a container's filesystem as a tar archive
    
    Options:
      -o, --output string   Write to a file, instead of STDOUT
    
    
    ajune@ubuntu:~$ docker export -o nginx01.tar nginx01
    ajune@ubuntu:~$ ls |grep nginx
    nginx01.tar
    ajune@ubuntu:~$ 
    
    

    导入容器

    docker import

    ajune@ubuntu:~$ docker import --help
    
    Usage:  docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
    
    Import the contents from a tarball to create a filesystem image
    
    Options:
      -c, --change list       Apply Dockerfile instruction to the created image
      -m, --message string    Set commit message for imported image
          --platform string   Set platform if server is multi-platform capable
    

    查看容器

    查看容器详情

    docker inspect

    查看容器内进程

    docker top

    查看看统计信息

    docker stats

    其他命令

    复制

    docker cp将文件从宿主机复制到容器内,或者将文件从容器内复制到宿主机。

    ajune@ubuntu:~$ 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
    
    Use '-' as the source to read a tar archive from stdin
    and extract it to a directory destination in a container.
    Use '-' as the destination to stream a tar archive of a
    container source to stdout.
    
    Options:
      -a, --archive       Archive mode (copy all uid/gid information)
      -L, --follow-link   Always follow symbol link in SRC_PATH
    
    ajune@ubuntu:~$ docker cp ./index.html nginx01:/usr/share/nginx/html/
    

    查看容器变更

    docker diff

    查看端口映射

    docker port

    更新配置

    docker update

    数据卷

    创建数据卷

    ajune@ubuntu:~$ docker volume  --help
    
    Usage:  docker volume COMMAND
    
    Manage volumes
    
    Commands:
      create      Create a volume
      inspect     Display detailed information on one or more volumes
      ls          List volumes
      prune       Remove all unused local volumes
      rm          Remove one or more volumes
    
    Run 'docker volume COMMAND --help' for more information on a command.
    
    ajune@ubuntu:~$ docker volume create testVolume
    testVolume
    ajune@ubuntu:~$ docker volume ls
    DRIVER    VOLUME NAME
    local     testVolume
    ajune@ubuntu:~$ docker volume inspect testVolume
    [
        {
            "CreatedAt": "2021-08-16T14:07:49+08:00",
            "Driver": "local",
            "Labels": {},
            "Mountpoint": "/var/lib/docker/volumes/testVolume/_data",
            "Name": "testVolume",
            "Options": {},
            "Scope": "local"
        }
    ]
    

    绑定数据卷

    可以在创建容器时通过-mount选项使用数据卷。

    • volume:普通数据卷,映射到主机目录下。
    • bind:绑定数据卷,映射到主机的指定路径下。
    • tmpfs:临时数据卷,只存在于内存中。

    添加数据卷

    ajune@ubuntu:~$ docker run --name nginxVolumeTest -d -v /home/ajune/sourceDir:/desDir -p 8081:80 nginx
    c6d7d2387c2f69b406c47f623eb596b0a0708a0ba7c8ee3216bd3500c76eed0d
    ajune@ubuntu:~$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                   NAMES
    c6d7d2387c2f   nginx     "/docker-entrypoint.…"   3 seconds ago    Up 2 seconds    0.0.0.0:8081->80/tcp, :::8081->80/tcp   nginxVolumeTest
    fcff774abdc3   nginx     "/docker-entrypoint.…"   22 minutes ago   Up 22 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   nginx01
    
    

    多个容器挂在到同一个数据卷上

    ajune@ubuntu:~$ mkdir p0
    ajune@ubuntu:~$ docker run -it --name u1 -v /home/ajune/p0:/desDir ubuntu /bin/bash
    ajune@ubuntu:~$ docker run -it --name u2 -v /home/ajune/p0:/desDir ubuntu /bin/bash
    ajune@ubuntu:~$ docker run -it --name u3 -v /home/ajune/p0:/desDir ubuntu /bin/bash
    
    

    端口

    映射

    docker run -d -p 5000:5000 --name pythonweb training/webapp python app.py

    ajune@ubuntu:~$ docker run --help
    
    Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    
    Run a command in a new container
    
    Options:
    ...
      -p, --publish list                   Publish a container's port(s) to the host
      -P, --publish-all                    Publish all exposed ports to random ports
    ...
    

    互联

    ajune@ubuntu:~$ docker run --help|grep link
          --link list                      Add link to another container
          --link-local-ip list             Container IPv4/IPv6 link-local addresses
    
    ajune@ubuntu:~$ docker run -d --name db training/postgres
    ajune@ubuntu:~$ docker run -d -P --name web --link db:db training/webapp python app.py
    
    

    通过Dockerfile创建镜像

    Dockerfile 主体内容分为四部分:基础镜像信息、 维护者信息、 镜像操作指 令和容器启动时执行指令。

    # 指定所创建镜像的基础镜像
    # 指定所创建镜像的基础镜像
    ARG VERSION=9.3
    FROM debian:${VERSION}
    
    # 为生成的镜像添加元数据标签信息
    LABEL maintainer docker_user<ajune>
    LABEL version="1.0" author="ajune" date="2020-01-01" description="" 
    # 暴露端口,只起到声明作用,并不会自动完成端口的映射
    EXPOSE 22 80 8443
    
    # 指定环境变量, 但是可以在docker run时通过--env key=value的方式进行覆盖
    ENV APP VERSION=l.0.0
    ENV APP_HOME=/usr/local/app
    ENV PATH $PATH:/usr/local/bin
    
    # 指定镜像的默认入口命令, 该入口命令会在启动容器时作为根命令执行, 所有传人值作为该命令的参数。
    # ENTRYPOINT ["executable", "paraml ", "param2"] # exec 调用执行
    # ENTRYPOINT command param 1 param2 # shell 中执行
    
    # 数据卷挂载
    VOLUME ["/data1", "/data2"]
    
    RUN useradd --create-home --no-log-init --shell /bin/bash ajune 
        && adduser ajune sudo 
        && echo 'ajune:ajunepwd' | chpasswd 
        && apt-get update 
        && apt-get install -y python3 
        && rm -rf /var/cache/apt  
        && rm -rf /var/lib/apt/lists/* 
        && mkdir /app 
        && pwd
    # 用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。
    USER ajune
    # 指定工作目录
    WORKDIR /
    WORKDIR app
    # 此时工作目录为/app
    
    #  当基于这个镜像创建新的镜像时才会执行
    ONBUILD ADD . /app # 当使用这个dockerfile创建镜像时并不执行,当使用了该镜像创建新的镜像时才会执行。
    
    # SHELL ["executable", "parameters"] 默认值 ["/bin/sh", "-c"]
    SHELL ["/bin/sh", "-c"]
    
    # CMD指令用来指定启动容器时默认执行的命令
    # CMD [ "executable" , "param1 " , "param2"]:相当于执行executable param1 param2,推荐方式;
    # CMD command param1 param2:在默认的Shell 中执行,提供给需要交互的应用;
    # CMD [ "param1" , "param2"]:提供给ENTRYPOINT的默认参数。
    # 每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候手动指定了运行的命令(作为run命令的参数),则会覆盖掉CMD指定的命令。
    CMD ["/bin/sh", "-c"]
    
    # ADD 添加文件到镜像内
    # 格式为ADD <src> <dest>。
    # 该命令将复制指定的<src>路径下内容到容器中的<dest>路径下。
    #其中<src>可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;还可以是一个tar文件(自动解压为目录)<dest>可以是镜像内绝对路径,或者相对于工作目录(WORKDIR)的相对路径。路径支持正则格式。
    ADD add.txt  /app
    
    # COPY 复制内容到镜像。
    # 格式为COPY <src> <dest>。
    # 复制本地主机的<src>(为Dockerfile所在目录的相对路径,文件或目录)下内容到镜像中的<dest>。目标路径不存在时,会自动创建。
    # 路径同样支持正则格式。
    # COPY与ADD指令功能类似,当使用本地目录为源目录时,推荐使用COPY。
    copy ./copy /copy
    
    
    
    分类 指令 说明
    配置 ARG 定义创建镜像过程之中使用的变量
    FROM 指定所创建镜像的基础镜像
    LABEL 为生成的镜像添加元数据标签信息
    EXPOSE 声明镜像内服务监听的端口
    ENV 指定环境变量
    ENTRYPOINT 指定镜像的默认入口命令
    VOLUME 创建一个数据卷挂载点
    USER 指定运行容器时的用户名或UID
    WORKDIR 配置工作目录
    ONBUILD 创建子镜像时指定自动执行的操作指令
    STOPSIGNAL 指定退出的信号值
    HEALTHCHECK 配置所启动容器如何进行健康检查
    SHELL 指定默认shell类型
    操作指令 RUN 运行指定命令
    CMD 启动容器时指定默认执行的命令
    ADD 添加内容到镜像
    COPY 复制内容到镜像

    创建的时候每遇到一个RUN、ADD、COPY都会生成一个新的镜像。

    # 使用上面的内容写到Dockerfile中
    ajune@ubuntu:~/dockerfile_test vim Dockerfile
    ajune@ubuntu:~/dockerfile_test$ docker build -t dtest:v1 .
    ajune@ubuntu:~/dockerfile_test$ docker images
    REPOSITORY          TAG       IMAGE ID       CREATED             SIZE
    dtest               v1        683cb0154877   21 seconds ago      141MB
    ajune@ubuntu:~/dockerfile_test$ docker run -it --name dockerfiletest dtest:v1 /bin/bash
    ajune@939ae842b5f5:/app$ pwd
    /app 
    

    网络

    Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

    Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。

    Docker网络模式 配置 说明
    host模式 –net=host 容器和宿主机共享Network
    container模式 –net=container:NAME_or_ID 容器和另外一个容器共享Network namespace
    none模式 –net=none 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。
    bridge模式 –net=bridge (默认为该模式)

    查看网络

    ajune@ubuntu:~$ ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:54:f7:8d brd ff:ff:ff:ff:ff:ff
        inet 192.168.8.100/24 brd 192.168.8.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe54:f78d/64 scope link 
           valid_lft forever preferred_lft forever
    # 为docker创建的默认网络
    3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:56:b5:8a:35 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:56ff:feb5:8a35/64 scope link 
           valid_lft forever preferred_lft forever
    

    使用默认网络(docker0)

    # 启动redis的docker容器
    ajune@ubuntu:~$ docker run -it --name redis01 redis /bin/bash
    
    # 查看redis01 的详细信息
    ajune@ubuntu:~$ docker inspect redis01
    #...
    "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "22a590522789485dbdea9b86af07bd0906d45b395d79580a53a0cb89d157a5b4",
                        "EndpointID": "fb3729f0fda0f72e326f51b40221fff90702bbcbe3de157129d384370b7bedfc",
                        "Gateway": "172.17.0.1",
                        "IPAddress": "172.17.0.2",
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:11:00:02",
                        "DriverOpts": null
                    }
                }
    #...
    

    创建新的容器,与redis01使用--link连接

    ajune@ubuntu:~$ docker run -it --name redis02 --link redis01 redis /bin/bash
    
    ajune@ubuntu:~$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
    bcd415508ab5   redis     "docker-entrypoint.s…"   5 minutes ago    Up 5 minutes    6379/tcp   redis02
    2ecd76c87214   redis     "docker-entrypoint.s…"   22 minutes ago   Up 22 minutes   6379/tcp   redis01
    
    # 如果找不到ping命令
    # 先执行apt update
    # 再执行apt install -y iputils-ping
    # redis01 ip:172.17.0.2
    # redis02 ip:172.17.0.3
    
    ajune@ubuntu:~$ docker exec -it redis02 /bin/bash
    # 在redis02中ping redis01,只能通过IP 进行ping
    root@bcd415508ab5:/data# ping 172.17.0.2
    PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
    64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.166 ms
    64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.100 ms
    64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.097 ms
    64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.164 ms
    64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.129 ms
    ^C
    --- 172.17.0.2 ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time 6ms
    rtt min/avg/max/mdev = 0.097/0.131/0.166/0.030 ms
    
    ajune@ubuntu:~$ docker exec -it redis01 /bin/bash
    # 在redis01中ping redis02
    root@2ecd76c87214:/data# ping 172.17.0.3
    PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
    64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.076 ms
    64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.098 ms
    64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.074 ms
    ^C
    --- 172.17.0.3 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 1000ms
    rtt min/avg/max/mdev = 0.074/0.082/0.098/0.015 ms
    
    
    

    查看docker0

    ajune@ubuntu:~$ docker network inspect bridge 
    [
        {
            "Name": "bridge",
            "Id": "22a590522789485dbdea9b86af07bd0906d45b395d79580a53a0cb89d157a5b4",
            "Created": "2021-08-17T14:32:15.940672329+08:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": null,
                "Config": [
                    {
                        "Subnet": "172.17.0.0/16",
                        "Gateway": "172.17.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {
     			# 该网络下有哪些容器
                "2ecd76c872142227e4f331f951958e150589b28bbf7562893b68daf962cc91a7": {
                    "Name": "redis01",
                    "EndpointID": "fb3729f0fda0f72e326f51b40221fff90702bbcbe3de157129d384370b7bedfc",
                    "MacAddress": "02:42:ac:11:00:02",
                    "IPv4Address": "172.17.0.2/16",
                    "IPv6Address": ""
                },
                "bcd415508ab5c7ba42dfc340b1e6c09f5443f1ffe80206eb2d6f511b0b693b15": {
                    "Name": "redis02",
                    "EndpointID": "bf0a17cbe8aad8cda8d307f52a60a83064196078492a9429b88f0b9db5df2cc4",
                    "MacAddress": "02:42:ac:11:00:03",
                    "IPv4Address": "172.17.0.3/16",
                    "IPv6Address": ""
                }
            },
            "Options": {
                "com.docker.network.bridge.default_bridge": "true",
                "com.docker.network.bridge.enable_icc": "true",
                "com.docker.network.bridge.enable_ip_masquerade": "true",
                "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
                "com.docker.network.bridge.name": "docker0",
                "com.docker.network.driver.mtu": "1500"
            },
            "Labels": {}
        }
    ]
    
    

    创建自定义网络

    ajune@ubuntu:~$ docker network --help
    
    Usage:  docker network COMMAND
    
    Manage networks
    
    Commands:
      connect     Connect a container to a network
      create      Create a network
      disconnect  Disconnect a container from a network
      inspect     Display detailed information on one or more networks
      ls          List networks
      prune       Remove all unused networks
      rm          Remove one or more networks
    
    Run 'docker network COMMAND --help' for more information on a command.
    ajune@ubuntu:~$ docker network create --help
    
    Usage:  docker network create [OPTIONS] NETWORK
    
    Create a network
    
    Options:
          --attachable           Enable manual container attachment
          --aux-address map      Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
          --config-from string   The network from which to copy the configuration
          --config-only          Create a configuration only network
      -d, --driver string        Driver to manage the Network (default "bridge")
          --gateway strings      IPv4 or IPv6 Gateway for the master subnet
          --ingress              Create swarm routing-mesh network
          --internal             Restrict external access to the network
          --ip-range strings     Allocate container ip from a sub-range
          --ipam-driver string   IP Address Management Driver (default "default")
          --ipam-opt map         Set IPAM driver specific options (default map[])
          --ipv6                 Enable IPv6 networking
          --label list           Set metadata on a network
      -o, --opt map              Set driver specific options (default map[])
          --scope string         Control the network's scope
          --subnet strings       Subnet in CIDR format that represents a network segment
    
    
    # 创建网络段为172.16.0.0/16的网络,网关为172.16.0.1 名字为redis-net
    ajune@ubuntu:~$ docker network create --driver bridge --subnet 172.16.0.0/16 --gateway 172.16.0.1 redis-net
    e6b96f4e33d3d3bbe1bd88247b64127f51ad6e87a95f57cb4ea35e11d2b65492
    # 查看redis-net信息
    ajune@ubuntu:~$ docker network inspect redis-net
    [
        {
            "Name": "redis-net",
            "Id": "e6b96f4e33d3d3bbe1bd88247b64127f51ad6e87a95f57cb4ea35e11d2b65492",
            "Created": "2021-08-18T10:46:40.210906268+08:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "172.16.0.0/16",
                        "Gateway": "172.16.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {},
            "Options": {},
            "Labels": {}
        }
    ]
    
    

    使用自定义网络

    # 停止正在运行的容器
    ajune@ubuntu:~$ docker stop $(docker ps -aq)
    # 删除容器
    ajune@ubuntu:~$ docker rm $(docker ps -aq)
    # 创建容器,使用自定义网络,并指定ip
    # 创建一个名字为redis10,使用网络redis-net,IP为172.16.0.10的容器
    ajune@ubuntu:~$ docker run -d --name redis10 --network redis-net --ip 172.16.0.10 redis
    9d90331ff1f82d18df66872b2bb121d898811fa05b7989e18385d97167094c2b
    # 创建一个名字为redis11,使用网络redis-net,IP为172.16.0.11的容器
    ajune@ubuntu:~$ docker run -d --name redis11 --network redis-net --ip 172.16.0.11 redis
    1f96d916bc45b6f6b5ef72b3bedb50f21548e73752126b40bcfd0d8048ec1b1a
    # 创建一个名字为redis12,使用网络redis-net,IP为172.16.0.12的容器
    ajune@ubuntu:~$ docker run -d --name redis12 --network redis-net --ip 172.16.0.12 redis
    bbcc9d6ee81fc2f66c7479949271011a28a00ea0eda63a05dc44fc7f65546f16
    ajune@ubuntu:~$ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS      NAMES
    bbcc9d6ee81f   redis     "docker-entrypoint.s…"   9 seconds ago    Up 8 seconds    6379/tcp   redis12
    1f96d916bc45   redis     "docker-entrypoint.s…"   15 seconds ago   Up 14 seconds   6379/tcp   redis11
    9d90331ff1f8   redis     "docker-entrypoint.s…"   33 seconds ago   Up 31 seconds   6379/tcp   redis10
    
    

    查看此时redis-net的网络情况

    ajune@ubuntu:~$ docker network inspect redis-net
    [
        {
            "Name": "redis-net",
            "Id": "e6b96f4e33d3d3bbe1bd88247b64127f51ad6e87a95f57cb4ea35e11d2b65492",
            "Created": "2021-08-18T10:46:40.210906268+08:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "172.16.0.0/16",
                        "Gateway": "172.16.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {
                "1f96d916bc45b6f6b5ef72b3bedb50f21548e73752126b40bcfd0d8048ec1b1a": {
                    "Name": "redis11",
                    "EndpointID": "9ffac287198baaa3ba2850a4ee4d8de35d9dd29c9660196305add3c94220044b",
                    "MacAddress": "02:42:ac:10:00:0b",
                    "IPv4Address": "172.16.0.11/16",
                    "IPv6Address": ""
                },
                "9d90331ff1f82d18df66872b2bb121d898811fa05b7989e18385d97167094c2b": {
                    "Name": "redis10",
                    "EndpointID": "12c0fafce8491ff6335d27c551fe8b6ce21a5b5c570c4e741816e0941f4de582",
                    "MacAddress": "02:42:ac:10:00:0a",
                    "IPv4Address": "172.16.0.10/16",
                    "IPv6Address": ""
                },
                "bbcc9d6ee81fc2f66c7479949271011a28a00ea0eda63a05dc44fc7f65546f16": {
                    "Name": "redis12",
                    "EndpointID": "68c6695feead4a74b28a78ebb4e2d2275646781e3f03c29659eb33fcd5f61379",
                    "MacAddress": "02:42:ac:10:00:0c",
                    "IPv4Address": "172.16.0.12/16",
                    "IPv6Address": ""
                }
            },
            "Options": {},
            "Labels": {}
        }
    ]
    
    
    # 在redis10中ping redis11、redis12(不使用IP)
    root@9d90331ff1f8:/data# ping redis12
    PING redis12 (172.16.0.12) 56(84) bytes of data.
    64 bytes from redis12.redis-net (172.16.0.12): icmp_seq=1 ttl=64 time=0.099 ms
    64 bytes from redis12.redis-net (172.16.0.12): icmp_seq=2 ttl=64 time=0.105 ms
    64 bytes from redis12.redis-net (172.16.0.12): icmp_seq=3 ttl=64 time=0.095 ms
    ^C
    --- redis12 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 3ms
    rtt min/avg/max/mdev = 0.095/0.099/0.105/0.012 ms
    root@9d90331ff1f8:/data# ping redis11
    PING redis11 (172.16.0.11) 56(84) bytes of data.
    64 bytes from redis11.redis-net (172.16.0.11): icmp_seq=1 ttl=64 time=0.172 ms
    64 bytes from redis11.redis-net (172.16.0.11): icmp_seq=2 ttl=64 time=0.104 ms
    64 bytes from redis11.redis-net (172.16.0.11): icmp_seq=3 ttl=64 time=0.058 ms
    64 bytes from redis11.redis-net (172.16.0.11): icmp_seq=4 ttl=64 time=0.136 ms
    ^C
    --- redis11 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 4ms
    rtt min/avg/max/mdev = 0.058/0.117/0.172/0.043 ms
    root@9d90331ff1f8:/data# 
    
    

    在宿主机查看

    ajune@ubuntu:~$ ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:54:f7:8d brd ff:ff:ff:ff:ff:ff
        inet 192.168.8.100/24 brd 192.168.8.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe54:f78d/64 scope link 
           valid_lft forever preferred_lft forever
    3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
        link/ether 02:42:56:b5:8a:35 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:56ff:feb5:8a35/64 scope link 
           valid_lft forever preferred_lft forever
    # 之前创建的redis-net
    140: br-e6b96f4e33d3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:83:b5:e7:32 brd ff:ff:ff:ff:ff:ff
        inet 172.16.0.1/16 brd 172.16.255.255 scope global br-e6b96f4e33d3
           valid_lft forever preferred_lft forever
        inet6 fe80::42:83ff:feb5:e732/64 scope link 
           valid_lft forever preferred_lft forever
    142: veth3df46a9@if141: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-e6b96f4e33d3 state UP group default 
        link/ether 82:e1:9d:6d:cf:d9 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet6 fe80::80e1:9dff:fe6d:cfd9/64 scope link 
           valid_lft forever preferred_lft forever
    144: veth2def6a8@if143: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-e6b96f4e33d3 state UP group default 
        link/ether 7e:b4:2a:75:10:fb brd ff:ff:ff:ff:ff:ff link-netnsid 1
        inet6 fe80::7cb4:2aff:fe75:10fb/64 scope link 
           valid_lft forever preferred_lft forever
    146: veth8638d90@if145: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-e6b96f4e33d3 state UP group default 
        link/ether b6:56:6a:cf:66:ec brd ff:ff:ff:ff:ff:ff link-netnsid 2
        inet6 fe80::b456:6aff:fecf:66ec/64 scope link 
           valid_lft forever preferred_lft forever
    
    
  • 相关阅读:
    images have the “stationarity” property, which implies that features that are useful in one region are also likely to be useful for other regions.
    算法报告
    word2vec_basic.py
    Softmax_function
    Convex combination
    函数的光滑化或正则化 卷积 应用 两个统计独立变量X与Y的和的概率密度函数是X与Y的概率密度函数的卷积
    world embedding 嵌入
    dump json 显示中文问题
    dump json 显示中文问题
    perl $d = encode_utf8($r); $f = decode_json($d)
  • 原文地址:https://www.cnblogs.com/June-King/p/15152082.html
Copyright © 2011-2022 走看看