docker常用命令

Docker(https://www.docker.com/)是一个不断发展的系统,开发人员主动致力于提高使用率和性能。所以命令总是在变化。Docker命令经常被弃用并替换为新的或更有效的命令。你可以使用help选项检查Docker安装上的最新可用命令:

$ docker --help

要检查特定命令的选项,可以使用该命令的help选项。例如,要检查docker run命令选项,可以使用以下命令:

$ docker run --help

常用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版本:

$ docker version

Client:
Version: 18.03.0-ce
API version: 1.37
Go version: go1.9.4
Git commit: 0520e24
Built: Wed Mar 21 23:06:22 2018
OS/Arch: darwin/amd64
Experimental: false
Orchestrator: swarm

Server:
Engine:
Version: 18.03.0-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.4
Git commit: 0520e24
Built: Wed Mar 21 23:14:32 2018
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: bridge host ipvlan macvlan null overlay
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 Ubuntu is a Debian-based Linux operating sys… 7861 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 190 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 156 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 93 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 87 [OK]
neurodebian NeuroDebian provides neuroscience research s… 50 [OK]

…

上面的搜索 ubuntu 显示了可用的镜像及其描述,官方状态等信息。下载Ubuntu镜像,你可以使用以下docker pull 命令:

$ docker pull ubuntu

Using default tag: 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 image for 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

使用16.04标签下载Ubuntu特定版本:

$ 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:80 nginx

你已使用run命令从之前从Docker Hub中提取的nginx镜像创建NGINX容器。该'-p 8080:80'告诉Docker到localhost的8080端口映射到Docker容器的80端口,你应该能够访问你NGINX服务器http://localhost:8080

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   Up 7 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       Up 16 minutes       0.0.0.0:8080->80/tcp   hardcore_torvalds

docker ps 命令仅显示正在运行的容器。如果你docker info 对上述情况使用该 命令:

$ docker info

Containers: 2
Running: 2
Paused: 0
Stopped: 0
Images: 3
…

你可以看到有2个容器正在运行。如果你有一个暂停或已停止的容器,必须使用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      Up 27 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      Up 27 minutes                   0.0.0.0:8080->80/tcp   hardcore_torvalds

如果docker ps 没有 -a 选项运行 ,它只显示正在运行的容器。在第二种情况下,你可以看到*‘my_nginx’*容器处于退出状态。

启动容器:

$ 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      Up 29 seconds       0.0.0.0:8888->80/tcp   my_nginx
6162daed25da        nginx               "nginx -g 'daemon of…"   30 minutes ago      Up 30 minutes       0.0.0.0:8080->80/tcp   hardcore_torvalds

你可以看到STATUS显示容器*‘my_nginx’*再次启动。

如果由于某些问题而要停止并启动容器,则可以使用restart命令。它比单独停止和启动容器更快:

$ docker restart my_nginx

你可以像进程一样终止docker容器。让我们kill*‘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      Up 36 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进入Container

如果需要与shell进行交互以创建服务或解决问题,可以使用docker exec命令创建交互式shell。比如,用bash shell从ubuntu镜像启动一个容器:

$ docker run --name my_ubuntu -it ubuntu:latest bash

root@a19c770b8621:/#

root@hash# 意味着你位于Docker容器的bash shell中。你可以运行shell命令:

root@a19c770b8621:/# ls

bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@a19c770b8621:/# pwd

/

列出Docker容器:

$ docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                  NAMES
a19c770b8621        ubuntu:latest       "bash"                   About a minute ago   Up About a minute                          my_ubuntu
6162daed25da        nginx               "nginx -g 'daemon of…"   About an hour ago    Up About an hour    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 向容器发出命令。例如,你可以直接从命令提示符ls 在*“my_ubuntu”docker*容器上运行该 命令:

$ docker exec -it my_ubuntu ls

bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr

以分离模式启动容器并使用 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       Up 3 minutes                               my_ubuntu_2
a19c770b8621        ubuntu:latest       "bash"                   15 minutes ago      Up 15 minutes                              my_ubuntu
6162daed25da        nginx               "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          0.0.0.0:8080->80/tcp   hardcore_torvalds

使用该 docker attach命令获得 docker exec 类似bash的效果:

$ docker attach my_ubuntu_2

root@75b28b720835:/#

检查Docker镜像的历史

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-get update  && 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 image history nginx

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         Up 2 hours          0.0.0.0:8080->80/tcp   hardcore_torvalds

用CONTAINER ID来检查容器(你也可以使用容器名称):

$ docker inspect 6162daed25da

[
{
"Id": "6162daed25da50b98afca5f7ed8caca2289bf309b2547d87ae8674b899d604a4",
"Created": "2018-06-25T05:46:37.902211302Z",
"Path": "nginx",
"Args": [

…
…
…

"DriverOpts": null
}
}
}
}
]

该命令将以JSON格式提供大量信息。以下是查找容器IP地址的技巧:

$ docker inspect 6162daed25da | 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         Up 3 hours          0.0.0.0:8080->80/tcp   hardcore_torvalds

NGINX容器在端口8080上运行。因此,如果你去http://localhost:8080,你会看到以下内容:

“欢迎来到nginx!”

如果你看到此页面,则nginx Web服务器已成功安装并正常运行。需要进一步配置。有关在线文档和支持,请参阅nginx.org

在本地目录中创建index.html:

<html>
<Header><title>My Website</title></header>
<body>
Hello world
</body>
</html>

使用docker exec带有 ls 命令 检查NGINX容器中具有index.html文件的文件夹 :

$ docker exec -it hardcore_torvalds ls /usr/share/nginx/html

50x.html index.html

用你创建的本地文件覆盖容器的index.html文件:

$ docker cp index.html hardcore_torvalds:usr/share/nginx/html/

现在,如果http://localhost:8080再次检查,应该看到问候语*“Hello world”*。

可以使用该 docker cp 命令在本地计算机和你创建的容器之间移动文件。此方法可用于覆盖配置文件或其他文件。

创建自己的Docker镜像

假设你要复制更多的*“Hello World”容器。必须将当前“Hello World”*容器保存为镜像。

首先,停止容器:

$ docker stop hardcore_torvalds

现在列出所有Docker容器:

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
75b28b720835        ubuntu:latest       "bash"                   About an hour 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) 27 seconds ago                          hardcore_torvalds

从STATUS中,你可以看到NGINX’corecore_torvalds *’*容器已停止。使用 docker commit命令创建新镜像:

$ docker commit 6162daed25da 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:80 nginx_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 4e042d76c391 75b28b720835 a19c770b8621 6162daed25da

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 命令和镜像ID 删除docker镜像 :

$ docker rmi 117d060587a3 5e8b97a2a082 113a43faa138 cd5239a0906a

现在你的Docker镜像列表应该是干净的:

$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wufucks

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值