• Docker常用命令


    1. 镜像

    1.1 获取镜像

    docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
    

    具体的选项可以通过 docker pull --help 命令看到, 这里我们说一下镜像名称的格式

    • Docker 镜像仓库地址: 地址的格式一般是 <域名/IP>[:端口号]. 默认地址是 Docker Hub
    • 仓库名: 如之前所说, 这里的仓库名是两段式名称, 即 <用户名>/<软件名>. 对于 Docker Hub, 如果不给出用户名, 则默认为 library, 也就是官方镜像

    1.2 列出镜像

    ➜  ~ docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    redis               5.0.5-alpine        ed7d2ff5a623        2 weeks ago         29.3MB
    ubuntu              latest              a2a15febcdf3        3 weeks ago         64.2MB
    redis               latest              f7302e4ab3a8        3 weeks ago         98.2MB
    sonatype/nexus3     latest              35ca857d5b19        4 weeks ago         599MB
    

    列表包含了 仓库名标签镜像 ID创建时间 以及 所占用的空间

    其中仓库名和标签在之前的基础概念章节已经介绍过了. 镜像 ID 则是镜像的唯一标识, 一个镜像可以对应多个 标签. 因此, 在上面的例子中, 我们可以看到 redis:5.0.5-alpineredis:latest 拥有相同的 ID, 因为它们对应的是同一个镜像

    1.3 镜像大小

    ➜  ~ docker system df
    TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
    Images              3                   1                   761.2MB             162.4MB (21%)
    Containers          1                   1                   32.93kB             0B (0%)
    Local Volumes       1                   1                   200.9MB             0B (0%)
    Build Cache         0                   0                   0B                  0B
    

    1.4 删除虚悬镜像

    ➜  ~ docker image prune
    

    虚悬镜像: 这个镜像既没有仓库名, 也没有标签, 均为 <none>.

    <none>               <none>              00285df0df87        5 days ago          342 MB
    

    1.5 列出部分镜像

    ➜  ~ docker image ls ubuntu
    

    后面的 ubuntu 必须是 REPOSITORY 的名字.

    1.6 删除本地镜像

    docker image rm [选项] <镜像1> [<镜像2> ...]
    

    其中, <镜像> 可以是 镜像短 ID镜像长 ID镜像名 或者 镜像摘要

    还可以使用下面命令进行删除.

    docker image rm $(docker image ls -q redis)
    

    1.7 将容器保存为镜像(不推荐使用docker commit)

    # 创建一个容器
    ➜  ~ docker run --name webserver -d -p 8080:80 nginx
    
    # 修改容器中的内容
    ➜  ~ docker exec -it webserver bash
    root@e19b32b24b6c:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
    root@e19b32b24b6c:/# exit
    exit
    
    # 查询内容变化
    ➜  ~ docker diff webserver
    C /run
    A /run/nginx.pid
    C /var
    C /var/cache
    C /var/cache/nginx
    A /var/cache/nginx/client_temp
    A /var/cache/nginx/fastcgi_temp
    A /var/cache/nginx/proxy_temp
    A /var/cache/nginx/scgi_temp
    A /var/cache/nginx/uwsgi_temp
    C /usr
    C /usr/share
    C /usr/share/nginx
    C /usr/share/nginx/html
    C /usr/share/nginx/html/index.html
    C /root
    A /root/.bash_history
    
    # 将容器保存为镜像
    ➜  ~ docker commit 
    > --author "snailwu" 
    > --message "修改了默认页面" 
    > webserver 
    > nginx:v1
    sha256:8e660a0a87246c4186174dc77e565328c94186e81282b0845d04c93330043722
    
    # 使用新镜像运行
    ➜  ~ docker run --name web2 -d -p 81:80 nginx:v1
    

    推荐使用 Dockerfile 定制镜像

    2. 容器

    2.1 启动

    # 输出HelloWorld之后, 容器遍退出了
    ➜  ~ docker run ubuntu /bin/echo "Hello World"
    Hello World
    
    # 使用 -t分配一个伪终端, -i让容器的标准输入保持打开
    ➜  ~ docker run -i -t ubuntu /bin/bash
    root@5bf06b2f00bd:/# pwd
    /
    root@5bf06b2f00bd:/#
    
    ## 启动已终止容器
    ➜  ~ docker container start xxx
    ➜  ~ docker start xxx
    

    2.2 后台运行

    加上 -d 参数即可.

    2.3 终止

    ➜  ~ docker container stop xxx
    ➜  ~ docker stop xxx
    

    2.4 进入容器

    使用 docker exec -it xxx /bin/bash 即可.

    2.5 删除容器

    # 删除终止状态的容器
    ➜  ~ docker container rm xxx
    ➜  ~ docker rm xxx
    

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

    快速清除所有终止状态的容器

    ➜  ~ docker container prune
    

    3. 仓库

    3.1 登录/退出

    ➜  ~ docker login
    ➜  ~ docker logout
    

    如果需要 docke push 之类的操作就需要登录了

    4. 数据管理

    4.1 数据卷

    数据卷 是一个可供一个或多个容器使用的特殊目录, 它绕过 UFS, 可以提供很多有用的特性:

    • 数据卷 可以在容器之间共享和重用
    • 数据卷 的修改会立马生效
    • 数据卷 的更新, 不会影响镜像
    • 数据卷 默认会一直存在, 即使容器被删除

    注意: 数据卷 的使用, 类似于 Linux 下对目录或文件进行 mount, 镜像中的被指定为挂载点的目录中的文件会隐藏掉, 能显示看的是挂载的 数据卷.

    # 创建数据卷
    ➜  ~ docker volume create my-vol
    
    # 查看所有数据卷
    ➜  ~ docker volume ls
    
    # 查看数据卷信息
    ➜  ~ docker volume inspect my-vol
    
    # 启动一个挂载数据卷的容器
    ➜  ~ docker run --name web -d -p 80:80 
    > --mount source=my-vol,target=/webapp 
    > nginx
    
    # 删除数据卷
    ➜  ~ docker volume rm my-vol
    
    # 清理无用的数据卷
    ➜  ~ docker volume prune
    

    使用 docker inspect web 查看容器信息, 数据卷信息在 "Mounts" Key下面.

    "Mounts": [
      {
        "Type": "volume",
        "Name": "my-vol",
        "Source": "/var/lib/docker/volumes/my-vol/_data",
        "Destination": "/webapp",
        "Driver": "local",
        "Mode": "z",
        "RW": true,
        "Propagation": ""
      }
    ],
    

    4.2 挂载主机目录

    # 挂载目录
    ➜  ~ docker run --name web -d -p 80:80 
    > --mount type=bind,source=/src/webapp,target=/opt/webapp 
    > nginx
    
    # 挂载文件, 记录容器输入过的命令
    ➜  ~ docker run -rm -it 
    > --mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history 
    > ubuntu /bin/bash
    

    默认是挂载的是读写权限, 可以加上 readonly 参数指定为只读.

    5. 网络

    5.1 外部访问容器

    使用 -p 来映射端口.

    -p 则可以指定要映射的端口, 并且, 在一个指定端口上只可以绑定一个容器.

    支持的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort.

    其它命令:

    # 查看容器端口
    ➜  ~ docker host web
    

    5.2 容器互联

    # 创建网咯
    ➜  ~ docker network create -d bridge wu-net
    
    # 新建容器 web1
    ➜  ~ docker run -d --name web1 --network wu-net -p 81:80 nginx
    
    # 新建容器 web2
    ➜  ~ docker run -d --name web2 --network wu-net -p 82:80 nginx
    
    # 查看 wu-net 网络
    ➜  ~ docker network inspect wu-net
    

    最后会看到 web1 和 web2 在一个网段内.

    5.3 配置DNS

    将主机的 DNS 配置文件挂载到容器中, 这样主机中的 DNS 文件发生变化时, 所有容器的 DNS 就会立刻发生更新.

    还可以在 /etc/docker/daemon.json 文件中加入 DNS 信息:

    {
      "dns" : [
        "114.114.114.114",
        "8.8.8.8"
      ]
    }
    

    这样每次启动的容器 DNS 自动配置为 114.114.114.1148.8.8.8.

    如果用户想要手动指定容器的配置, 可以在使用 docker run 命令启动容器时加入如下参数:

    -h HOSTNAME 或者 --hostname=HOSTNAME 设定容器的主机名, 它会被写到容器内的 /etc/hostname/etc/hosts. 但它在容器外部看不到, 既不会在 docker container ls 中显示, 也不会在其他的容器的 /etc/hosts 看到.

    --dns=IP_ADDRESS 添加 DNS 服务器到容器的 /etc/resolv.conf 中, 让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名.

    --dns-search=DOMAIN 设定容器的搜索域, 当设定搜索域为 .example.com 时, 在搜索一个名为 host 的主机时, DNS 不仅搜索 host, 还会搜索 host.example.com.

    注意: 如果在容器启动时没有指定最后两个参数, Docker 会默认用主机上的 /etc/resolv.conf 来配置容器.

  • 相关阅读:
    【转载】Gradle学习 第八章:依赖管理基础
    【转载】Gradle学习 第七章:Java快速入门
    【转载】Gradle学习 第六章:构建脚本基础
    【转载】Gradle学习 第四章:安装Gradle
    【转载】Gradle学习 第三章:教程
    【转载】Gradle学习 第二章:概述
    【转载】Gradle学习 第一章:引言
    android studio学习----偏好设置
    android studio学习----创建模拟器
    前端生成二维码
  • 原文地址:https://www.cnblogs.com/wuqinglong/p/11490924.html
Copyright © 2020-2023  润新知