• Docker 常用命令


    基本命令

    安装

    Centos

    cd /etc/yum.repos.d
    wget https://download.docker.com/linux/centos/docker-ce.repo
    yum install docker-ce -y
    

    如果安装过程中报错: package docker-ce-3:19.03.5-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed,需要安装containerd.io

    Ubuntu

    sudo apt update
    sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io
    

    查看版本/详细信息/版本

    docker -v/info/version
    

    启动/关闭/重启

    Centos

    说明 命令
    启动 systemctl start docker
    关闭 systemctl stop docker
    重启 systemctl restart docker
    设置docker开机自启 systemctl enable docker
    重新加载服务配置文件 systemctl daemon-reload
    删除docker所有资源 docker system prune

    Ubuntu

    --启动/停止/重启/查看状态 
    sudo service docker start/stop/restart/status
    

    卸载

    docker system prune
    yum remove docker-ce
    rm -rf /var/lib/docker
    

    配置全局容器DNS

     sudo  vi /etc/default/docker
    

    找到下面这行数据,去掉#取消注释,如果没有就手动添加

    DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
    

    或者修改/etc/docker/daemon.json文件,没有就新增

    vi /etc/docker/daemon.json
    

    新增以下内容

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

    然后重启docker

    sudo service docker restart
    

    查看docker使用资源情况

    docker stats --no-stream
    docker stats --no-stream --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
    

    Daemon.json

    Docker全局配置文件,默认不创建,需手动创建。位置:/etc/docker/daemon.json

    镜像

    拉取镜像

    --不加版本号默认最新版本
    docker pull mcr.microsoft.com/dotnet/core/sdk
    docker pull mcr.microsoft.com/dotnet/core/sdk:3.0
    

    创建镜像

    docker build -f Dockerfile  -t  [镜像名称]  . 
    
    • -t代表tag,指定新的镜像的用户信息。
    • -f指定Dockerfile文件名称,默认使用当前路径的Dockerfile可以不用加此参数
    • . 是 Dockerfile 所在的路径(当前目录)

    查询本地镜像

    语法:docker images [OPTIONS] [REPOSITORY[:TAG]]
    OPTIONS说明:

    • -a:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)
    • --digests:显示镜像的摘要信息
    • --no-trunc:显示完整的镜像信息
    • -q:只显示镜像ID

    案例:

    --查询所有镜像
    docker images 
    --模糊搜索(d代表名称,l代表tag)
    docker images   d*:l*
    --查询某个镜像
    docker images   mcr.microsoft.com/dotnet/core/sdk
    docker images   mcr.microsoft.com/dotnet/core/sdk:3.0
    --只显示镜像ID
    docker images -q mcr.microsoft.com/dotnet/core/sdk
    

    删除镜像

    docker rmi -f   [镜像ID1] [镜像ID2] [镜像ID3] ...
    

    删除查询到的镜像

    docker rmi -f $(docker images -q [镜像ID] )
    

    删除所有镜像

    docker rmi `docker images -q`
    

    删除包含关键字的镜像(redis)

    docker rmi -f `docker images | grep redis | awk '{print $3}'`
    

    删除所有未被 tag 标记和未被容器使用的镜像

    docker image prune
    

    删除所有未被容器使用的镜像

    docker image prune -a
    

    删除名称或标签为none的镜像

    docker rmi -f  `docker images | grep '<none>' | awk '{print $3}'`
    docker rmi $(docker images -f "dangling=true" -q)
    

    删除所有无用数据卷

     docker volume prune
    

    删除 docker 所有资源

    docker system prune
    

    导出镜像

    docker save -o  文件名称.tar  镜像名称/ID 
    docker save  镜像名称/ID  -o  文件名称.tar
    
    • -o:保存路径

    导入镜像

    docker load -qi   文件名称.tar
    
    • -q:精简输出信息
    • -i:指定导入的文件

    查看镜像元数据

    docker inspect -s   [镜像ID]
    

    容器

    创建容器

    参考链接:

    创建一个立即运行的容器

    docker run -p  映射端口:容器端口  [镜像ID]
    

    创建一个后台运行的容器

    docker run -d -p  映射端口:容器端口  [镜像ID] 
    

    创建一个自定义DNS的容器

    docker run --dns=8.8.8.8 --dns=8.8.4.4 -d  [镜像ID] 
    

    创建一个共享宿主机网络和端口的容器

    docker run -net host  -p 3307:3307 -d --name=web-api  [镜像ID] 
    

    创建一个自定义名称的容器

    docker run --name=web-api  [镜像ID] 
    

    创建一个指定网络和IP的容器

    docker run --net=my-network --ip 172.17.0.10 container1
    

    开机自启

    docker run --restart=always  [镜像ID] 
    

    容器目录和宿主机目录映射(目录共享)

    docker run -v /sharedfile:/sharedfile
    
    • 宿主机的/sharedfile目录挂载到容器的/sharedfile目录
    • 语法:/宿主机目录:/容器目录
    • docker inspect查看Mounts部分,Source为宿主机目录,Destination为容器目录

    环境变量

    docker run -e  "ASPNETCORE_ENVIRONMENT=development"  [镜像ID] 
    

    run一个容器

    docker run  -v /sharedfile:/sharedfile -d  -p 5000:80 -e  ASPNETCORE_URLS=http://*:80 --name=webHost --restart=always   testImages:1.0
    

    查询容器

    参考链接:

    语法:docker ps [OPTIONS]OPTIONS说明:

    • -a :显示所有的容器,包括未运行的。
    • -f :根据条件过滤显示的内容。
    • -l :显示最近创建的容器。
    • -n :列出最近创建的n个容器。
    • --no-trunc :显示完成内容。
    • -q :只显示容器编号。
    • -s :显示总的文件大小。

    查询正在运行中的容器

    docker ps
    

    查询所有容器

    docker ps -a
    

    通过grep内容过滤

    docker ps -a | grep ID/Name/Port
    

    容器ID进行过滤

    docker ps --filter id=[容器ID]
    

    容器名称进行过滤

    docker ps --filter name=[容器名称]
    

    查询最近创建的5个容器信息

    docker ps -n 5
    

    镜像ID进行过滤

    docker ps --filter ancestor=[镜像ID]
    

    镜像名称进行过滤

     docker ps --filter ancestor= <image-name>[:<tag>]
    

    容器状态进行过滤

    docker ps --filter status=running
    

    状态类型:

    • created(已创建)
    • restarting(重启中)
    • running(运行中)
    • removing(迁移中)
    • paused(暂停)
    • exited(停止)
    • dead(死亡)

    端口号进行过滤

    docker ps -a | grep 8100
    

    进入容器

    进入容器方式1

    容器必须正在运行

    #进入当前容器后开启一个新的终端,可以在里面操作。(常用)
    docker exec -it [容器id]  /bin/bash
    

    进入容器之后可以使用以下命令:

    • ls:列出目录
    • vi:修改文件内容

    退出容器:

    • exit
    • Ctrl + p + q

    进入容器(管理员权限)

    docker exec -it [容器id] -u root /bin/bash
    

    进入容器(其他命令)

    docker exec -it [容器id] /bin/sh
    or
    docker exec -it [容器id] bash
    or
    docker exec -it [容器id] sh
    

    宿主环境执行容器内部命令

    docker exec -it mysql  ls -la
    

    安装package

    需要root权限
    修改镜像源可以通过查看Linux-Ubuntu-镜像源

    apt-get update 
    apt-get install vim
    

    进入容器方式2

    容器必须正在运行

    # 进入容器正在执行某个命令的终端,不能在里面操作
    docker attach  --sig-proxy=false  [容器id]
    

    进入容器方式3-进入镜像创建的伪容器

    docker run -it  [镜像ID]  /bin/bash
    

    首先,docker run -it centos 的意思是,为centos这个镜像创建一个容器, -i和-t这两个参数的作用是,为该docker创建一个伪终端,这样就可以进入到容器的交互模式?(也就是直接进入到容器里面)后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这样当你使用docker ps 查看启动的容器时,就会发现你刚刚创建的那个容器并不在已启动的容器队列中。这个/bin/bash就表示启动容器后启动bash,对指定的容器执行 bash。

    进入容器后访问 URL 查看是否成功

     curl  -I  http://0.0.0.0:8001
    

    查看容器元数据

    docker inspect -s   [容器ID]
    

    查看容器IP

    docker inspect [容器ID] |grep "IPAddress"
    docker inspect --format '{{.NetworkSettings.IPAddress }}'  [容器ID]
    docker inspect -f '{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' [容器ID]
    

    查看容器DNS

    docker exec  -it  [容器ID] /bin/bash
    cat /etc/default/docker
    

    导出容器

    docker export  -o  ./centos.tar   [容器ID]
    

    导入容器

    docker import centos.tar  centos:1.0
    

    暂停/恢复/启动/停止/重启 容器

    docker pause/unpause/start/stop/restart [容器ID] [容器ID]...
    

    杀掉一个或多个运行中的容器

    docker kill -s  KILL  [容器ID] [容器ID]...
    

    删除容器

    删除一个或多少容器

    docker rm [OPTIONS] CONTAINER [CONTAINER...]
    

    OPTIONS说明:

    • -f :强制删除一个运行中的容器
    • -l :移除容器间的网络连接,而非容器本身
    • -v :删除与容器关联的卷

    强制删除容器

    docker rm -f  [容器ID] [容器ID]...
    

    强制删除筛选出的容器

    docker rm -f $( docker ps -aq --filter id=[容器ID] )
    

    删除所有容器

    docker rm -f `docker ps -a -q`
    

    删除所有停止运行的容器

    docker container prune
    

    删除异常停止的容器

    docker rm `docker ps -a | grep Exited | awk '{print $1}'`
    

    容器与主机之间的文件拷贝

    主机目录拷贝至容器目录

    --将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
    docker cp /www/runoob 96f7f14e99ab:/www/
    
    --将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。
    docker cp /www/runoob 96f7f14e99ab:/www
    

    容器目录拷贝至主机目录

    --将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
    docker cp  96f7f14e99ab:/www /tmp/
    

    网络

    参考文档:

    创建网络

    docker network create [OPTIONS] NETWORK
    
    名称,简写 默认 说明
    --attachable false 启用手动容器安装
    --aux-address map[] 网络驱动程序使用的辅助IPv4或IPv6地址
    --driver, -d bridge 驱动程序管理网络
    --gateway 用于主子网的IPv4或IPv6网关
    --internal false 限制对网络的外部访问
    --ip-range 从子范围分配容器ip
    --ipam-driver default IP地址管理驱动程序
    --ipam-opt map[] 设置IPAM驱动程序的具体选项
    --ipv6 false 启用IPv6网络
    --label 在网络上设置元数据
    --opt, -o map[] 设置驱动程序特定选项
    --subnet 表示网段的CIDR格式的子网

    创建一个网络

    # 默认bridge格式创建网络
    docker network create -d bridge  my-network
    

    创建指定网段网络

    # 默认bridge格式创建网络
    docker network create  --subnet=172.18.0.0/16 my-network
    

    创建指定网段网络和规定IP范围

    # 默认bridge格式创建网络
    docker network create  --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20  my-network
    

    连接网络

    容器连接网络后,容器通讯可以直接ping容器名称/网络别名

    docker network connect [OPTIONS] NETWORK CONTAINER
    
    名称,简写 说明
    --alias 为容器添加网络范围的别名
    --ip 指定IP地址
    --ip6 指定IPv6地址
    --link 添加链接到另一个容器
    --link-local-ip 添加容器的链接本地地址

    将正在运行的容器连接到网络

     docker network connect my-network container1
    

    启动时将容器连接到网络

    docker run -itd --net=my-network container1
    

    指定容器的IP地址

    docker network connect --ip 10.10.36.122 my-network container1
    

    启动时将容器连接到网络并指定IP

    docker run -itd --net my-network --ip 172.17.0.10 container1
    

    容器创建网络别名

    docker network connect --alias db --alias mysql my-network container1
    

    一个容器与另一个容器别名链接

    # container2 必须没有加入此网络,此命令运行后container2可以使用c1别名访问container1
    docker network connect --link container1:c1 my-network container2
    

    断开连接网络

    docker network disconnect命令用于断开容器的网络。容器必须运行才能将其与网络断开连接。

    docker network disconnect -f my-network container1
    

    查看网络信息

    docker network inspect  my-network
    

    查看网络所有容器

    docker network inspect  my-network | jq  .[].Containers
    

    查看所有网络

    docker network ls 
    

    删除所有网络

    docker network prune
    

    删除网络

    # 如果有容器连接网络需要先断开容器网络连接或删除容器再删除网络
    docker network rm  my-network
    
  • 相关阅读:
    in loop structure,whether content after break and continue will be executed?`
    springboot 解决跨域问题
    解决国内网络访问github慢问题
    springboot对应数据库创建
    代码生成器,生成统一返回result的内容的controller模板
    idea创建springboot项目(需要连接网络)
    前端解决No 'AccessControlAllowOrigin'
    将视频提取为图片
    maven3.6.1配置阿里云镜像
    完成图片的静态资源托管
  • 原文地址:https://www.cnblogs.com/RainFate/p/16585807.html
Copyright © 2020-2023  润新知