超级详细:Docker Commands —— Container Commands !(新手必看必会)

文章目录

      • All Docker Container Commands(必看):
      • 基础命令:
        • ①、列出容器 —— docker ps
        • ②、创建容器 —— docker create
        • ③、启动容器 —— docker start
        • ④、创建并启动容器 —— docker run (常用)
        • ⑤、进入容器(容器外执行命令) —— docker exec
        • ⑥、退出容器 —— 两种办法:
        • ⑦、停止容器 —— docker stop(温柔停止)
        • ⑧、停止容器 —— docker kill(强制杀死)
        • ⑨、重启容器 —— docker restart
        • ⑩、删除容器 —— docker rm(批量删除)
        • 11、删除所有已停止的容器 —— docker container prune
        • 12、容器重命名 —— docker rename
      • 重点命令:
        • ①、查看容器的日志 —— docker logs
        • ②、查看容器内进程 —— docker top
        • ③、查看容器详细信息 —— docker inspect
          • 3.1、查看容器ip —— docker inspect ...
        • ④、查看容器资源占用 —— docker stats
        • ⑤、容器内外拷贝文件/目录 —— docker cp
        • ⑥、暂停容器进程 —— docker pause(取消:docker unpause)
        • ⑦、将容器导出为tar存档 —— docker export
        • ⑧、将容器tar存档导入为镜像 —— docker import
        • ⑨、查看容器内文件系统变更 —— docker diff
        • ⑩、更新容器配置 —— docker update
        • 11、查看容器端口映射 —— docker port
        • 12、查看容器的退出码 —— docker wait
      • 重中之中: 通过容器创建镜像 —— docker commit:
      • ★ 给运行中的容器做 端口映射:

       


       

看这里:

        戳此链接 通往 关于 Docker 所有的学习文章 !


 

All Docker Container Commands(必看):

root@zhengzelin:~# docker container --help

"格式:	docker container COMMAND"

Manage containers

Commands:

        attach    将本地标准输入,输出和错误流附加到正在运行的容器
        
        "commit    将容器保存为镜像!"
        
        cp        在容器和本地文件系统之间复制文件/文件夹
        
        "creat    创建一个新的容器"
        
        diff      检查容器文件系统上文件或目录的更改
        
        exec      在正在运行的容器中运行命令(进入容器)
        
        export    将容器的文件系统导出为tar存档
        
        inspect   在一个或多个容器上显示详细信息
        
        kill      杀死一个或多个运行中的容器
        
        "logs     获取容器的日志"
        
         ls       列出容器(用法: docker container ls 等同于 docker ps)
         
        "pause    暂停一个或多个容器中的所有进程(取消暂停的话使用 unpause)"
         
        "port     列出端口映射或容器的特定映射"
         
        "prune    删除所有停止的容器(docker image prune 是删除所有dangling iamge,不知道什么是dangling iamge的话点击文章开头的目录导航,有详解)"
         
         rename   重命名容器
         
         restart  重新启动一个或多个容器
         
         rm       删除一个或多个容器
         
         "run     在新容器中运行命令(记住是新容器,执行一次run,就会创建一个容器!)"
         
         start    启动一个或多个停止的容器
         
         "stats   显示容器资源使用情况统计信息的实时流"
         
         stop     停止一个或多个运行中的容器
         
         top      显示容器的运行过程
         
        "unpause  取消暂停一个或多个容器中的所有进程(暂停一个或多个容器中的进程使用 pause)"
         
☆        update   更新一个或多个容器的配置(常用,一般用来更新mem、cpu等..使用 docker upte --help 来了解更多)
         
         wait     直到一个或多个容器停止,然后打印其退出代码(可以使用 "docker wait 容器名 &(后台执行此命令)""docker stop 容器名 | docker wait 容器名" 或直接 "docker wait 已经停止的容器名" )
         
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

"注意: docker container commands  可以直接表示为 docker commands !"
(只是大部分,并不是所有命令啊!)


eg : docker container prune(删除所有停止的容器) 就不能使用 docker prune ! 
    因为 关于 prune 还有个命令是删除所有 dangling image 的(docker image prune)!

像你的其他命令:创建容器啊、启动容器啊等等..就可以直接使用 docker create 不需要使用 docker container create !


上面很多命令并不会一样列举! 你可以使用 docker container command --help 来解惑! 

       


       

基础命令:

 

①、列出容器 —— docker ps

