作者 | Timothy Mugayi
译者 | 弯月 责编 | 徐威龙
封图| CSDN 下载于视觉中国
Docker容器已经从一种锦上添花的技术转变成了部署环境的必需品。有时,作为开发人员,我们需要花费大量时间调试或研究Docker工具来帮助我们提高生产力。每一次新技术浪潮来临之际,我们都需要花费大量时间学习。
花费1-2天的时间来设置Docker集群,或找出导致Docker容器启动失败的代码,你是不是也有过类似的经历?对于大多数开发人员来说,我们花费在研究配置和找bug上的时间似乎都超过了实际推出新功能的时间,尤其是当你所使用的环境仍然相对较新或尚未成熟时。
我们中的有些人并没有那么走运,无法通过完善的CI/CD流程打造稳定的环境。为此,我从各大主流Docker技术文档网站上搜罗和整理出了这份日常工作最常使用的Docker命令教程。
详尽的可选标志和参数的详细列表,请参阅Docker手册https://docs.docker.com/engine/reference/commandline/cli/
提示:每个Docker命令都有内置的文档,比如键入docker run --help就可以得到帮助文档。键入docker run --help将生成以下帮助文档。
我希望本文可以帮助你摆脱调试和使用Docker的烦恼。阅读各个命令时,请注意命令的相关说明。
Docker构建
$ docker build \
--build-arg ARTIFACTORY_USERNAME=timothy.mugayi \
--build-arg ARTIFACTORY_SECRET_TOKEN=AP284233QnYX9Ckrdr7pUEY1F \
--build-arg LICENSE_URL='https://source.com/license.txt' \
--no-cache -t helloworld:latest .
你可以使用可选的构建参数构建Docker镜像。在默认情况下,Docker会缓存第一个Dockerfile构建,或根据Dockerfile中的run命令向镜像添加新层后的构建,目的是加速后续构建。
如果你不需要缓存,那么可以向上面的示例一样添加一个不缓存的参数。
注意:Docker命令可以按名称或Docker容器ID执行。下述命令中的<CONTAINER>可以换成容器ID或容器名称。
运行Docker容器
$ docker start <CONTAINER>
启动一个已有的容器。我们假定该容器已经下载并创建完毕。
$ docker stop <CONTAINER>
停止正在运行的Docker容器。
$ docker stop $(docker container ls -aq)
如果你有多个正在运行的Docker容器,而且你想停止所有容器,那么可以输入docker stop以及所有容器ID的列表。
$ docker exec -ti <CONTAINER> [COMMAND]
在某个特定的容器内运行一个shell命令。
$ docker run -ti — image <IMAGE> <CONTAINER> [COMMAND]
Docker run 与 start 有着明显的区别。从根本上说,Docker run 做了两件事情:(1)创建一个镜像的新容器;(2)执行这个容器。如果你希望重新运行失败或退出的容器,请使用docker start命令。
$ docker run -ti — rm — image <IMAGE> <CONTAINER> [COMMAND]
这是一个很有趣的命令,旨在同时创建和启动容器。它还想在容器内运行命令,然后在命令执行完成后删除容器。
docker run -d <IMAGE>:<IMAGE_TAG>
Usage:
docker run -d helloworld:latest
如果你希望在分离状态中启动docker run命令(例如,作为Linux的后台守护程序),则可以在run命令最后添加-d。
$ docker pause <CONTAINER>
暂停某个特定容器内所有正在运行的进程。
$ docker ps -a
上述命令将列出之前运行的所有Docker镜像。在找出你想运行的镜像后,可以执行如下命令。请确保更改容器ID,以反映最初的docker ps -a命令显示的结果。
sudo docker run {container ID} -e AWS_DEFAULT_REGION=us-east-1 \
e INPUT_QUEUE_URL="https://sqs.us-east-1.amazonaws.com/my_input_sqs_queue.fifo" \
e REDIS_ENDPOINT="redis.dfasdf.0001.cache.amazonaws.com:8000" \
e ENV=dev \
e DJANGO_SETTINGS_MODULE=engine.settings \
e REDIS_HOST="cmgadsfv7avlq.us-east-1.redis.amazonaws.com" \
e REDIS_PORT=5439 \
e REDIS_USER=hello \
e REDIS_PASSWORD=trasdf**#0ynpXkzg
上述命令展示了如何运行带有多个作为参数传入的环境变量的Docker镜像,\表示换行符。
调试Docker容器
你可以使用docker ps获取当前正在运行的容器名称。
$ docker history <IMAGE>
example usage:
$ docker history my_image_name
上述命令可以显示特定镜像的历史记录。当你想深入了解Docker镜像时,这些信息非常有用。让我们深入讨论一下,因为你非常有必要了解这个命令的功能,而有关该命令的文档少之又少。
在我们谈论Docker时,镜像是建立在多层之上的,这些层是Docker镜像的基础。每个容器都包含一个可读/可写层的镜像(你可以-将其视为持久状态或文件)。在这之上才是其他只读层。这些层(也称为中间镜像)是在执行Docker镜像的build命令时,执行Dockerfile中的命令时生成的。
如果你的Dockerfile中包含from、run和/或copy指令,那么build该镜像时,run指令就会用自己的镜像ID创建一层。然后,该镜像/层就会显示在docker history中,而且还会显示镜像的ID以及生成日期。后续指令将生成另一个条目,依此类推。CREATED BY列大致对应于Dockerfile中的一行。如下图所示。
'docker history'命令的图示
$ docker images
列出当前存储在机器中的所有镜像。
$ docker inspect <IMAGE|CONTAINER ID>
Docker inspect将显示有关特定Docker对象的低级信息。在调试的情况下, 存储在该对象中的数据会非常有用,例如交叉检查Docker挂载点。
请注意:该命令获取两个主要响应:镜像级别的详细信息和容器级别的详细信息。你可以从该命令中获取如下信息:
容器ID以及创建的时间戳
当前状态(在尝试识别容器是否已停止以及为何停止时很有用)
Docker镜像信息、文件系统绑定、卷信息以及挂载
环境变量,例如传递给容器的命令行参数
网络配置:IPv4和IPv6的IP地址以及网关和辅助地址
$ docker version
这个命令显示Docker的版本,包括计算机上当前安装的客户端和服务器版本。
没错,Docker是一个客户端-服务器应用程序。守护程序(长期运行的Linux后台服务)是服务器,CLI是众多客户端之一。Docker守护程序会公开一个REST API,许多不同的工具可以通过该API与该守护程序进行通信。
$ docker version
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:22:34 2019
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.5
API version: 1.40 (minimum version 1.12)
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:29:19 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
Docker版本输出
这是如何设置客户端-服务器体系结构的图像
AWS ECS上的Docker
有时,你需要进入运行中的Docker容器,调试或交叉检查配置是否正确。
你可以使用docker exec -it <container ID> /bin/bash来获取shell访问权限。如果你想找出无法运行的Docker镜像,例如你想使用AWS ECS集群,则会收到一则晦涩难懂的错误消息,如下所示。
坦白地说,引发这一错误的原因多种多样,例如
1)你的代码有问题,引发了未捕获的异常,并且Docker容器在启动时宕机;
2)在使用EC2实例上的ECS群集时,出现了磁盘空间不足的情况,如果你的ECS的放置类型没有选择Fargate就会出现这种问题;
3)你现有的Docker容器占用了所有EC2的可用内存。
Essential container in task exited
执行以下命令即可找出最近运行失败的Docker容器。如果你的账号拥有sudo访问权限,请忽略sudo。你可以使用该命令,根据给定的输出,通过重新运行容器来查看其失败的原因。
$ sudo docker ps -a --filter status=dead --filter status=exited --last 1
如有疑虑,重启Docker服务
$ sudo service docker stop
$ sudo service docker start
# on a MAC you an use the docker utilty or alternatively run
$ killall Docker && open /Applications/Docker.app
相信无需进一步的解释。
清理Docker镜像
$ docker system prune
Docker在清理未使用的对象(例如镜像、容器、卷和网络)方面采取了保守的态度。
除非你明确要求Docker删除,否则通常不会删除这些对象。因此,如果不删除这些对象,那么很快就会占用大量空间。因此,定期运行下述命令,清理未使用的Docker镜像非常重要。
docker kill <CONTAINER>
杀死某个正在运行的容器。
$ docker kill $(docker ps -q)
杀死所有正在运行的容器。
$ docker rm <CONTAINER>
删除某个目前没有运行的容器。如果镜像保存在远程镜像库中,那么不会受到影响。
$ docker rm $(docker ps -a -q):
删除所有没有运行的容器。
$ docker logs my_container
访问容器的日志,在调试时非常有用。
从远程镜像库中提取Docker镜像
1、Docker Hub
Docker Hub是Docker提供的一项服务,用于查找和共享打开的容器镜像。
如果你希望从Docker Hub将镜像拉取到本地,那么只需在Docker run命令后面加上镜像路径即可。以下命令说明了如何拉并运行稳定版本的Rocker镜像
$ docker run --rm -p 8787:8787 rocker/verse
Docker首先会尝试检查本地计算机上是否有该镜像。如果没有,在从Docker Hub库中下载镜像,这个功能是开箱即用的。
$ docker pull rocker/verse
如果你只想拉取镜像,而不想运行镜像,则只需运行docker pull即可。
如果你想登录Docker Hub,则可以运行上述命令,然后输入密码即可。
2、自定义 Docker 镜像库
$ docker login your.docker.host.com
Username: foo
Password: ********
Email: user@myemail.com
如果你想从某个需要身份验证的通用自定义Docker镜像库提取镜像,则可以使用docker login命令,如上所示。请注意,执行上述操作时,会在~/.docker/config.json
文件中创建一个条目。修改~/.docker/config.json可以修改身份验证详细信息。
3、亚马逊ECR
亚马逊ECR(Amazon Elastic Container Registry)是一个完全托管的Docker容器仓库,允许开发人员存储、管理和部署Docker容器镜像。亚马逊ECR与ECS(Elastic Container Service)无缝协作。如果你需要从ECR提取镜像,则可以参照如下命令。
你需要使用拥有AWS访问权限和密钥的IAM用户配置AWS CLI。
亚马逊ECR要求IAM用户访问秘钥必须通过某个IAM策略赋予ecr:GetAuthorizationToken的权限,然后才能通过镜像库的验证并提取镜像。另外,你可以利用亚马逊ECR Docker Credential Helper实用程序。以下方法假定你使用的是AWS CLI,且已设置好所有权限。
$ aws ecr list-images --repository-name=twitter-data-engine-core
$ aws ecr describe-images —- repository-name=twitter-data-engine-core
$ aws ecr get-login —- region us-east-1 —- no-include-email
Get-login命令会生成一个长的Docker登录命令。你只需复制并执行。当然首先必须先进行身份验证,然后才能尝试从AWS ECR执行Docker镜像提取。
$ docker login -u AWS -p {YOUR_TEMPORARY_TOKEN}
$ docker pull 723123836077.dkr.ecr.us-east-1.amazonaws.com/twitter-data-engine-core:build-9
导入和导出Docker镜像
$ docker save your_docker_image:latest > /usr/local/your_docker_image.tar
$ docker load < /usr/local/your_docker_image.tar
如果你有需要,并且想将镜像导出到硬盘,并加载到Docker镜像,那么就可以执行上述命令。
如果你想通过另一种媒介(Docker镜像库之外),将Docker镜像从一台机器转移到另一台机器,那么导出到文件非常有用。由于安全性,在某些环境中你的访问可能会受到限制。你无法实施镜像库到镜像库的迁移,因此这是一个很实用的命令。
原文:
https://medium.com/better-programming/the-ultimate-docker-command-list-d98ef300fe6d
- 火线
- 领取
- 预约
- 狂欢
- 软件
- 辅助
- 检测
- 内存
- 官方
- 保安
- 配合
- 女子
- 园区
- 电动
- 游戏
- 召唤
- 使命
- 可以
- 战区
- 实验
- 翻转
- 1张
- 引力
- 模式
- 救世主
- 非常
- 终结
- 奖励
- 赛季
- 我们
- 策划
- 竞技
- 一个
- 神奇
- 登陆
- 工作
- 神仙
- 就是
- 波士顿
- 这个
- 英雄
- 已经
- 小弟
- 打败
- 平台
- 直播
- 相关
- 武器
- 挑战
- 但是
- 放大
- 功率
- 诈骗
- 小学生
- 手机
- 家长
- 信息
- WE
- 微笑
- 加载
- 视频
- 白云
- 广州市
- 招生
- 户籍
- 民办
- 警方
- 使用
- 进行
- 出现
- 扫雷
- 各种
- 地图
- 加速器
- 穿越
- 潜伏
- 解说
- 由于
- 图片
- 没想到
- 能量
- 神气
- 万元
- 系列
- 敌人
- 对手
- 时间
- 打出
- 高手
- 操作
- 开外
- 相信
- 大家
- 优化
- 激光
- 输出
- 公司
- 瞄准
- 屏幕
- 命中
- 阶段
- 垃圾
- 任务
- 衍生
- 也是
- 巴黎
- 价格
- 作者
- 商品
- 概率
- 记者
- 网络
- 合作
- 内脏
- 动物
- 数据
- 遇到
- 视野
- 消费
- 发放
- 羊毛
- 广告
- 员工
- in
- 程序
- 自动
- 速率
- 信号
- 干扰
- 表现
- 设计
- 举报
- 打击
- 改装
- 锻造
- 所以
- 一辆
- 机油
- 师傅
- 他们
- 免费
- 关注
- 评论
- 对于
- 困难
- 哪个
- 限制
- 驱动
- 效率
- 功能
- 安全
- 一些
- 葡萄
- 处罚
- 电脑
- 老二
- 老人
- 什么
- 联盟
- 投诉
- 金融机构
- 金融
- 疫情
- 买卖
- 竟然
- 测试
- 1月
- 装备
- 觉得
- 读者
- 获得
- 才能
- 会员
- 东西
- 用户
- 邀请
- 比赛
- 着装
- 天赋
- 提高
- 速度
- 开火
- 挂了
- 这是
- 子弹
- 教学
- 小伙
- 皮肤
- 角色
- 黑色
- 国内
- 透视
- 网友
- 选手
- 职业
- 求生
- 欧美
- 时候
- 百科
- 植物
- 开始
- 儿童
- 赛事
- 服务
- 部落
- 环境
- 现在
- 其他
- 容器
- 命令
- 运行
- the
- ing
- me
- is
- 帐号
- 密码
- 手枪
- 沙漠
- 成为
- 面具
- 防毒
- 修复
- 介绍
- 方法
- 设备
- 通过
- 怎么
- 申诉
- 网站
- 自己
- 很多
- 金色
- 那么
- 幸福
- 集结
- 版本
- 箱子
- 一下
- 跳跃
- 那些
- 超级
- 孩子
- 阅读
- 读书
- 培养
- 热血
- 江湖
- 工具
- 虚拟
- He
- 技能
- 体验
- 心灵
- 活力
- 还是
- 科技
- 巨人
- 视角
- 而且
- 只要
- 幽灵
- 开发
- 只有
- 渔民
- 捕捞
- 执法
- 就可以
- 点击
- 快递
- 社区
- 智能
- 居民
- 漫画
- 作品
- 大赛
- 参赛
- 奖金
- 枪战
- 步枪
- 活动
- 升级
- 周年
- 重点
- 更新
- 黄金
- 去了
- 大师
- 位置
- 未成年
- id
- 评测
- 罪恶
- 都市
- 一次
- 铲子
- 军用
- 对方
- 要么
- 传说
- 端午
- 永久
- 距离
- 宝宝
- 海绵
- 攻击
- 真的
- 这样
- 支付
- 加拿大
- 风险
- 成都
- 这次
- 生化
- 要塞
- 分享
- 荣耀
- 破晓
- 代号
- 动作
- 模块
- 太极
- 剧情
- 科学家
- 技术
- 事情
- 拳头
- 标准
- http
- 行业
- cn
- 地方
- 犯罪
- 大队
- 江苏
- 大区
- 国外
- 还能
- 感叹
- 不由
- 公益
- 企业
- 等级
- 指数
- 显示器
- 提供
- 接口
- 对话
- 博士
- 自治区
- 街道
- 自治州
- 小米
- 同学
- 银行
- 资产
- 招商
- 贷款
- 信用卡
- 钢琴
- 曲子
- 应用
- 出来
- 毫米
- 传奇
- 项目
- 夜大
- 受害者
- 刺激
- 内容
- 为什么
- 边缘
- 射击
- 刷新
- 报名
- 招聘
- 人员
- 昆明
- 无数
- 队友
- 向阳
- 射手
- 同时
- 风景
- 因为
- 结果
- 坦克
- 激战
- 鼠标
- 战术
- 核心
- 患者
- 治疗
- 控制
- 手工
- 步骤
- 固定
- 完成
- 弹力
- 驾驶
- 汽车
- 名字
- 修改
- 麒麟
- 那时候
- 大全
- 拍摄
- 生活
- 冰雪
- 复古
- 方式
- 学校
- 课程
- 打法
- 这种
- 宝贝
- 疯狂
- 这里
- 宝珠
- 体力
- 人士
- 判断
- 拐杖
- 地铁
- 大作
- 海南
- 建设
- 生态
- 蜘蛛
- 作弊
- 北京
- 增长
- 计划
- 老牌
- 近来
- 黑马
- 比分
- 能源
- 保险
- 条款
- 画幅
- 相机
- 传感器
- 韩国
- 创业
- 这类
- 计算机
- 或者
- 配置
- 爆破
- 老师
- 中国
- 生存
- 否则
- 毛主席
- 我党
- 国民党
- 生成
- 代码
- 文件
- 陨落
- 发售
- 正式
- 好友
- 不要
- 发送
- 添加
- 每天
- 下载
- 菲律宾
- 石头
- 泡泡
- 观战
- 不过
- 终身
- 方便
- 申请
- 销售
- 嫌疑
- 转换
- 文字
- 机器
- 传送
- 区域
- 阵容
- 认证
- 保修
- 客户
- 无线
- 产品
- 状态
- 队伍
- 精英
- 逃离
- 熟悉
- 撤离
- 设置
- 系统
- 流量
- 创新
- 发展
- 宣传
- 有没有
- 头疼
- 钻石
- 抽奖
- 随心
- 娃娃
- 表示
- 战局
- 作战
- 制作
- sb
- 一张
- 人的
- 商店
- 苹果
- 蔑视
- ??
- 美国
- 发作
- 百里
- 守约
- 注销
- 单机
- 隧道
- 断裂
- 熊猫
- 医疗费
- 结构