Docker 常用命令

开始使用时都是从命令入手,命令有很多,大到可以分为镜像、容器、仓库操作,在学习要知道不懂的命令可以使用 --help 来获取有用的信息。

镜像操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 当前所有的镜像
docker images
# 当前所有的镜像ID
docker images -qa
# 搜索远程的镜像(无版本信息、还是去 `hub.docker.com` 里查找信息比较完整)
docker search 目标镜像
# 拉取远程镜像
docker pull 镜像[:版本]
# 删除本地镜像
docker rmi 镜像id
# 删除本地全部镜像
docker rmi $(docker images -qa)
# 导出镜像
docker save [-o 保存路径] 镜像[:版本]
# 导入镜像
docker load -i 镜像路径

# 通过 Dockerfile 文件生成镜像,Dockerfile 请看下边介绍
docker build -t 自定义镜像名[:版本] [-f Dockerfile文件路径]

# 查看生成镜像时使用的命令(类似 Dockerfile 里编写的命令)
docker history 镜像ID或镜像名[:版本] [--no-trunc] 可以查看完整的命令
--no-trunc 默认不会把过长命令完整显示,使用它可以查看完整命令

# 查看日志
docker logs -ft --tail [数量] 容器ID或容器名

# 查看窗口中的进程信息
docker top 容器ID或容器名

# 查看镜像的元数据
docker inspect 镜像ID或镜像名[:版本]

# 重命名镜像及版本
docker tag 要修改名称的镜像[:版本] 新镜像名[:版本]

Note:

inspect 是查看镜像、容器详细信息的命令,对制作镜像的人来说都是很好的参考工具

仓库命令

1
2
3
4
# 登录远程仓库
docker login
# 推送镜像到远程仓库
docker push 镜像名[:版本]

容器操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 查看运行中的容器
docker ps
# 查看全部容器
docker ps -a
# 显示所有的容器ID
docker ps -qa

# 指定镜像生成容器
docker run 参数 目标镜像[:版本] 容器内操作命令
--name="容器命名"
-it 交换式
- ctrl + P + Q # 不停止退出交互
-d 后台运行
--rm 临时使用,退出不保存
--net 网络
-v 卷名:容器内路径
-v /宿主机路径:容器内路径:读写权限
rw 可读可写
ro 只读,只能通过主机操作,不能在容器中修改
--volumes-from 容器与容器相关联
--link 【冷门】简单的在容器中添加 host

# 删除容器
docker rm 容器ID
# 删除全部容器
docker rm $(docker ps -qa)
# 把当前存在的容器生成镜像
docker commit

# 启动容器
docker start 容器ID或容器名
# 停止容器
docker stop 容器ID或容器名
# 查看容器的资源占用:资源占用大就想办法限制资源
docker status 容器ID或容器名
# 重启容器
docker restart 容器ID或容器名
# 关闭容器
docker kill 容器ID或容器名

# 查看当前数据卷,镜像需要关联时,未指定会自动生成
docker volume ls

# 进入已启动的容器
## 进入容器后开启一个新的终端,可以在里面操作(常用)
docker exec -it 容器ID或容器名 容器命令
## 进入容器正在执行的终端,不会启动新的进程
docker attach 容器ID或容器名

# 本地文件与容器相互复制
## Note: 未运行的容器里的文件一样可以获取,可以使用这个特性来拿初始配置,然后在本地修改
docker cp 容器ID:容器文件地址 本地路径
docker cp 本地路径 容器ID:容器文件地址

# 容器网络
docker network
careate 创建网络
connect 不同网络联通

结语

命令很全可以把想要的操作都实现了,但对日常使用还是不够的,使用的镜像有很多不完善的地方,缺少关联依赖,虽然生成容器后,进入容器里面进行调整再保存成镜像也可以,但是不方便移植。而且项目的依赖不可能用一个镜像来解决,那和使用虚拟机有啥区别,完全体现不出容器化技术的精髓。那么问题就来了,容器与容器要怎么联通、配合,如何统一化管理一个容器组。我们一步步来解决。