语法: docker ps [OPTIONS]


OPTIONS 

         -a,--all       docker ps  默认只列出运行中的容器,使用 -a 表示所有容器!(未运行和运行中)
         
         -f,--filter   根据条件过滤出容器!
         
         -n=-1          显示最后创建的一个容器,-1并不是固定值,也可使用 -2 表 最后两个创建的容器
         
         -l             最新创建的容器!
         
         -q             仅显示 容器ID
         
         -s             显示总大小!
         
         --no-trunc     不截断输出!
     
 ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————
      
-f 条件 可选选项:  
  
root@zhengzelin:~# docker ps -f 
ancestor=  exited=    health=    is-task=   name=      publish=   status=    
before=    expose=    id=        label=     network=   since=     volume=    

       


       

②、创建容器 —— docker create

        注意:千万注意 有镜像才能创建容器,如果你无法创建某个镜像的容器,那么请你使用 docker images 查看是否有该镜像!

"语法格式: docker  create  [OPTIONS]  IMAGE  [COMMAND]  [ARG...]"

OPTIONS    
           --name=     :  为容器添加一个名字
           
           --add-host=  : 添加自定义主机到IP的映射(host:ip)
           
           --cap-add/drop= : 添加/放弃 Linux功能!
           
           --cidfile= : 将容器ID写入文件!
           
           --cpus=  : 限制cpu
           
           --kernel-memory = 0  : 限制内核内存
           
           -m,--memory = 0  : 内存限制:
           
           --device= : 将主机设备添加到 容器内

           --dns= : 设置自定义 dns 服务器!
           
           -e;--env  : 设置环境变量
           
           --env-file : 读入环境变量配置文件!
           
           --group-add : 添加其他组用户可以加入容器!
           
           --ip="" / --ip6="" :  ipv4地址/ipv6地址!
           
           --mount=  : 将一个文件系统挂载到该容器
           
           --pid=   :  使用的 pid 命名空间!
           
           -p,--publish =  : 将容器的端口发布到主机
           
           -v,--volume =   :  绑定挂载卷

           --volumes-from = : 从指定的容器挂载卷

其他更多选项 请使用 man docker create 来查看!

       


       

③、启动容器 —— docker start

"作用: 启动一个或多个已经停止的容器!"

语法: docker start  [OPTIONS]  容器ID1/Name1  容器ID2/Name2

OPTIONS 


        -a,-attach [= false]    连接STDOUT / STDERR和转发信号

        --checkpoint =“”         从此检查点还原

        --checkpoint-dir =“”     使用自定义检查点存储目录

        --detach-keys =“”        覆盖分离容器的键序列

        -i,--interactive [= false]   附加容器的STDIN

       


       

④、创建并启动容器 —— docker run (常用)

docker run 相当于 docker create + docker start ! 它的作用就是 创建一个容器并将其启动!

如果没有创建该容器的image,则默认会从 docker Hub 上 pull image ;然后 create Container 最后 start Container !

"注意:run 是创建 new Container ,只会创建new Container!并不是启动 old Container!"

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————

格式: docker  run  [OPTIONS] IMAGE  [COMMANDS]  [ARG...]

OPTIONS
        --name="Container newname" :  为容器指定一个新名字
        
        --restart=alwasy         该容器停止后,总是自动重启该容器
        
        -i  : 以交互模式运行容器;
        
        -t  : 为容器重新分配一个伪终端; ("通常使用 -it 搭配!")
        
        -d  : 后台运行容器,并且返回容器ID;
        
        -P  : 随机端口映射;
        
        -p  : 指定端口映射(有以下三种格式:)
        
               ip:hostport:ContainerPort
                       
               ip::ContainerPort
                       
               hostPort:ContainerPort
     
               
 不懂的话,点此链接,有具体介绍及使用例子:https://blog.csdn.net/ljlfather/article/details/105669267         

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

如果你的镜像是个 OS image ,那么使用 docker -it 会直接进入该镜像,并且分配一个伪终端(可以执行命令);
如果你不想进入该container呢?只是想创建并且启动该容器而已,那就需要使用 "docker run -d IMAGENAME" (-d : 在后台保持该容器运行) 

"但是你会发现,某些时候 当你使用 docker run -d 运行启动一个容器的时候,
执行 docker ps 却并没有发现该容器,该容器的状态为(exited),这是为什么呢?"

