1.帮助命令

    1. docker version #显示docker的版本信息
    2. docker info #显示docker的系统信息,包括镜像和容器的数量
    3. docker命令 --help #帮助命令

    命令的帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/
    2.镜像命令
    docker images 查看所有本地的主机上的镜像

    # docker images
    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    hello-world   latest    feb5d9fea6a5   7 months ago   13.3kB
    #解释
    REPOSITORY   镜像的仓库源
    TAG          镜像的标签
    IMAGE ID     镜像的id
    CREATED      镜像的创建时间
    SIZE         镜像的大小
    #可选项
    -a, --a11   #列出所有镜像
    -q,--quiet  #只显示镜像的id
    

    docker search 搜索镜像
    docker pull 下载镜像
    # 下载镜像 docker pull 镜像名[:tag] # 如果不写tag,默认就是latest
    docker rmi 删除镜像

    # docker rmi -f 镜像id                      #删除指定的容器
    # docker rmi -f 镜像id 镜像id 镜像id 镜像id  #删除多个容器
    # docker rmi -f $(docker images -aq)        #删除全部的容器
    

    3.容器命令
    下载centos镜像
    docker pull centos
    新建容器并启动

    docker run [可选参数] image
    #参数说明
    --name="Name"  容器名字 tomcat01 tomcat02,用来区分容器
    -d             后台方式运行
    -it            使用交互方式运行,进入容器查看内容
    -p             指定容器的端口-p 8080:8080
         -p ip:主机端口:容器端口
         -p主机端口:容器端口(常用)
         -p容器端口
    容器端口
    -P             随机指定端口
    
    
    # 测试,启动并进入容器
    [root@hadoop100 ~]# docker run -it centos /bin/bash
    [root@7df73b454211 /]# ls   # 查看容器内的centos,基础版本,很多命令都是不完善的
    bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
    dev  home  lib64  media       opt  root  sbin  sys  usr
    
    # 从容器中退回主机
    [root@7df73b454211 /]# exit
    exit
    [root@hadoop100 /]# ls
    bin   dev  home  lib64  mnt  proc  run   srv  tmp  var      
    boot  etc  lib   media  opt  root  sbin  sys  usr
    

    列出所有的运行的容器

    # docker ps命令
          #列出当前正在运行的容器
    -a    #列出当前正在运行的容器+带出历史运行过的容器
    -n=?  #显示最近创建的容器
    -q    #只显示容器的编号
    
    [root@hadoop100 /]# docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    [root@hadoop100 /]# docker ps -a
    CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS                     PORTS     NAMES
    7df73b454211   centos        "/bin/bash"   7 minutes ago   Exited (0) 4 minutes ago             intelligent_dubinsky
    c6eb15cbc732   hello-world   "/hello"      14 hours ago    Exited (0) 14 hours ago              goofy_wozniak
    

    退出容器
    exit #直接容器停止并退出
    Ctrl +P+Q #容器不停止退出
    删除容器

    docker rm 容器id                    #删除指定的容器,不能删除正在运行的容器,如果要强制删除rm -f
    docker rm -f  $(docker ps -aq)      #删除所有的容器
    docker ps -a -qlxargs docker rm     #删除所有的容器
    

    启动和停止容器的操作

    docker start 容器id    #启动容器
    docker restart 容器id  #重启容器
    docker stop 容器id     #停止当前正在运行的容器
    docker kill 容器id     #强制停止当前容器
    

    4.常用其他命令
    后台启动容器

    # 命令 docker run -d 镜像名
    [root@hadoop100 /]# docker run -d centos
    
    #问题docker ps,发现centos停止了
    #常见的坑: docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止
    # nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
    

    查看日志

     docker logs -f -t --tail  容器,没有日志
    
     # 自己编写一段she11脚本
    [root@hadoop100 /]# docker run -d centos /bin/sh -c "while true; do echo abc;sleep 1; done"p 1; done"
    # [root@hadoop100 /]# docker ps
    CONTAINER ID   IMAGE
    6c7445d984e4   centos
    # 显示日志
    -tf             #显示日志
    --tail number   #要显示日志条数
    [root@hadoop100 /]# docker logs -tf --tail 10 6c7445d984e4
    

    查看容器中进程信息ps

    # 命令 docker top 容器id
    [root@hadoop100 /]# docker top 6c7445d984e4
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                5533                5512                0                   22:50               ?                   00:00:01            /bin/sh -c while true; do echo abc;sleep 1; done
    root                6271                5533                0                   22:59               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
    

    查看镜像的元数据

    # 命令
    docker inspect 容器id
    # 测试
    [root@hadoop100 /]# docker inspect 6c7445d984e4
    

    进入当前正在运行的容器

    # 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
    # 命令
    docker exec -it 容器id bashShell
    
    # 测试
    [root@hadoop100 /]# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
    6c7445d984e4   centos    "/bin/sh -c 'while t…"   16 minutes ago   Up 16 minutes             blissful_ptolemy
    [root@hadoop100 /]# docker exec -it 6c7445d984e4 /bin/bash
    [root@6c7445d984e4 /]# ls
    bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
    dev  home  lib64  media       opt  root  sbin  sys  usr
    [root@6c7445d984e4 /]# ps -ef
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 14:50 ?        00:00:06 /bin/sh -c while true; do echo 
    root       1021      0  0 15:07 pts/0    00:00:00 /bin/bash
    root       1056   1021  0 15:08 pts/0    00:00:00 ps -ef
    
    # 方式二
    docker attach 容器id
    # 测试
    [root@hadoop100 /]# docker attach 6c7445d984e4
    正在执行当前的代码...
    
    #docker exec    #进入容器后开启一个新的终端,可以在里面操作(常用)
    #docker attach  #进入容器正在执行的终端,不会启动新的进程!
    

    从容器内拷贝文件到主机上

    docker cp 容器id:容器内路径 目的的主机路径
    # 查看当前主机目录下
    [root@hadoop100 home]# ls
    abc.java  guozhixing
    [root@hadoop100 home]# docker ps
    CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS          PORTS     NAMES
    f45faa575114   centos    "/bin/bash"   2 minutes ago   Up 56 seconds             hopeful_golick
    
    # 进入docker容器内部
    [root@hadoop100 home]# docker attach f45faa575114
    [root@f45faa575114 /]# cd /home/
    [root@f45faa575114 home]# ls
    # 在容器内新建一个文件
    [root@f45faa575114 home]# touch test.java
    [root@f45faa575114 home]# exit
    exit
    [root@hadoop100 home]# docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    [root@hadoop100 home]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS                            PORTS     NAMES
    f45faa575114   centos    "/bin/bash"              4 minutes ago       Exited (0) 12 seconds ago                   hopeful_golick
    
    # 将文件拷贝出来到主机上
    [root@hadoop100 home]# docker cp f45faa575114:/home/test.java /home
    [root@hadoop100 home]# ls
    abc.java  guozhixing  test.java
    

    image.png