Bootstrap

【Docker】003-Docker常用命令

目录

三、Docker常用命令

1、帮助命令

2、镜像命令

查看本地主机上的所有镜像:

搜索镜像:

下载镜像:

删除镜像:

3、容器命令

新建容器并启动:

列出正在运行的容器:

退出容器:

删除容器:

4、常用的其他命令

后台启动容器:

查看日志:

查看容器中的进程信息:

查看镜像的元数据:

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

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

参考文章:


三、Docker常用命令

1、帮助命令

# docker版本信息
docker version

# docker系统信息
docker info

# docker 帮助命令
docker --help

# docker 特定帮助命令
docker [命令]  --help

docker命令官方文档:

Reference documentation | Docker Documentation

2、镜像命令

查看本地主机上的所有镜像:

# 查看本地主机上的所有镜像
docker images

# 可选项
Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]
Options:
  -a, --all             显示所有镜像(默认隐藏中间的镜像)
      --digests         显示摘要
  -f, --filter filter   根据提供的条件过滤输出
      --format string   使用一个Go模板漂亮地打印镜像
      --no-trunc        不截断输出
  -q, --quiet           仅显示镜像的id


# 结果
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    d1165f221234   2 weeks ago   13.3kB

# 解释
# REPOSITORY 镜像的仓库源
# TAG 镜像的标签
# IMAGE ID 镜像的id
# CREATED 镜像的创建时间
# SIZE 镜像的大小

搜索镜像:

# 搜索镜像
docker search

# 可选项
Usage:  docker search [OPTIONS] TERM
Options:
  -f, --filter filter   根据提供的条件过滤输出
      --format string   使用一个Go模板漂亮地打印搜索
      --limit int       最大搜索结果数(默认为25)
      --no-trunc        不截断输出

# 举个例子
--filter=STARTS=3000 # 搜索镜像的stars大于等于3000的

# 举例:搜索星星大于3000的mysql
# 命令
docker search mysql --filter=STARS=3000

# 结果
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10665     [OK]       
mariadb   MariaDB Server is a high performing open sou…   3997      [OK]   

下载镜像:

# 下载镜像
docker pull

# 可选项
Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Options:
  -a, --all-tags                下载仓库中所有已标记的镜像
      --disable-content-trust   跳过镜像验证(默认为true)
      --platform string         如果服务器支持多平台,则设置平台
  -q, --quiet                   抑制详细输出

# 下载MySQL
docker pull mysql

# 控制台打印日志分析
Using default tag: latest # 如果不写tag,默认下载latest
latest: Pulling from library/mysql 
a076a628af6f: Pull complete # 分层下载,docker镜像的核心 联合文件系统
f6c208f3f991: Pull complete 
88a9455a9165: Pull complete 
406c9b8427c6: Pull complete 
7c88599c0b25: Pull complete 
25b5c6debdaf: Pull complete 
43a5816f1617: Pull complete 
1a8c919e89bf: Pull complete 
9f3cf4bd1a07: Pull complete 
80539cea118d: Pull complete 
201b3cad54ce: Pull complete 
944ba37e1c06: Pull complete 
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址

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

# 指定版本下载
docker pull mysql:5.7

# 控制台打印日志分析
5.7: Pulling from library/mysql
a076a628af6f: Already exists # 已经存在,可以共用,这就是分层下载的好处
f6c208f3f991: Already exists 
88a9455a9165: Already exists 
406c9b8427c6: Already exists 
7c88599c0b25: Already exists 
25b5c6debdaf: Already exists 
43a5816f1617: Already exists 
1831ac1245f4: Pull complete # 只下载不一样的部分
37677b8c1f79: Pull complete 
27e4ac3b0f6e: Pull complete 
7227baa8c445: Pull complete 
Digest: sha256:b3d1eff023f698cd433695c9506171f0d08a8f92a0c8063c1a4d9db9a55808df
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

删除镜像:

# 删除指定id的镜像
docker rmi -f 镜像id

# 可选项
Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]
Options:
  -f, --force      强制移除图像
      --no-prune   不删除未标记的父母

# 删除指定的多个镜像
docker rmi -f 镜像id1 镜像id2 镜像id3……

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

3、容器命令

前提:我们有了镜像才能创建容器;

# 使用docker下载centos
docker pull centos

新建容器并启动:

# 新建容器并启动
docker run [可选参数] image

# 参数说明
--name="Name" 容器名字,比如tomcat01、tomcat02用来区分容器
-d 后台运行方式,我们以前使用nohup
-it 使用交互方式运行,进入容器查看内容
-P 指定容器的端口 -p 8080:8080 (大有门道)
	-P ip:主机端口:容器端口
	-P 主机端口:容器端口(常用)
	-P 容器端口
-p 随机指定端口

# 测试
docker run -it centos /bin/bash