"因为 Docker 机制:   Docker 容器要想后台运行!它在前台必须得有一个进程!  否则会觉得自己无事可做然后自杀!"

那就可以使用:  docker run -itd IMAGEID /bin/bash

       


       

⑤、进入容器(容器外执行命令) —— docker exec


语法: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS 
        -e,--env =    设置环境变量

        -i,--interactive   即使未连接STDIN也保持打开状态

        --privileged     赋予命令扩展权限

        -t,--tty        分配伪TTY

        -u,--user =“”      用户名或UID(格式:<名称| uid> [<| gid>])

        -w,--workdir =“”   容器内的工作目录

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

一般两种用法:

1、不进入容器便执行命令:
root@zhengzelin:~# docker exec 1cb1272d278c echo "aaa"
aaa

# 在容器 1cb1272d278c 内 执行 echo 命令


"2、进入容器:"
root@zhengzelin:~# docker exec -it 1cb1272d278c /bin/bash (可以是其他 bash shell , 并不是固定的 /bin/bash)

       


       

⑥、退出容器 —— 两种办法:

第一种 :  退出并停止容器  —— 使用 exit

第二种 :  退出不停止容器  —— 使用 Ctrl + P + Q

       


       

⑦、停止容器 —— docker stop(温柔停止)

" docker stop  —— stop one or more running Containers "

格式: docker stop [OPTIONS]  container1 container2

OPTIONS 
         
        -t;--time=数字       指定时间后停止容器!

       


       

⑧、停止容器 —— docker kill(强制杀死)

注意: docker stop 会慢慢的停止容器,直到停止容器结束。 docker kill 会直接的停止容器!相当于很暴力那种,并不会像stop 那样等你停止完毕!

docker kill [OPTION] container1 container2

OPTION:   -s;--signal=“”    

root@zhengzelin:~# docker kill -s 
CONT     INT      QUIT     SIGHUP   SIGKILL  SIGSTOP  SIGUSR1  STOP     USR1     
HUP      KILL     SIGCONT  SIGINT   SIGQUIT  SIGTERM  SIGUSR2  TERM     USR2     

       


       

⑨、重启容器 —— docker restart

语法: docker  restart [OPTIONS] Container1  Container2 ...


root@zhengzelin:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
e6f9b0452c17        nginx:latest        "nginx -g 'daemon of…"   30 minutes ago      Exited (137) 17 seconds ago                       zzl
root@zhengzelin:~# docker restart zzl 
zzl
root@zhengzelin:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
e6f9b0452c17        nginx:latest        "nginx -g 'daemon of…"   30 minutes ago      Up 3 seconds        80/tcp              zzl

       


       

⑩、删除容器 —— docker rm(批量删除)

docker rm —— 删除一个或多个 "已经停止" 的容器 !

格式: docker  rm  [OPTIONS]  Container1  Container2 ...

OPTIONS:
        -f;--force   强制删除容器!(即 删除运行中的容器,不可取!)
        
        -l;--link    删除指定的链接
        
        -v;--volumes   删除与该容器相关的卷!
    

       


       

11、删除所有已停止的容器 —— docker container prune

docker container prune 

root@zhengzelin:~# docker container prune 
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

       


       

12、容器重命名 —— docker rename

语法格式: docker  rename  容器名/容器ID  新容器名

root@zhengzelin:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
97f476793132        fedora:latest       "/bin/bash"         43 minutes ago      Up 43 minutes                                eloquent_ptolemy

root@zhengzelin:~# docker rename eloquent_ptolemy abc
root@zhengzelin:~# docker ps 
97f476793132       fedora:latest      "/bin/bash"        43 minutes ago     Up 43 minutes        abc

       


       

重点命令:

 

①、查看容器的日志 —— docker logs

格式: docker logs [OPTIONS] Container

OPTIONS: 

        -t        显示时间戳
        
        -f        实时的显示日志
        
        --tail 数字  实现倒数几行的日志 
              
        --details 显示提供给日志的其他详细信息
        
        --since=“”  显示时间戳之后的日志
        
        --until=“”  显示时间戳之前的日志
        
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————

"常用搭配  :  docker logs -t -f --tail 数字  ContainerID  "

       


       

②、查看容器内进程 —— docker top

语法: docker  top  ContainerID 或 ContainerNAME

很简单,他的 OPTION 就只有 --help !

root@zhengzelin:~# docker top eloquent_ptolemy 
UID       PID         PPID       C         STIME          TTY             TIME            CMD
root     4162         4145       0         21:46         pts/0          00:00:00       /bin/bash

       


       

