目录
三、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