zoukankan      html  css  js  c++  java
  • docker常用命令

    搜索镜像

    docker search centos     #搜索镜像,默认是到官方的镜像仓库中搜索;不带版本号默认是latest,可以搜索指定版本号,centos:7.2.1511
    

    下载镜像

    https://hub.docker.com/ #docker官方仓库地址

    docker pull ubuntu:19.10         #去官方仓库中下载镜像,不指定tags,默认下载latest
    docker pull hello-world          #使用docker run -it hello-world运行,检查当前docker是否正常,单次运行
    
    可以去指定地址下载docker镜像:
    docker pull 服务器域名:80/项目名称/镜像名称:tag号
    
    注意事项:
    下载镜像时,如果不指定tags号,则默认下载的是latest,当以后再次下载时,官方的最新版本已经升级,如果还不指定版本号进行下载,则下载时,会看到本地镜像有latest,就会使用本地的镜像,不会去官方下载最新的了,所以下载镜像时最好指定版本号。
    

    查看本地镜像

    docker images                  #查看本地镜像
    
    注意事项:
    镜像的REPOSITORY与TAG为none,表示后期导入或者制作的镜像与之前已经存在的镜像的REPOSITORY和TAG冲突,从而把之前的镜像覆盖而导致的,有很少一部分是从互联网下载下来就是这样。
    

    镜像导出

    可以将镜像从本地导出为一个压缩文件,然后复制到其他服务器进行导入使用。
    
    docker save --help      #查看导出镜像的帮助
    docker load --help      #查看导入镜像的帮助
    
    导出方法1:
    docker save nginx:1.16.1 -o /opt/nginx.tar.gz
    
    导出方法2:
    docker save nginx:1.16.1 > /opt/nginx.tar.gz     #使用输出重定向的方法
    
    导入方法1:
    docker load -i nginx.tar.gz
    
    导入方法2:
    docker load < mysql.tar.gz      #使用输入重定向导入镜像压缩文件
    

    删除镜像

    docker rmi 镜像ID      #指定镜像的ID,或者指定,如:nginx:1.16.1;通过镜像启动的容器,镜像不能被删除,除非将容器删除
    
    docker rmi -f 镜像ID   #强制删除镜像,包括有容器正在使用的镜像,但不建议使用此参数,推荐是容器被删除之后,再删除镜像
    
    docker rmi `docker images | grep none | awk '{print $3}'`   #删除所有名称及tag为none的镜像
    

    删除容器

    docker rm -fv 容器ID/容器名称      #-f是强制删除,-v是删除容器运行时生成的数据目录,-f可以删除正在运行的容器
    docker rm -v 容器ID/容器名称
    

    创建容器及端口映射

    docker run -d -it -p 80:80 nginx:1.16.1     #创建并运行容器;-d是在当前宿主机后台运行容器,-i是识别当前标准输入,-t是分配一个tty,-p是把宿主机80映射到容器的80端口;指定镜像,如果本地有镜像使用本地,如果本地没有,去官网下载
    
    docker run -it -P -d nginx bash                           #创建容器并进入容器;bash指令会代替官方默认的指令
    
    docker run -it -P -d nginx                                #创建并启动容器;-P是把宿主机的随机端口映射到容器的80
    
    docker run -it -d --name linux-web -p 80:80 nginx:1.16.1  #创建容器时,指定容器的名称
    
    docker run -it -d -p 172.168.3.100:80:80 nginx:1.16.1     #指定把宿主机固定地址的80映射到容器80
    
    docker run -it -d -p :80 nginx:1.16.1                     #宿主机的随机端口映射给容器的80
    
    docker run -it -d -p 172.168.3.100::80 nginx:1.16.1       #宿主机的固定IP的随机端口映射到容器的80
    
    docker run -it -d -p 8553:53/udp nginx:1.16.1             #把udp协议映射给容器
    
    docker run -d -it -p 80:80/tcp -p 443:443/tcp nginx       #映射多个端口与协议
    
    docker port 容器名称/容器ID                                 #查看某个容器的端口映射
    
    docker run -it mysql echo linux                           #创建容器,容器创建后运行容器,执行打印linux命令后退出容器
    
    docker run -it mysql tail -f /etc/hosts                   #可以让容器一直在当前宿主机终端运行
    

    显示正在运行的容器

    docker ps                     #查看本地正在运行的容器
    
    docker ps -a                  #查看本地所有容器
    
    docker start 容器ID/容器名称    #启动容器
    
    docker stop 容器ID/容器名称     #停止容器
    
    docker pause 容器ID/容器名称    #暂停容器
    
    docker unpause 容器ID/容器名称  #取消暂停
    
    容器状态:
    Created:容器创建后,由于启动参数错误,没有启动成功的
    Exited:已经退出的容器,可以再次启动
    Up:正在运行的容器
    

    单次运行容器

    docker ps -a -q                       #列出所有容器的ID
    
    docker rm -fv $(docker ps -a -q)      #删除所有容器
    
    docker run --rm -it -p 80:80 nginx    #创建并运行容器,ctrl+c退出容器后,会自动删除容器
    

    给容器传递运行命令

    容器需要有一个前台运行的进程才能保持容器的运行(进程的PID通常为1),通过传递运行参数是一种方式,另外也可以在构建镜像的时候指定容器启动时运行的前台命令。
    容器里,不能使用systemd作为PID为1的守护进程,因为容器里没有kernel,所以没有使用systemd启动服务的环境;这就要求容器里必须有一个进程一直运行下去,这个进程会被封装成PID为1的守护进程。
    
    docker run -it nginx echo 123456              #创建完执行打印123456命令后,就回收容器,不在执行nginx默认启动命令
    
    docker run -it nginx nginx "-g daemon off;"   #让nginx进程一直在容器前台运行
    
    注意事项:
    创建容器时,传递命令的优先级高于镜像中默认命令的优先级
    

    进入到正在运行的容器

    attach

    docker run -it centos bash
    
    另一个终端执行:
    docker attach 容器ID
    
    attach需要容器有bash环境,才可以进入,并且一个终端的操作,另一个终端也可以看见,并且attach终端执行exit后,容器也将退出,不建议使用此进入容器的方法
    

    exec

    docker exec -it 容器ID bash   #进入容器;-i识别标准输入,-t表示分配一个tty,指定容器的ID,指定以bash进入
    

    nsenter

    docker inspect 容器ID                       #查看指定容器的所有属性信息
    
    docker inspect -f "{{.State.Pid}}" 容器ID   #-f指定查询的具体层级,从上往下一层层查询,查找到指定容器在当前宿主机的PID编号
    
    nsenter -t 容器PID -m -u -i -n -p           #进入容器;-t指定容器的PID,后面选项是指定各种namespace
    
    注意事项:
    centos需要安装nsenter,yum install util-linux -y;ubuntu自带nsenter
    
    nsenter脚本登录:
    #!/bin/bash
    docker_in() {
            docker_id=$1
            docker_pid=$(docker inspect -f "{{.State.Pid}}" $1)
            nsenter -t $docker_pid -m -u -i -n -p
    }
    docker_in $1
    

    批量启动、停止容器

    docker start $(docker ps -a -q)          #批量启动容器
    
    docker stop $(docker ps -a -q)           #批量停止容器
    
    docker kill $(docker ps -a -q)           #强制关闭所有容器
    
    docker ps -a -q -f status=exited         #取出已经关闭的容器ID
    
    docker rm -fv $(docker ps -a -q -f status=exited)   #删除所有已经关闭的容器
    

    指定容器DNS

    docker run -it -d --dns 192.168.3.254 nginx         #创建容器,指定容器的DNS服务器地址
    

    其它常用命令

    docker version                 #查看docker版本
    
    docker run -it -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.46   #运行mysql镜像时,需要输入mysql的root密码,使用-e指定参数
    
    docker info                    #查看docker相关信息
    
    docker top 容器ID	       #查看单机指定容器的运行状态
    
    docker stats                   #查看单机容器的资源利用率
    
    docker logs 容器ID	       #查看单个容器的日志;可以添加-f,一直跟踪查看
    

    创建镜像

    docker build -t 镜像名称:TAG号 Dockerfile文件路径
    
    docker build --no-cache -t 镜像名称:TAG号 Dockerfile文件路径   #创建镜像时,不使用缓存,Dockerfile中的每一步都执行
    
  • 相关阅读:
    c++读写MySQL
    感叹游戏行业的飞速发展
    和真正的程序员在一起是怎样的体验
    程序媛是怎样找老公的
    IO和socket编程
    郁金香搜索引擎的方案
    实现一个自己的搜索引擎的初始规划
    JVM知识在离线数据中的运用
    看Lucene源码必须知道的基本规则和算法
    看Lucene源码必须知道的基本概念
  • 原文地址:https://www.cnblogs.com/dongzhanyi123/p/13301496.html
Copyright © 2011-2022 走看看