开始使用时都是从命令入手,命令有很多,大到可以分为镜像、容器、仓库操作,在学习要知道不懂的命令可以使用 --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或容器名
# 本地文件与容器相互复制 # docker cp 容器ID:容器文件地址 本地路径 docker cp 本地路径 容器ID:容器文件地址
# 容器网络 docker network careate 创建网络 connect 不同网络联通
|
结语
命令很全可以把想要的操作都实现了,但对日常使用还是不够的,使用的镜像有很多不完善的地方,缺少关联依赖,虽然生成容器后,进入容器里面进行调整再保存成镜像也可以,但是不方便移植。而且项目的依赖不可能用一个镜像来解决,那和使用虚拟机有啥区别,完全体现不出容器化技术的精髓。那么问题就来了,容器与容器要怎么联通、配合,如何统一化管理一个容器组。我们一步步来解决。