美文网首页
Docker 基础命令整理

Docker 基础命令整理

作者: bit_拳倾天下 | 来源:发表于2021-05-09 00:30 被阅读0次

    1. 基本命令

    docker version:查看版本信息

    docker login:若不指定地址,则默认是 dockerhub
    docker login <docker仓库地址> -u <用户名> -p <密码>: 登录
    docker logout:退出

    docker search <镜像名>:搜索镜像
    docker pull <镜像名>:拉取镜像到本地
    docker push <镜像名:tag名>:推送镜像到仓库
    docker run <镜像名或 ID>:运行镜像
    docker start <容器名或 ID>:启动容器
    docker stop <容器名或 ID>:停止容器
    docker restart <容器 ID>:重启容器

    docker run -itd ubuntu /bin/bash
    /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
    -i: 交互式
    -t: 终端,要退出终端,直接输入 exit
    -d: 后台运行
    不加 -d 直接进入终端,加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
    
    -P: 将容器内部使用的网络端口随机映射到我们使用的主机上。
    -p 80:8080 :吧将容器的 8080 端口,映射到主机的 80 端口,也可以网址端口一起映射,如下:
    -p 127.0.0.1:5001:5000,这样我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口。
    默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp
     
    

    docker attach <容器 ID>:进入容器,但是 exit 后,容器会停止
    docker exec <容器 ID> /bin/bash:进入容器,exit 后,容器不会停止推荐

    docker rm <容器 ID>:移除容器
    docker rm -f <容器 ID>:强制移除容器,如果某个容器用 docker stop、docker kill 都无法停止,可以用这个命令强制停止和删除容器
    docker rmi <镜像 ID>:移除镜像
    docker container prune: 清理掉所有处于终止状态的容器

    *删除停止的容器
    sudo docker rm -v $(sudo docker ps -aq -f status=exited)

    *删除所有没有容器引用的镜像
    sudo docker rmi $(sudo docker images | grep "none" | awk '{print $3}'); //分号要保留
    sudo docker rmi -f id

    *标记本地镜像,将其归入某一仓库
    docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
    docker tag test:1.0 myhost/test:v1:将 test:1.0 镜像标记为 myhost/test:v1

    docker build 命令用于使用 Dockerfile 创建镜像

    2. 导入导出

    2.1 导出容器快照

    docker export <容器 ID> > ubuntu.tar: 导出镜像,导出容器快照到本地文件 ubuntu.tar(以 ubuntu 为例)。

    2.2 导入容器快照

    可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
    cat docker/ubuntu.tar | docker import - test/ubuntu:v1

    image
    此外,也可以通过指定 URL 或者某个目录来导入,例如:
    docker import http://example.com/exampleimage.tgz example/imagerepo

    3. 容器信息

    docker port <容器名或id>:查看指定容器端口
    docker logs <容器名或id>:查看容器日志,参数如下

      Options:
            --details        显示更多的信息
        -f, --follow         跟踪实时日志
            --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
            --tail string    从日志末尾显示多少行日志, 默认是all
        -t, --timestamps     显示时间戳
            --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
    

    docker images:查看所有镜像

    docker ps:查看本地运行中的容器,常用参数如下

    -a:查看本地所有容器
    -l:查看本地最后启动的容器
    

    docker inspect <容器名或 ID>:查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

    4. 容器互联

    4.1 创建、查询 network

    docker network create <network名>:创建 network,用于镜像之间访问(可以简单理解为分组),同一个 network 下的镜像之间可以访问,从而使同一个 network 的镜像,用 exec 进入到容器中,可以相互 ping 通。

    -d:参数指定 Docker 网络类型,有 bridge、overlay。
    其中 overlay 网络类型用于 Swarm mode。
    

    sudo docker network ls: 查看已有 network

    4.2 连接容器

    通过 --network 指定网络
    docker run -itd --name test1 --network test-net ubuntu /bin/bash

    5. 配置 DNS

    5.1 配置 docker DNS

    我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:

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

    设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。
    配置完,需要重启 docker 才能生效。

    查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息(进入到容器内部,然后查看 etc/resolv.conf 即可):
    docker run -it --rm ubuntu cat etc/resolv.conf

    5.2 配置容器 DNS

    如果只想在指定的容器设置 DNS,则可以使用以下命令:
    docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu

    --rm:容器退出时自动清理容器内部的文件系统。
    
    -h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,
    它会被写到容器内的 /etc/hostname 和 /etc/hosts。
    
    --dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,
    让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
    
    --dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,
    在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
    

    如果在容器启动时没有指定 --dns 和 --dns-search,Docker 会默认用宿主主机上的 /etc/resolv.conf 来配置容器的 DNS。

    0. 示例

    0.1 启动redis,并设置密码

    docker run -d --name redis1 -p 6379:6379 redis --requirepass "gs123456"
    参数解释:

     -d : 后台运行  
     -name 为容器的名字    
    -p 端口映射   
    --requirepass:redis密码    
    redis为镜像名
    

    0.2 启动 mysql,设置密码

    sudo docker run --name mysql -v /home/mydocker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=test --network myDocker -p 3306:3306 -d --restart always myharbor.reposiry.com/test/mysql:latest

    -v:数据卷挂载,容器启动之后,会将容器内的数据,保存在服务器的/home/ecidi/mysql/data目录下
    -e: 设置容器内参数
    --network:指定 network
    --restart always:启动 docker 后,自动运行该容器
    

    相关文章

      网友评论

          本文标题:Docker 基础命令整理

          本文链接:https://www.haomeiwen.com/subject/ewvuwktx.html