跳到主要内容
  1. 所有文章/
  2. Docker学习笔记/

Docker02常用命令

·📄 3081 字·🍵 7 分钟

帮助命令: #

#显示版本
[root@izwz91mv6i3x6k12jjqh60z ~]# docker version

Client: Docker Engine - Community
 Version:           20.10.6
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        370c289
 Built:             Fri Apr  9 22:45:33 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.6
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       8728dd2
  Built:            Fri Apr  9 22:43:57 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

#显示Docker的系统信息
[root@izwz91mv6i3x6k12jjqh60z ~]# docker info

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  scan: Docker Scan (Docker Inc.)

Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 1
 Server Version: 20.10.6
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: false
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc version: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-514.26.2.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 1.796GiB
 Name: izwz91mv6i3x6k12jjqh60z
 ID: KA6F:5IVG:6OGX:WPVP:I74K:PAUV:EI5L:SGYK:3GRQ:E3DA:FVTQ:X4BM
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://bjyjzfeq.mirror.aliyuncs.com/
 Live Restore Enabled: false

#帮助信息
[root@izwz91mv6i3x6k12jjqh60z ~]# docker --help

Commands:
  attach     #当前shell下 attach连接指定运行镜像
  build      #通过dokcerfile 定制镜像 
  commit     #提交当前容器为新的镜像
  cp         #从容器中拷贝指定文件或目录到宿主机
  create     #创建一个新的容器 ,同 run ,但不会启动容器
  diff       #查看docker 容器变化
  events     #从docker服务器获取容器实时事件
  exec       #在已存在的容器上运行命令
  export     #导出容器的内容流作为一个 tar 归档文件(对应 import)
  history    #展示镜像的形成历史
  images     #列出系统当前所有镜像
  import     #从 tar 包中的内容创建一个新的文件系统映像(对应 export)
  info       #查看系统相关信息
  inspect    #查看容器详细信息
  kill       #kill 指定的 docker 容器
  load       #从一个 tar包中加载一个镜像(对应save)
  login      #注册或登陆一个docker 源服务器
  logout     #登出当前源服务器
  logs       #输出当前容器的日志内容
  pause      #暂停容器
  port       #查看映射端口对应的容器内部源端口
  ps         #列出容器列表
  pull       #从docker镜像源服务器拉取指定镜像或库镜像
  push       #推送指定镜像或者库镜像到 docker 源服务器
  rename     #
  restart    #重启运行的容器
  rm         #移除一个或多个容器
  rmi        #移除一个或多个镜像
  run        #创建一个新的容器并运行一个命令
  save       #保存一个镜像为一个 tar (对应load)
  search     #在docker hub中搜索镜像
  start      #启动容器
  stop       #停止容器
  tag        #给源镜像打标签
  top        #查看容器中运行的进程消息
  unpause    #取消暂停容器
  version    #查看容器版本号
  wait       #获取容器停止时的退出状态值

镜像命令: #

docker images #