③、查看容器详细信息 —— docker inspect

之前前面说过: docker inspect 是来查看镜像的详细信息,也可以查看容器的详细信息:

用法: docker inspect imageID(查看镜像信息) 或 docker inspect containerID(查看容器信息)

"当然还可以这样:  docker image inspect imageID(查看镜像信息) 
                  或
                 docker container inspect containerID(查看容器信息)"

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————

至于这个命令的输出内容,在数据卷哪里会有深刻理解!        
3.1、查看容器ip —— docker inspect …
方法1:
docker container inspect --format '{{ .NetworkSettings.IPAddress }}' 容器ID / 容器名

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

方法2(最简单):
docker inspect 容器ID | grep IPAddress

root@zhengzelin:~# docker inspect a436a2d7f6a3 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAddress": "172.17.0.4",

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

方法3:(麻烦,不推荐)
进入容器 ,安装 iproute 命令,使用 ip 命令即可查看!

       


       

④、查看容器资源占用 —— docker stats

名称
       docker-stats —— 显示容器资源使用情况统计信息的"实时流"(使用 --no-stream 来退出实时流)

语法
       docker stats [OPTIONS] Container1 Container2 ...

OPTION:

       -a    显示所有容器的资源占用情况(默认为所有运行中的容器)
       
       --no-stream  仅获取一次结果就退出资源占用实时结果状态!
       
       --no-trunc   不截断输出...

       


       

⑤、容器内外拷贝文件/目录 —— docker cp

名称
       docker-cp —— 在容器和本地文件系统之间复制文件/文件夹

语法: 
       docker  cp  [OPTIONS]  容器外本机被复制文件的路径  容器ID:/容器内存放该文件的路径
          或
       docker  cp  [OPTIONS]  容器ID:/容器内存被负责文件的路径   容器外本机存放该文件的路径

"第一个是将容器外的文件 拷到 容器里,第二个是将 容器里的文件 拷贝到 容器外..

千万注意格式: 容器ID:/  这个/并不是 路径前的根目录哦,eg: 容器ID://root 得这样!"


OPTIONS 

        -a;--archive       存档(复制所以 uid / gid 信息)
        
        -L;--follow-link   始终遵循SRC_PATH中的符号链接

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

eg:
root@zhengzelin:~# touch aaa
root@zhengzelin:~# docker cp -L aaa zzl://root(zzl为我的容器名)
root@zhengzelin:~# docker exec zzl ls /root
aaa

复制成功,删除容器外的aaa,然后复制容器里的aaa到容器外:

root@zhengzelin:~# docker cp zzl://root/aaa /root/aaa
root@zhengzelin:~# ls
aaa

       


       

⑥、暂停容器进程 —— docker pause(取消:docker unpause)

NAME
       docker-pause —— 暂停一个或多个容器中的所有进程

语法格式:
       docker pause CONTAINER [CONTAINER...]

OPTIONS 只有 --help

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————

"取消暂停的话使用 : docker unpause Container1 Container2 ..."

       


       

⑦、将容器导出为tar存档 —— docker export

NAME
       docker-export —— 将容器的文件系统导出为 tar 存档!

SYNOPSIS
       docker export [OPTIONS] CONTAINER

OPTIONS
        -h            # 帮助信息
        -o 文件名      # 输出为 文件中,并不是标准输出终端

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

eg:(使用 docker export -o 文件名 或 docker export >/文件路径/文件名)

root@zhengzelin:~# docker export 97f476793132 -o aaa 
root@zhengzelin:~# du -sh aaa
191M	aaa

或

root@zhengzelin:~# docker export 97f476793132 >/root/aaa
root@zhengzelin:~# du -sh aaa
191M	aaa      

       


       

⑧、将容器tar存档导入为镜像 —— docker import

NAME
       docker-import ——  从 tar存档 导入内容以创建文件系统映像

语法格式:
       docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]


OPTIONS:
        -c,--change =         # 将 Dockerfile 指令应用于创建的映像

        -h,--help [= false]   # 帮助

        -m,--message =“”      # 设置导入图像的提交消息
  
        --platform =“”         # 如果服务器支持多平台,则设置平台

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

