内容简介:开发人员一直在努力提高 Docker 的使用率和性能,命令也在不停变化。Docker 命令经常被弃用,或被替换为更新且更有效的命令,本文总结了近年来资深专家最常用的命令列表并给出部分使用方法。目前,Docker 共有 13 个管理命令和 41 个通用命令,以下是常用 Docker 命令列表:无论是在本地还是云端,我们都需要检查 Docker 版本和系统信息,可以使用以下命令找到 Docker 版本:
开发人员一直在努力提高 Docker 的使用率和性能,命令也在不停变化。Docker 命令经常被弃用,或被替换为更新且更有效的命令,本文总结了近年来资深专家最常用的命令列表并给出部分使用方法。
目前,Docker 共有 13 个管理命令和 41 个通用命令,以下是常用 Docker 命令列表:
- docker help—检查最新 Docker 可用命令;
- docker attach—将本地输入、输出、错误流附加到正在运行的容器;
- docker commit—从当前更改的容器状态创建新镜像;
- docker exec—在活动或正在运行的容器中运行命令;
- docker history—显示镜像历史记录;
- docker info—显示系统范围信息;
- docker inspect—查找有关 docker 容器和镜像的系统级信息;
- docker login—登录到本地注册表或 Docker Hub;
- docker pull—从本地注册表或 Docker Hub 中提取镜像或存储库;
- docker ps—列出容器的各种属性;
- docker restart—停止并启动容器;
- docker rm—移除容器;
- docker rmi—删除镜像;
- docker run—在隔离容器中运行命令;
- docker search—在 Docker Hub 中搜索镜像;
- docker start—启动已停止的容器;
- docker stop—停止运行容器;
- docker version—提供 docker 版本信息。
查找 Docker 版本和系统信息
无论是在本地还是云端,我们都需要检查 Docker 版本和系统信息,可以使用以下命令找到 Docker 版本:
复制代码
$ docker version Client: Version:18.03.0-ce API version:1.37 Go version: go1.9.4 Git commit:0520e24 Built: Wed Mar21 23:06:222018 OS/Arch: darwin/amd64 Experimental:false Orchestrator: swarm Server: Engine: Version:18.03.0-ce API version:1.37(minimum version1.12) Go version: go1.9.4 Git commit:0520e24 Built: Wed Mar21 23:14:322018 OS/Arch: linux/amd64 Experimental:true
另一个重要命令是 docker info:
复制代码
$ docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 18.03.0-ce Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type:true Native Overlay Diff:true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network:bridgehost ipvlan macvlannulloverlay Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog …
该命令将显示部分设备信息,比如服务器版本、存储驱动程序、内核版本、操作系统、总内存等。当尝试为当前 Docker 安装启动新资源或尝试找出系统级资源分配问题时,这些信息非常有用,这也是检查运行、停止容器数量及下载镜像数量的快速方法。
搜索下载 Docker 镜像
可以使用 docker search 命令在 Docker Hub 搜索已有镜像:
复制代码
$ docker search ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntuisa Debian-based Linux operating sys…7861 [OK] dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-serverandNoVNC190 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi…156 [OK] ansible/ubuntu14.04-ansible Ubuntu14.04LTS with ansible93 [OK] ubuntu-upstart Upstartisan event-based replacementfor th…87 [OK] neurodebian NeuroDebian provides neuroscience research s…50 [OK] …
以上对 ubuntu 的搜索显示可用镜像、描述和官方状态等信息。如果要下载 ubuntu 镜像,可以使用 docker pull 命令:
复制代码
$ docker pull ubuntu Usingdefaulttag:latest latest:Pulling from library/ubuntu 6b98dfc16071:Pull complete 4001a1209541:Pull complete 6319fc68c576:Pull complete b24603670dc3:Pull complete 97f170c87c6f:Pull complete Digest:sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d Status:Downloaded newer imagefor ubuntu:latest $
Docker 镜像
使用 docker info 命令查找拥有镜像数量:
复制代码
$ docker info Containers:0 Running:0 Paused:0 Stopped:0 Images:1 …
docker images 命令可详细列出拥有镜像:
复制代码
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 113a43faa138 2 weeks ago 81.2MB
假设下载 NGINX 镜像,可以运行 docker pull 命令:
复制代码
$docker pull nginx
如果检查 Docker 镜像,会看到如下内容:
复制代码
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 113a43faa138 2 weeks ago 81.2MB nginx latest cd5239a0906a 2 weeks ago 109MB
如果寻找 Ubuntu 16.04 版本,可使用 16.04 标签下载特定版本:
复制代码
$ docker pull ubuntu:16.04
随后,将出现两个 Ubuntu 映像版本:
复制代码
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 16.04 5e8b97a2a082 2 weeks ago 114MB ubuntu latest 113a43faa138 2 weeks ago 81.2MB nginx latest cd5239a0906a 2 weeks ago 109MB
注意:无需注册 Docker Hub 即可提取镜像。如果想将镜像推送到 Docker Hub,需要注册然后使用 docker login 命令登录:
复制代码
$ docker login--username=yourhubusername--email=youremail@company.com
运行镜像的 Docker 容器
假设想在 docker 上运行 NGINX 服务器,可运行以下命令:
复制代码
$ docker run -p 8080:80nginx
如果已用 run 命令从 Docker Hub 提取 nginx 映像创建 NGINX 容器。 -p 8080:80 会告诉 Docker 将 localhost 端口 8080 映射到 Docker 容器端口 80,应该能够从 http:// localhost:8080 访问 NGINX 服务器。
NGINX 容器已附加到命令行。如果退出命令行,容器将会停止,可使用 detach(’- d)启动 NGINX 容器,这样即使退出命令行也可继续运行。
复制代码
$ docker run -p 8080:80-d nginx
以上命令将以分离模式启动容器并返回命令行。
使用 docker ps 命令列出 Docker 容器
docker ps 命令允许查找正在运行的所有容器:
复制代码
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6162daed25da nginx "nginx -g 'daemon of…" 7 minutes ago Up7 minutes 0.0.0.0:8080->80/tcp hardcore_torvalds
如上显示容器的各种属性,可以看到是从 nginx 镜像创建并显示端口转发信息。CONTAINER ID 和 NAMES 属性需要特别提及,可以使用上述两大属性唯一标识容器。二者都可自动生成,但也可在容器创建过程中为容器命名。
创建一个名为 my_nginx 的 NGINX 容器:
复制代码
$ docker run --name my_nginx -p 8888:80-d nginx
再次列出所有 Docker 容器:
复制代码
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e7b19b6ad778 nginx "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:8888->80/tcp my_nginx 6162daed25da nginx "nginx -g 'daemon of…" 15 minutes ago Up16 minutes 0.0.0.0:8080->80/tcp hardcore_torvalds
请注意,新容器的名称为“my_nginx”。 处理大量容器时,可以使用命名约定,这可以更好得组织容器。
docker ps 命令仅显示正在运行的容器。如果对上述情况使用 docker info 命令:
复制代码
$ docker info Containers:2 Running:2 Paused:0 Stopped:0 Images:3
可以看到有两个容器正在运行,如果一个暂停或已停止,则不会仅使用 docker ps 命令查看这些容器,必须使用 all( - a)选项:
复制代码
$ docker ps -a
启动,停止,重启和杀死容器
假设要停止’my_nginx’容器,可使用 CONTAINER ID 或 NAME。
复制代码
$ docker stop my_nginx my_nginx
列出 Docker 容器:
复制代码
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6162daed25da nginx "nginx -g 'daemon of…" 27 minutes ago Up27 minutes 0.0.0.0:8080->80/tcp hardcore_torvalds $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e7b19b6ad778 nginx "nginx -g 'daemon of…" 12 minutes ago Exited (0) About a minute ago my_nginx 6162daed25da nginx "nginx -g 'daemon of…" 27 minutes ago Up27 minutes 0.0.0.0:8080->80/tcp hardcore_torvalds
如果在没有 -a 选项的情况下运行 docker ps,只显示正在运行的容器。在第二种情况下,可以看到’my_nginx’容器处于退出状态。
让我们 docker start 容器:
复制代码
$ docker start my_nginx my_nginx
检查 Docker 容器列表:
复制代码
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e7b19b6ad778 nginx "nginx -g 'daemon of…" 16 minutes ago Up29 seconds 0.0.0.0:8888->80/tcp my_nginx 6162daed25da nginx "nginx -g 'daemon of…" 30 minutes ago Up30 minutes 0.0.0.0:8080->80/tcp hardcore_torvalds
可以看到 STATUS 显示容器’my_nginx’再次被启动。
如果由于某些问题而需重启容器,则可使用 restart 命令,这比单独停止和启动容器速度更快:
复制代码
$docker restart my_nginx
可以像进程一样终止 docker 容器,比如终止 my_nginx 容器:
复制代码
$docker kill my_nginx
再次列出 Docker 容器:
复制代码
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e7b19b6ad778 nginx "nginx -g 'daemon of…" 22 minutes ago Exited (137)7 seconds ago my_nginx 6162daed25da nginx "nginx -g 'daemon of…" 36 minutes ago Up36 minutes 0.0.0.0:8080->80/tcp hardcore_torvalds
容器 my_nginx 未运行。此外,可在信息中看到一个正在运行的容器和一个已停止容器:
复制代码
$ docker info Containers:2 Running:1 Paused:0 Stopped:1 Images:3 …
Docker Exec Bash 和 Docker SSH
如果需要与 shell 进行交互以创建服务或解决问题,可以使用 docker exec 命令创建交互式 shell。比如,用 bash shell 从 ubuntu 映像启动一个容器:
复制代码
$docker run --name my_ubuntu -it ubuntu:latest bash root@a19c770b8621:/#
root @haracle#表示位于 Docker 容器的 bash shell 中,可以运行 shell 命令:
复制代码
root@a19c770b8621:/# ls bin boot dev etc homeliblib64mediamntoptprocrootrunsbinsrvsystmpusrvar root@a19c770b8621:/# pwd /
列出 Docker 容器:
复制代码
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a19c770b8621 ubuntu:latest "bash" Abouta minute ago UpAbouta minute my_ubuntu 6162daed25da nginx "nginx -g 'daemon of…" Aboutanhour ago UpAboutanhour 0.0.0.0:8080->80/tcp hardcore_torvalds
如上,my_ubuntu 正在运行。假设想将 Docker ssh 放入’my_ubuntu’容器中,可以使用 docker exec bash:
复制代码
$docker exec -it my_ubuntu bash root@a19c770b8621:/#
使用 docker exec 向容器发出命令。例如,可以直接用命令提示符在 my_ubuntu 容器上运行 ls 命令:
复制代码
$ docker exec -it my_ubuntu ls bin dev home lib64 mnt proc run srv tmp var boot etclibmediaoptrootsbinsysusr
以分离模式启动容器并使用 docker attach
以上示例用附加模式启动 ubuntu 容器,我们也可在分离模式下启动:
复制代码
$ docker run-it -d --name my_ubuntu_2 ubuntu:latest bash 75b28b7208359137b3e1dc2843387918e28b4c6c4860ef0cdeac79c205f5cbc4
验证容器是否正在运行:
复制代码
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 75b28b720835 ubuntu:latest "bash" 3 minutes ago Up3 minutes my_ubuntu_2 a19c770b8621 ubuntu:latest "bash" 15 minutes ago Up15 minutes my_ubuntu 6162daed25da nginx "nginx -g 'daemon of…" 2 hours ago Up2 hours 0.0.0.0:8080->80/tcp hardcore_torvalds
使用 docker attach 命令获取 docker exec bash-like 效果:
复制代码
$docker attach my_ubuntu_2 root@75b28b720835:/#
检查 Docker 镜像历史
Docker 社区镜像是分层创建的,可使用 Docker history 命令查看镜像创建方式。先看看有哪些镜像:
复制代码
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 16.04 5e8b97a2a082 2 weeks ago 114MB ubuntu latest 113a43faa138 2 weeks ago 81.2MB nginx latest cd5239a0906a 2 weeks ago 109MB
查看 nginx 镜像历史:
复制代码
$ docker history nginx IMAGE CREATED CREATED BY SIZE COMMENT cd5239a0906a 2 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B <missing> 2 weeks ago /bin/sh -c #(nop) STOPSIGNAL [SIGTERM] 0B <missing> 2 weeks ago /bin/sh -c #(nop) EXPOSE 80/tcp 0B <missing> 2 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx… 22B <missing> 2 weeks ago /bin/sh -c set -x && apt-getupdate && apt… 53.7MB <missing> 2 weeks ago /bin/sh -c #(nop) ENV NJS_VERSION=1.15.0.0.… 0B <missing> 2 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.15.0-… 0B <missing> 7 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B <missing> 8 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B <missing> 8 weeks ago /bin/sh -c #(nop) ADD file:ec5be7eec56a74975… 55.3MB
使用镜像历史命令查找最近更改,如果在新版本镜像中发现问题,则此命令可帮助找到原因,也可用以下命令:
复制代码
$docker imagehistorynginx
Docker 检查容器
可以使用 docker inspect 命令查找有关系统的信息,运行 docker ps 命令列出 Docker 容器:
复制代码
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6162daed25da nginx "nginx -g 'daemon of…" 2 hours ago Up2 hours 0.0.0.0:8080->80/tcp hardcore_torvalds
使用 CONTAINER ID 检查容器(也可使用容器名称):
复制代码
$ docker inspect6162daed25da [ { "Id":"6162daed25da50b98afca5f7ed8caca2289bf309b2547d87ae8674b899d604a4", "Created":"2018-06-25T05:46:37.902211302Z", "Path":"nginx", "Args": [ … … … "DriverOpts":null } } } } ]
该命令将以 JSON 格式提供大量信息,以下是查找容器 IP 地址的技巧:
复制代码
$ docker inspect6162daed25da |grep "IPAddress" "SecondaryIPAddresses":null, "IPAddress":"172.17.0.2", "IPAddress":"172.17.0.2",
使用 docker cp 将文件从本地复制到容器
再次列出 Docker 容器:
复制代码
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6162daed25da nginx "nginx -g 'daemon of…" 3 hours ago Up3 hours 0.0.0.0:8080->80/tcp hardcore_torvalds
NGINX 容器在端口 8080 上运行。因此,如果转到 http:// localhost:8080,将看到以下内容:
复制代码
"Welcome to nginx!"
如果看到此页面,则 nginx Web 服务器已成功安装并正常运行,需要进一步配置。
首先,在本地目录中创建 index.html:
复制代码
<html> <Header><title>My Website</title></header> <body> Hello world </body> </html>
使用带有 ls 的 docker exec 命令检查 NGINX 容器中具有 index.html 的文件夹:
复制代码
$ docker exec -it hardcore_torvalds ls /usr/share/nginx/html 50x.htmlindex.html
使用创建的本地文件覆盖容器 index.html 文件:
复制代码
$ docker cp index.htmlhardcore_torvalds:usr/share/nginx/html/
如果再次检查 http://localhost: 8080,应该可以看到问候语“Hello world”。
可使用 docker cp 命令在本地计算机和创建容器间移动文件,此方法可用于覆盖配置文件。
创建 Docker 镜像
如果想复制更多“Hello World”容器,必须将当前容器保存为镜像。
首先,停止容器:
复制代码
$ docker stop hardcore_torvalds
列出所有 Docker 容器:
复制代码
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 75b28b720835 ubuntu:latest "bash" Aboutanhour ago Exited (0)Aboutanhour ago my_ubuntu_2 a19c770b8621 ubuntu:latest "bash" 2 hours ago Exited (0)Aboutanhour ago my_ubuntu 6162daed25da nginx "nginx -g 'daemon of…" 3 hours ago Exited (0) 27 seconds ago hardcore_torvalds
从 STATUS 中,可以看到 NGINX’corecore_torvalds’容器已停止。使用 docker commit 命令创建新镜像:
复制代码
$ docker commit6162daed25da nginx_hello_world_template sha256:117d060587a316035ed5a776e613d9cfbeee9fbfe202c6edc9203820c7da987b
如果现在检查,将看到新镜像:
复制代码
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx_hello_world_template latest 117d060587a3 40 seconds ago 109MB ubuntu 16.04 5e8b97a2a082 2 weeks ago 114MB ubuntu latest 113a43faa138 2 weeks ago 81.2MB nginx latest cd5239a0906a 2 weeks ago 109MB
可以使用此镜像并启动新 Docker 容器,新创建容器将具有“Hello world”页面,而不是“Welcome NGINX”页面。示例如下:
复制代码
$ docker run -it -d -p 8886:80nginx_hello_world_template 4e042d76c39125471951626ba42cd609a65c73f041943298f74f4fc43dc5596a $
删除 Docker 容器和镜像
Docker 容器和镜像会占用硬盘空间,因此最好定期清理。首先停止所有容器,然后列出所有容器,使用以下 Docker 命令执行操作:
复制代码
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4e042d76c391 nginx_hello_world_template "nginx -g 'daemon of…" 2 minutes ago Exited (0)8 seconds ago boring_keldysh 75b28b720835 ubuntu:latest "bash" 2 hours ago Exited (0) About an hour ago my_ubuntu_2 a19c770b8621 ubuntu:latest "bash" 2 hours ago Exited (0) About an hour ago my_ubuntu 6162daed25da nginx "nginx -g 'daemon of…" 3 hours ago Exited (0)11 minutes ago hardcore_torvalds
如上,有 4 个处于停止状态的容器,可使用 docker rm 命令删除容器:
复制代码
$ docker rm 4e042d76c39175b28b720835 a19c770b86216162daed25da 4e042d76c391 75b28b720835 a19c770b8621 6162daed25da
可使用 NAMES 代替 CONTAINER ID,容器列表现在应该是干净的:
复制代码
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
列出 Docker 镜像:
复制代码
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx_hello_world_template latest 117d060587a3 11 minutes ago 109MB ubuntu 16.04 5e8b97a2a082 2 weeks ago 114MB ubuntu latest 113a43faa138 2 weeks ago 81.2MB nginx latest cd5239a0906a 2 weeks ago 109MB
可使用 docker rmi 命令和 IMAGE ID 删除 docker 镜像:
复制代码
$ docker rmi117d060587a35e8b97a2a082113a43faa138 cd5239a0906a
最后,Docker 镜像列表应该是干净的:
复制代码
$ docker images REPOSITORYTAGIMAGEID CREATED SIZE
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 云原生资深专家:如何选择一个最佳微服务代理架构?
- 测试架构师10年经验分享:测试小工到资深专家必备这5项技能!
- 资深网易技术专家总结的面试高频知识点!
- 程序员如何自我学习?阿里资深技术专家这样做
- 如何衡量研发效能?阿里资深技术专家提出了5组指标
- 读书是一种建构,联接了我们和世界 | 资深算法专家读书笔记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Orange'S:一个操作系统的实现
于渊 / 电子工业出版社 / 2009-6 / 69.00元
《Orange S:一个操作系统的实现》从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程。书中不仅关注代码本身,同时关注完成这些代码的思路和过程。本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图。读者可以根据路线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感。书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不......一起来看看 《Orange'S:一个操作系统的实现》 这本书的介绍吧!