【云原生】Docker 常用命令汇总


Docker 优势

  1. 快速搭建兼容性测试环境

从 Docker 的镜像与容器技术特点可以预见,当被测应用要求在各类 Web 服务器、中间件、数据库的组合环境中得到充分验证时,可以快速地利用基础 Docker 镜像创建各类容器,装载相应的技术组件并快速启动运行,测试人员省去了大量花在测试环境搭建上的时间。

  1. 快速搭建复杂分布式测试环境

Docker 的轻量虚拟化特点决定了它可以在一台机器上(甚至是测试人员的一台笔记本电脑上)轻松搭建出成百上千个分布式节点的容器环境,从而模拟以前需要耗费大量时间和机器资源才能搭建出来的分布式复杂测试环境。

  1. 持续集成

Docker 可以快速创建和撤销容器,在持续集成的环境中,可以频繁和快速地进行部署和验证工作。

docker 常用命令

总的来说分为以下几种:

• 容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
• 容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
• 容器 rootfs 命令 — docker [commit|cp|diff]
• 镜像仓库 — docker [login|pull|push|search]
• 本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
• 其他命令 — docker [info|version]

1. 列出机器上的镜像(images)

docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS 说明:
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
–digests :显示镜像的摘要信息;
-f :显示满足条件的镜像;
–format :指定返回值的模板文件;
–no-trunc :显示完整的镜像信息;
-q :只显示镜像 ID。

其中我们可以根据 repository 来判断这个镜像是来自哪个服务器,如果没有 / 则表示官方镜像,类似于 username/repos_name 表示 Github 的个人公共库,类似于 regsistory.example.com:5000/repos_name 则表示的是私服。

2. 在 docker index 中搜索 image(search)

Usage: docker search TERM

搜索的范围是官方镜像和所有个人公共镜像。

3. 从 docker registry server 中下拉 image 或 repository(pull)

Usage: docker pull [OPTIONS] NAME[:TAG]

# docker pull centos    #只会下载tag为latest的镜像
# docker pull centos:centos6

当然也可以从某个人的公共仓库(包括自己是私人仓库)拉取,形如

docker pull username/repository<:tag_name> :
# docker pull seanlook/centos:centos6

如果你没有网络,或者从其他私服获取镜像,形如

docker pull registry.domain.com:5000/repos:<tag_name>
# docker pull dl.dockerpool.com:5000/mongo:latest

4. 推送一个 image 或 repository 到 registry(push)

与上面的 pull 对应,可以推送到 Docker Hub 的 Public、Private 以及私服,但不能推送到 Top Level Repository。

# docker push seanlook/mongo
# docker push registry.tp-link.net:5000/mongo:2014-10-27

registry.tp-link.NET 也可以写成 IP,172.29.88.222。
在 repository 不存在的情况下,命令行下 push 上去的会为我们创建为私有库,然而通过浏览器创建的默认为公共库。

5. 从 image 启动一个 container(run)

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS 说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器 ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-u:指定容器的用户

-P:指定容器暴露的端口

-v: 给容器挂载存储卷,挂载到容器的某个目录

–name=“nginx-lb”: 为容器指定一个名称;
–dns 8.8.8.8: 指定容器使用的 DNS 服务器,默认和宿主一致;
–dns-search example.com: 指定容器 DNS 搜索域名,默认和宿主一致;
-h “mars”: 指定容器的 hostname;
-e username=“ritchie”: 设置环境变量;
–env-file=[]: 从指定文件读入环境变量;
–cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定 CPU 运行;
-m :设置容器使用内存最大值;
–net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/Container: 四种类型;
–link=[]: 添加链接到另一个容器;
–expose=[]: 开放一个端口或一组端口;

6. 将一个 container 固化为一个新的 image(commit)

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS 说明:
-a :提交的镜像作者;
-c :使用 Dockerfile 指令来创建镜像;
-m :提交时的说明文字;
-p :在 commit 时,将容器暂停。

请注意,当你反复去 commit 一个容器的时候,每次都会得到一个新的 IMAGE ID,假如后面的 repository:tag 没有变,通过 docker images 可以看到,之前提交的那份镜像的 repository:tag 就会变成:,所以尽量避免反复提交。
虽然产生了一个新的 image,并且你可以看到大小有 100MB,但从 commit 过程很快就可以知道实际上它并没有独立占用 100MB 的硬盘空间,而只是在旧镜像的基础上修改,它们共享大部分公共的 “片”。

7. 开启/停止/重启 container(start/stop/restart)

容器可以通过 run 新建一个来运行,也可以重新 start 已经停止的 container,但 start 不能够再指定容器启动时运行的指令,因为 docker 只能有一个前台进程。
容器 stop(或 Ctrl+D)时,会在保存当前容器的状态之后退出,下次 start 时保有上次关闭时更改。而且每次进入 attach 进去的界面是一样的,与第一次 run 启动或 commit 提交的时刻相同。

docker stop $CONTAINER_ID
docker restart $CONTAINER_ID

8. 连接到正在运行中的 container(attach)

attach 是可以带上–sig-proxy=false 来确保 CTRL-D 或 CTRL-C 不会关闭容器。

# docker attach --sig-proxy=false $CONTAINER_ID

9. 查看 image 或 container 的底层信息(inspect)

inspect 的对象可以是 image、运行中的 container 和停止的 container。
查看容器的内部 IP

# docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID
172.17.42.35

10. 删除一个或多个 container、image(rm、rmi)

你可能在使用过程中会 build 或 commit 许多镜像,无用的镜像需要删除。但删除这些镜像是有一些条件的:
• 同一个 IMAGE ID 可能会有多个 TAG(可能还在不同的仓库),首先你要根据这些 image names 来删除标签,当删除最后一个 tag 的时候就会自动删除镜像;
• 承上,如果要删除的多个 IMAGE NAME 在同一个 REPOSITORY,可以通过 docker rmi 来同时删除剩下的 TAG;若在不同 Repo 则还是需要手动逐个删除 TAG;
• 还存在由这个镜像启动的 container 时(即便已经停止),也无法删除镜像;

删除容器

docker rm <container_id/contaner_name>

• -f 选项用来强制删除
• --no-prune 选项会保留被删除镜像中未打标签的父镜像。

注意:在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器(哪怕是已经停止的容器),否则无法删除该镜像。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值