root@zhengzelin:~# docker import aaa - fedora:test
sha256:767c0f60f3ab9685472e0d72bd27b6c2292d8f73c0a6dcb4b777ee0ae0f497f8
root@zhengzelin:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
fedora              test                767c0f60f3ab        23 seconds ago      193MB
fedora              latest              536f3995adeb        8 weeks ago         193MB

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

与 commit 的区别: 

      commit 是打包成镜像,该镜像可以上传到仓库上,而你这个只是打包成 tar 存档;
      想用的时候并不能从其他仓库下载!只能存到你的其他硬盘上..scp 发送到其他机器上!

       


       

⑨、查看容器内文件系统变更 —— docker diff

DOCKER(1)                                                                                                                         

NAME
       docker-diff —— 检查一个容器的文件系统上 文件 或 目录的 更改!

语法格式:
       docker diff CONTAINER

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

eg: 检查容器 abc 的更改!
root@zhengzelin:~# docker diff abc 
C /root
A /root/aaa
A /root/def

       


       

⑩、更新容器配置 —— docker update

        docker container update 命令 可以实现 更新容器的一些运行时的配置,主要是针对一些 资源限制 份额!

DOCKER(1)                                                                                                                         DOCKER(1)

NAME
       docker-update —— 更新一个或多个容器的配置!

语法格式:
       docker update [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS:
         --cpus=         # 设置cpu的个数
         
         --memory=        # 内存限制
         
         --kernel-memory=    # 内核内存限制
         
         --cpuset-cpus =“”   # 允许执行的CPU(0-3,0,1)

         --cpuset-mems =“”     # 允许执行的MEM(0-3,0,1)
          
.... 很多 不一一例举了,直接使用 “man docker update ” 查看使用手册!

       


       

11、查看容器端口映射 —— docker port

我们都知道在执行 run Container 的时候,可以使用 -P 或 -p 来指定随机端口映射 或 指定端口映射!

"(思考:如何给一个运行中的容器设置 端口映射呢?不可能使用 docker run 吧!那是run一个全新的容器!
文末写)"

那么如何查看容器的端口映射呢? 使用 docker port :


NAME
       docker-port —— 列出端口映射或容器的特定映射!
       
语法: 
       docker port container   

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

root@zhengzelin:~# docker run -itd -P nginx:latest 
a436a2d7f6a3e191b46c21459977fcf00a849fc74d7d0a2bd8c4598b13707eef


root@zhengzelin:~# docker ps -n 1
CONTAINER ID         IMAGE             COMMAND               CREATED          STATUS           PORTS                   NAMES
a436a2d7f6a3      nginx:latest    "nginx -g 'daemon of…"   43 seconds ago   Up 42 seconds     0.0.0.0:32768->80/tcp   optimistic_thompson

       


       

12、查看容器的退出码 —— docker wait

查看 一个或多个容器的退出状态码:

docker  wait  container1  container2 ....

关于 docker run 时 docker 的错误代码:
125 : docker daemon 运行出错!
126 : 所指定的命令无法运行,例如:权限问题
127 : 容器内命令无法找到

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

eg:

root@zhengzelin:~# docker run -ifd fedora:latest;echo $?
unknown shorthand flag: 'f' in -fd
See 'docker run --help'.
125

       


       

重中之中: 通过容器创建镜像 —— docker commit:

当你更改了容器配置后,就需要打包成镜像,可以方便的上传下载到仓库中,更加方便使用!


NAME
       docker-commit —— 根据容器创建一个 new container !

SYNOPSIS
       docker commit [OPTIONS] CONTAINER REPOSITORY:TAG

OPTIONS :

         -a             # 指定用户名
         
         -c,--change=    #  将Dockerfile指令应用于创建的映像
         
         -m,--message =“”    # 提交讯息

        "-p,-pause [= true]   # 提交期间暂停容器(默认使用 docker commit 会自动暂停容器)"

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

eg:

root@zhengzelin:~# docker commit -a zzl -m "start commit" 97f476793132  zzl:test
sha256:a3daa9214f5051ec93f5012025b353b802397bf3905d614dbcb792f9b5ae010c

root@zhengzelin:~# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
zzl                 test                a3daa9214f50        7 minutes ago       592MB

root@zhengzelin:~# docker inspect zzl:test | grep -i author
        "Author": "zzl",

root@zhengzelin:~# docker inspect zzl:test | grep Comment
  "Comment": "start commit",

       


       

★ 给运行中的容器做 端口映射:

下一篇:如何 给运行中的容器 做端口映射?

你可能感兴趣的:(Docker)