[分布式专题] Docker命令合集
Docker 命令行接口
Docker提供了丰富的CLI用于容器的管理及相关配置, 这里记录一些常用的命令和参数
运行容器常用参数
docker run: 启动一个容器, 如果没有镜像会自动下载镜像, 这是最常用的命令之一, 参数也是最多的
- -v 挂载卷 宿主目录:容器目录
- -m 挂载一个文件系统 与-v类似, 实际上大多使用-v参数
- -p 绑定端口 宿主端口:容器端口
- –name 指定容器名称
- –rm 退出后自动删除, 不能与-d同时使用
- -d 后台守护进程模式启动
- -it 分配一个伪终端并开启标准输入实现交互式访问容器(-i interactive, -t tty)
- –link 链接到另一个容器, 在当前容器中写入hosts能够直接访问另一个容器
- -m 限制内存字节数
- -c 限制cpu的使用率
- -e 从外部导入容器的环境变量
- -a 与主机关联标准输入输出
- –network 指定网络堆栈, 除默认docker0网桥外, 可以通过docker network create自定义网络
运行容器示例
在交互式伪终端命令行中启动一个busybox, busybox是一个精简的微型linux系统, 包括了几百个命令行工具, 非常小.
docker run –name busybox -it –rm busybox
启动mongodb容器示例, 挂载/data/db用于存储BSON数据, 同时暴露27017端口, –bind_ip_all是mongod的启动参数, 让mongodb对外部可见
docker run –name mongodb -d -p 27017:27017 -v /home/mongo_data:/data/db mongo mongod –bind_ip_all
使用/bin/bash作为入口命令交互式的启动一个node.js容器
docker run -it –name node_cmd –rm node /bin/bash
一般启动应用的命令
docker run –name application1 -d -p 80:80 -v –link mysql /home/docker_application1:/data
容器管理
docker ps: 查询容器
- -a 查询所有容器, 包括非运行状态的
- -q 只查询ID
docker rm: 删除某个或某些容器(-f 参数强制删除)
docker rmi: 删除某个或某些镜像(-f 参数强制删除)
docker images: 查询本地镜像列表
docker logs: 查询某个容器的日志
docker start/stop/restart: 不言而喻
docker attch: 与run命令-a参数一样, 重定向容器的标准输入输出
docker search: 在仓库中搜索一个镜像
docker info: 查询Docker运行状态
docker network/volume/image/container 管理网络/卷/镜像/容器.这些用的不多, –help自行查询了
docker inspect 检查一个容器的详细情况, 定位问题时常用
docker stats 检查容器对cpu和内存的使用情况
停止所有的容器
docker stop -f $(docker ps -a -q)
删除所有的容器
docker rm -f $(docker ps -a -q)
Dockerfile与镜像构建
镜像定制
在实际使用过程中, 或者CI/CD的流程中, 需要制作包含应用程序的镜像. Docker提供了很多用于修改制作镜像的命令, 以及基于Dockerfile的镜像构建机制
1 | # Dockerfile 编写好之后, 就可以执行build命令构建了 |
Dockerfile示例
Dockerfile是构建镜像的基础, 它的语法比较简单, 主流的编辑器都能找到对应的插件, 这里Mark几个链接
这是一个常见的Dockerfile的格式
1 | FROM image:tag |
Dockerfile编写建议
我把这篇编写Dockerfile最佳实践里面的一些重点摘录了下来, 理解了容器的运行原理和镜像构建原理之后, 也就很容易理解为什么这样做更好了
- 编写.dockerignore文件
- 容器只运行单个应用
- 将多个RUN指令合并为一个
- 基础镜像的标签不要用latest
- 每个RUN指令后删除多余文件
- 选择合适的基础镜像(alpine版本最好)
- 设置WORKDIR和CMD
- 使用ENTRYPOINT (可选)
- 在entrypoint脚本中使用exec
- COPY与ADD优先使用前者
- 合理调整COPY与RUN的顺序
- 设置默认的环境变量,映射端口和数据卷
- 使用LABEL设置镜像元数据
- 添加HEALTHCHECK
附录
安装Docker命令
1 | yum install -y yum-utils device-mapper-persistent-data lvm2 |
CentOS7 /etc/docker/daemon.json 修改国内镜像地址
1 | { |
结语
当前比较前沿的微服务架构以及DevOps需要一系列高效率的生产工具和更现代化的技术路线来支撑, 容器化无疑是当前最被广泛认可的优秀的基础技术之一. 这篇和上篇把Docker一些基础的知识梳理了一遍, 更深层次的东西等以后在实践中慢慢领悟了.