# 主机上的所有本地镜像
[root@izwz91mv6i3x6k12jjqh60z ~]# docker images help
#解释
REPOSITORY:镜像的仓库源   
TAG:镜像的标签
IMAGE ID:镜像的ID   
CREATED:创建时间   
SIZE:大小
#可选项
-a   --all #列出所有镜像
-q   --quiet #只列出镜像的ID
[root@izwz91mv6i3x6k12jjqh60z ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    d1165f221234   7 weeks ago   13.3kB
#搜索镜像
[root@izwz91mv6i3x6k12jjqh60z ~]# docker search mysql

NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10777     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4058      [OK] 
......

#搜索镜像的 star>3000 的镜像
[root@izwz91mv6i3x6k12jjqh60z ~]# docker search mysql --filter=stars=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10777     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4058      [OK]   

docker pull #

# 下载镜像 [:tag]
[root@izwz91mv6i3x6k12jjqh60z ~]# docker pull mysql
Using default tag: latest  # 不写tag 默认就是 latest
latest: Pulling from library/mysql
f7ec5a41d630: Pull complete #分层下载, docker image的核心,联合文件系统
9444bb562699: Pull complete 
6a4207b96940: Pull complete 
181cefd361ce: Pull complete 
8a2090759d8a: Pull complete 
15f235e0d7ee: Pull complete 
d870539cd9db: Pull complete 
493aaa84617a: Pull complete 
bfc0e534fc78: Pull complete 
fae20d253f9d: Pull complete 
9350664305b3: Pull complete 
e47da95a5aab: Pull complete 
Digest: sha256:04ee7141256e83797ea4a84a4d31b1f1bc10111c8d1bc1879d52729ccd19e20a #文件签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #存放的镜像的文件真实地址

#等价写法
docker pull docker.io/library/mysql:latest

#指定版本下载
[root@izwz91mv6i3x6k12jjqh60z ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
f7ec5a41d630: Already exists 
9444bb562699: Already exists 
6a4207b96940: Already exists 
181cefd361ce: Already exists 
8a2090759d8a: Already exists 
15f235e0d7ee: Already exists 
d870539cd9db: Already exists 
cb7af63cbefa: Pull complete 
151f1721bdbf: Pull complete 
fcd19c3dd488: Pull complete 
415af2aa5ddc: Pull complete 
Digest: sha256:a655529fdfcbaf0ef28984d68a3e21778e061c886ff458b677391924f62fb457
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

[root@izwz91mv6i3x6k12jjqh60z ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
mysql         5.7       87eca374c0ed   8 days ago    447MB
mysql         latest    0627ec6901db   8 days ago    556MB
hello-world   latest    d1165f221234   7 weeks ago   13.3kB

docker rmi #

#删除镜像
# docker rmi 镜像ID [镜像ID,...]   删除没有运行容器的镜像
[root@izwz91mv6i3x6k12jjqh60z ~]# docker rmi 0627ec6901db
Untagged: mysql:latest
Untagged: mysql@sha256:04ee7141256e83797ea4a84a4d31b1f1bc10111c8d1bc1879d52729ccd19e20a
Deleted: sha256:0627ec6901db4b2aed6ca7ab35e43e19838ba079fffe8fe1be66b6feaad694de
Deleted: sha256:94d5db550d62032ddc8ad8d4cfef8bac06fe7d35757deb2f8638d0fdc1e89217
Deleted: sha256:5fbbb0e9bfb8f2a4d665cc60aaf4876191c057898db276d2d030a0d6123afc8e
Deleted: sha256:124a9d262ebecea284b6438b0a04766b076bd3f89cb0f29a8a475f26bf93911f
Deleted: sha256:5aa37b6c8e31197ab2f357c09755bcb83228ff0fb69c2009a12b6eddb087e884
Deleted: sha256:d0b1d5665c308823bbc5b8986d405e5202ade6994dfa00d8ff576eff372dd045

# docker rmi -f 镜像ID [镜像ID,...]  删除连带删除容器的镜像
[root@izwz91mv6i3x6k12jjqh60z ~]# docker rmi -f d1165f221234
Untagged: hello-world:latest
Untagged: hello-world@sha256:f2266cbfc127c960fd30e76b7c792dc23b588c0db76233517e1891a4e357d519
Deleted: sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726

#docker rmi -f $(docker images -aq)  删除所有容器和镜像

[root@izwz91mv6i3x6k12jjqh60z ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

容器命令: #

前置环境,下载一个 centos 镜像

[root@izwz91mv6i3x6k12jjqh60z ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

新建并运行容器: #

[root@izwz91mv6i3x6k12jjqh60z ~]# docker run --help

Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  -d                            以后台方式运行,并打印容器ID
  --name=“string”                容器名字用于区分容器,
  -p               指定容器的端口(设置主机和容器的端口映射)
      -p ip:主机端口:容器端口(访问公网主机的端口可以访问到容器内容的端口)
      -p 主机端口:容器端口
      -p 容器端口
  -P                         随机指定端口
  -it                  使用交互方式运行,进入容器内查看内容

[root@izwz91mv6i3x6k12jjqh60z ~]# docker run -it centos /bin/bash
#容器内的centos ,发现很多命令并不完善
[root@e77313cc0ef1 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
#从容器中退出到主机
[root@e77313cc0ef1 /]# exit
exit
#主机的centos
[root@izwz91mv6i3x6k12jjqh60z ~]# ls
docker-client  docker-client-latest  docker-common  docker-engine  docker-latest  docker-latest-logrotate  docker-logrotate

列出所有运行的容器: #

[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

-q 只显示容器编号
-a 列出当前正在运行的容器+带出历史运行过的容器
-n=? 显示最近创建的容器的个数

[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                     PORTS     NAMES
e77313cc0ef1   centos         "/bin/bash"   3 minutes ago   Exited (0) 2 minutes ago             romantic_elgamal
17d31c5f5553   centos         "/bin/bash"   9 minutes ago   Exited (0) 9 minutes ago             os1
19d5eac5de11   d1165f221234   "/hello"      3 hours ago     Exited (0) 3 hours ago               naughty_williams

[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps -n=2
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
e77313cc0ef1   centos    "/bin/bash"   11 minutes ago   Exited (0) 9 minutes ago              romantic_elgamal
17d31c5f5553   centos    "/bin/bash"   16 minutes ago   Exited (0) 16 minutes ago             os1

退出容器: #

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

[root@izwz91mv6i3x6k12jjqh60z ~]# docker run -it centos /bin/bash
#进入容器后按住快捷键
[root@f3a97eadb092 /]# 
#发现返回了主机
[root@izwz91mv6i3x6k12jjqh60z ~]# 
[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
f3a97eadb092   centos    "/bin/bash"   28 seconds ago   Up 27 seconds             thirsty_pasteur

删除容器: #

docker rm [-f] 容器ID #删除指定的容器,rm -f 表示强制删除正在运行的容器
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有容器

启动和停止容器: #

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

[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
f3a97eadb092   centos    "/bin/bash"   28 seconds ago   Up 27 seconds             thirsty_pasteur
[root@izwz91mv6i3x6k12jjqh60z ~]# docker stop f3a97eadb092
f3a97eadb092
[root@izwz91mv6i3x6k12jjqh60z ~]# docker start f3a97eadb092
f3a97eadb092
[root@izwz91mv6i3x6k12jjqh60z ~]# docker restart f3a97eadb092
f3a97eadb092
[root@izwz91mv6i3x6k12jjqh60z ~]# docker kill  f3a97eadb092
f3a97eadb092
[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS                       PORTS     NAMES
f3a97eadb092   centos         "/bin/bash"   12 minutes ago   Exited (137) 5 seconds ago             thirsty_pasteur
e77313cc0ef1   centos         "/bin/bash"   25 minutes ago   Exited (0) 23 minutes ago              romantic_elgamal
17d31c5f5553   centos         "/bin/bash"   30 minutes ago   Exited (0) 30 minutes ago              os1
19d5eac5de11   d1165f221234   "/hello"      4 hours ago      Exited (0) 4 hours ago                 naughty_williams
[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@izwz91mv6i3x6k12jjqh60z ~]# docker start f3a97eadb092
f3a97eadb092
[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES
f3a97eadb092   centos    "/bin/bash"   12 minutes ago   Up 2 seconds             thirsty_pasteur

后台启动容器: #

[root@izwz91mv6i3x6k12jjqh60z ~]# docker run -d centos
ddb941029e1fd47abfbd83968afc2103b2685d3ee0cf3f7ec32cd6f6fee96aca
[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#常见问题:-d 运行之后,docker ps 发现它并没有运行
#原因:docker 容器使用后台运行,就必须要有一个前台进程,docker 发现没有应用,就会自动停止
#nginx 容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了。

查看日志: #

[root@izwz91mv6i3x6k12jjqh60z ~]# docker logs --help

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  -n, --tail string    显示的日志的条数
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)


#自己写一段 shell 脚本
docker run -d centos /bin/sh -c "while true;do echo ios;sleep 1;done"

[root@izwz91mv6i3x6k12jjqh60z ~]# docker run -d centos /bin/sh -c "while true;do echo ios;sleep 1;done"
018801a5cdcfc762fb5def6d8f1ff3a7ec4d136f6b2812717937ee43a5f6ff66
[root@izwz91mv6i3x6k12jjqh60z ~]# docker logs 018801a5cdcfc762fb5def6d8f1ff3a7ec4d136f6b2812717937ee43a5f6ff66
ios....

查看容器进程的信息: #

[root@izwz91mv6i3x6k12jjqh60z ~]# docker top 018801a5cdcf
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                9040                9015                0                   16:09               ?                   00:00:00            /bin/sh -c while true;do echo ios;sleep 1;done
root                9288                9040                0                   16:11               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

查看镜像中的元数据: #

[root@izwz91mv6i3x6k12jjqh60z ~]# docker inspect 018801a5cdcf 
[
    {
        "Id": "018801a5cdcfc762fb5def6d8f1ff3a7ec4d136f6b2812717937ee43a5f6ff66",
        "Created": "2021-04-28T08:09:10.127985045Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo ios;sleep 1;done"
        ],
        ......
    }
]

进入当前正在运行的容器: #

#通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

#方法一:docker exec进入容器后开启一个新的终端,可以在里面操作(常用)
#查看正在运行的容器
[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS        PORTS     NAMES
018801a5cdcf   centos    "/bin/sh -c 'while t…"   21 hours ago   Up 21 hours             confident_mayer
f79cbdf9c012   centos    "/bin/bash"              21 hours ago   Up 21 hours             sweet_lehmann

#进入容器
[root@izwz91mv6i3x6k12jjqh60z ~]# docker exec -it 018801a5cdcf /bin/bash
[root@018801a5cdcf /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
#查看容器内的进程
[root@018801a5cdcf /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Apr28 ?        00:00:16 /bin/sh -c while true;do echo ios;sleep 1;done
root      9005     0  0 04:43 pts/0    00:00:00 /bin/bash
root      9042     1  0 04:43 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root      9043  9005  0 04:43 pts/0    00:00:00 ps -ef

#方法二:docker attach 进入容器正在执行的终端,不会执行新的进程
[root@izwz91mv6i3x6k12jjqh60z ~]# docker attach 018801a5cdcf
ios
ios
ios
ios
#发现正在执行脚本。。

拷贝文件到主机: #

从容器中拷贝文件到主机上(拷贝目前是一个手动过程,未来使用 -v 卷技术可以实现自动拷贝)

#查看运行的容器
[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS        PORTS     NAMES
018801a5cdcf   centos    "/bin/sh -c 'while t…"   21 hours ago   Up 21 hours             confident_mayer
f79cbdf9c012   centos    "/bin/bash"              21 hours ago   Up 21 hours             sweet_lehmann

#查看主机文件
[root@izwz91mv6i3x6k12jjqh60z ~]# ls
docker-client  docker-client-latest  docker-common  docker-engine  docker-latest  docker-latest-logrotate  docker-logrotate

#进入容器,新建一个测试文件后退出
[root@izwz91mv6i3x6k12jjqh60z ~]# docker attach f79cbdf9c012
[root@f79cbdf9c012 /]# cd /home
[root@f79cbdf9c012 home]# ls
[root@f79cbdf9c012 home]# touch test.java
[root@f79cbdf9c012 home]# exit
exit

#再次查看,发现容器已经不再运行
[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS        PORTS     NAMES
018801a5cdcf   centos    "/bin/sh -c 'while t…"   21 hours ago   Up 21 hours             confident_mayer
[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED        STATUS                      PORTS     NAMES
018801a5cdcf   centos         "/bin/sh -c 'while t…"   21 hours ago   Up 21 hours                           confident_mayer
f79cbdf9c012   centos         "/bin/bash"              21 hours ago   Exited (0) 25 seconds ago 

#拷贝文件命令
[root@izwz91mv6i3x6k12jjqh60z ~]# docker cp f79cbdf9c012:/home/test.java /home

#查看是否拷贝成功
[root@izwz91mv6i3x6k12jjqh60z ~]# cd /home
[root@izwz91mv6i3x6k12jjqh60z home]# ls
admin  test.java

总结 #

image-20210221200910336.png