# 控制台日志
[root@zibo /]# docker run -it centos /bin/bash
[root@f907a40028da /]# 看到了吧,主机名zibo变成了f907a40028da

# ls命令执行结果
[root@f907a40028da /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# 看到了吧,看懂了吧,这就是一个小型服务器!

# 退出容器
[root@f907a40028da /]# exit
exit # 容器停止运行
[root@zibo /]# 

补充:centos7系统可以直接通过命令hostnamectl set-hostname 主机名进行修改,修改完毕后重新登录 shell 就可以了

列出正在运行的容器:

# 列出正在运行的容器
docker ps

# 列出运行过的所有容器(正在运行的 + 历史运行过的)
docker ps -a

# 可选参数
-n=? # 显示最近创建的?个容器
-aq  # 列出运行过的所有容器的编号

退出容器:

# 退出容器
[root@f907a40028da /]# exit
exit # 容器停止运行,并退出
[root@zibo /]# 

# 退出不停止运行
按键:Ctrl + P + Q

删除容器:

# 删除容器(不能删除正在运行的容器)
docker rm 容器id

# 删除所有容器(可以删除正在运行的容器,强制删除)
docker rm -f $(docker ps -aq)

# 删除所有容器
docker ps -a -q|xargs docker rm

4、常用的其他命令

后台启动容器:

# 后台启动容器
docker run -d 容器id

# 问题:使用docker ps 查看正在运行的容器,发现没有这个容器
# 坑:docker使用后台运行就必须有一个前台程序,否则会自动停止
# 比如nginx,启动容器后发现自己没有提供服务,就会立刻停止

查看日志:

# 查看日志
docker logs [可选项]

# 可选项
Usage:  docker logs [OPTIONS] CONTAINER
Options:
      --details        显示提供给日志的额外详细信息
  -f, --follow         跟踪日志输出
      --since string   显示日志自时间戳(例如:2013-01-02T13:23:37Z)或相对(如42分秒)
  -n, --tail string    从日志的末尾开始显示的行数(默认为“all”)
  -t, --timestamps     显示时间戳
      --until string   显示时间戳之前的日志(例如2013-01-02T13:23:37Z)或相对的日志(例如42m for 42 minutes)

# 举例
docker logs -tf 容器id
docker logs -tf --tail 行数 容器id

查看容器中的进程信息:

# 查看容器中的进程信息
docker top 容器id

查看镜像的元数据:

# 查看镜像的元数据
docker inspect 容器id

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

# 进入当前正在运行的容器
# 通常,我们容器都是后台运行的,需要进入容器修改一些配置
# 方式一
docker exec -it 容器id /bin/bash

# 方式二
docker attach 容器id

# docker exec:进入容器后开启一个新的终端,可以进行操作
# docker attach:进入容器后进入正在运行的终端(可以看到运行日志)

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

# 从容器内拷贝文件到主机
docker cp 容器id:容器类路径 目标主机路径

# 测试
[root@zibo ~]# docker run -it centos /bin/bash
[root@7ed3e2a1ae96 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@7ed3e2a1ae96 /]# touch test.java # 创建test.java文件
[root@7ed3e2a1ae96 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  test.java  tmp  usr  var
[root@7ed3e2a1ae96 /]# exit
exit
[root@zibo ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
7ed3e2a1ae96   centos        "/bin/bash"   33 seconds ago   Exited (0) 6 seconds ago              festive_neumann
da424985956e   centos        "/bin/bash"   47 seconds ago   Exited (0) 36 seconds ago             quizzical_chatelet
4988f3b9c57a   centos        "/bin/basj"   50 seconds ago   Created                               musing_driscoll
a908b4d8dc9f   centos        "/bin/bash"   9 minutes ago    Exited (0) 7 minutes ago              nifty_bartik
eeea7f8d57c0   centos        "/bin/bash"   10 minutes ago   Exited (0) 10 minutes ago             frosty_goldwasser
f907a40028da   centos        "/bin/bash"   11 hours ago     Exited (0) 11 hours ago               determined_panini
dce8b0416367   hello-world   "/hello"      35 hours ago     Exited (0) 35 hours ago               magical_almeida
e0dff1522cfc   hello-world   "/hello"      35 hours ago     Exited (0) 35 hours ago               unruffled_lehmann
[root@zibo ~]# cd /home
[root@zibo home]# ls
www # 本来没有test.java
[root@zibo home]# docker cp 7ed3e2a1ae96:test.java /home
[root@zibo home]# ls
test.java  www # 可以看到test.java成功从容器里面拷贝过来了

# 这个拷贝是一个手动的过程,未来我们使用 -v 卷的技术,可以实现两个文件夹文件的自动同步

参考文章:

docker常用命令:Docker 常用命令-布布扣-bubuko.com

;