前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker常用命令,值得收藏!

Docker常用命令,值得收藏!

作者头像
网络技术联盟站
发布2023-03-13 21:24:41
3210
发布2023-03-13 21:24:41
举报
1. 操作容器

run

代码语言:javascript
复制
$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

使用指定的镜像来运行容器,并可选地在容器中运行指定的命令。

分离模式:通过 -d 选项指定;容器会在任务(进程)结束时退出。 前台模式:可以将控制台连接到容器中进程的标准输入、输出、错误;通过 -t 选项可以为其分配一个伪终端;通过 -i 选项可以保持标准输入处于打开状态。

--rm 选项能够在容器退出时自动删除容器。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker run -it --rm ubuntu:latest /bin/bash
root@2258471ee542:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@2258471ee542:/# exit
exit
[ming@localhost ~]$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ps

代码语言:javascript
复制
$ docker ps [OPTIONS]

罗列容器。

-a 选项可以列出所有的容器。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker ps -a
CONTAINER ID   IMAGE           COMMAND    CREATED         STATUS                     PORTS     NAMES
83d375a4271d   ubuntu:latest   "top -b"   3 minutes ago   Exited (0) 3 minutes ago             stupefied_sammet

inspect

代码语言:javascript
复制
 docker inspect [OPTIONS] CONTAINER [CONTAINER...]

查看容器的详细信息。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker inspect 1f749a6ec815
[
    {
        "Id": "1f749a6ec815b28cef0e94d1ad654c3240efd33d887fed563b32776724df9145",
        "Created": "2021-10-06T03:34:57.910631294Z",
        ...
        "State": {
            "Status": "running",
            ...
            "Pid": 5512,
            "ExitCode": 0,
            "Error": "",
            ...
        },
        "Image": "sha256:597ce1600cf4ac5f449b66e75e840657bb53864434d6bd82f00b172544c32ee2",
        ...
        "LogPath": "/var/lib/docker/containers/1f749a6ec815b28cef0e94d1ad654c3240efd33d887fed563b32776724df9145/1f749a6ec815b28cef0e94d1ad654c3240efd33d887fed563b32776724df9145-json.log",
        "Name": "/hungry_chandrasekhar",
        ...
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/bacb628d91b4725954c6371f1b5abb58047cc50abd01db2db3c55d0fd76756de-init/diff:/var/lib/docker/overlay2/b48052cfd14e2413218757fb03e0997a600912f9e29dc45db045c8d214fdf026/diff",
                "MergedDir": "/var/lib/docker/overlay2/bacb628d91b4725954c6371f1b5abb58047cc50abd01db2db3c55d0fd76756de/merged",
                "UpperDir": "/var/lib/docker/overlay2/bacb628d91b4725954c6371f1b5abb58047cc50abd01db2db3c55d0fd76756de/diff",
                "WorkDir": "/var/lib/docker/overlay2/bacb628d91b4725954c6371f1b5abb58047cc50abd01db2db3c55d0fd76756de/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "1f749a6ec815",
            ...
            "Cmd": [
                "top",
                "-b"
            ],
            "Image": "ubuntu:latest",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            ...
            "Networks": {
                "bridge": {
                    ...
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    ...
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

top

代码语言:javascript
复制
$ docker top CONTAINER [ps OPTIONS]

查看容器中运行的进程。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker top 1f749a6ec815
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                5512                5492                0                   23:46               ?                   00:00:00            top -b

stats

代码语言:javascript
复制
$ docker stats [OPTIONS] [CONTAINER...]

持续输出容器的资源使用情况。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker stats
CONTAINER ID   NAME             CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O   PIDS
c8dac7e11479   boring_shannon   0.06%     440KiB / 3.701GiB   0.01%     737B / 0B   0B / 0B     1
^C

port

代码语言:javascript
复制
$ docker port CONTAINER [PRIVATE_PORT[/PROTO]]

查看容器的端口映射。

代码语言:javascript
复制
# 将容器的 80/tcp 端口映射到主机的 8080 端口
[ming@localhost ~]$ sudo docker run -d -p 8080:80/tcp ubuntu:latest top -b
c8dac7e11479b8da9c467054a24da8c52ff28f2b687b501408f1d31fa3c7af98

[ming@localhost ~]$ sudo docker port c8dac7e1
80/tcp -> 0.0.0.0:8080
80/tcp -> :::8080

[ming@localhost ~]$ sudo docker port c8dac7e1 80/tcp
0.0.0.0:8080
:::8080

logs

代码语言:javascript
复制
$ docker logs [OPTIONS] CONTAINER

查看容器的日志(标准输出、错误的内容)。

-f 选项可以持续输出容器的日志。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker logs 1f749a6ec815
top - 03:34:58 up 25 min,  0 users,  load average: 0.14, 0.08, 0.20
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
%Cpu(s):  6.7 us, 13.3 sy,  0.0 ni, 80.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3789.5 total,   1045.0 free,    852.5 used,   1891.9 buff/cache
MiB Swap:   3968.0 total,   3968.0 free,      0.0 used.   2669.9 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    1 root      20   0    5960   1716   1296 R   0.0   0.0   0:00.03 top
...

attach

代码语言:javascript
复制
$ docker attach [OPTIONS] CONTAINER

将本地终端的标准输入、输出、错误连接到容器。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker run -d ubuntu:latest top -b
83d375a4271d6fb4d340925d604771b408e12f00a40d639b7a6020a87291ffb8

[ming@localhost ~]$ sudo docker attach 83d375a4271d6fb4d340925d604771b408e12f00a40d639b7a6020a87291ffb8
top - 03:24:00 up 14 min,  0 users,  load average: 0.11, 0.34, 0.36
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.7 us,  3.4 sy,  0.0 ni, 88.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3789.5 total,   1034.7 free,    862.9 used,   1891.9 buff/cache
MiB Swap:   3968.0 total,   3968.0 free,      0.0 used.   2659.6 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    1 root      20   0    5960   1712   1296 R   0.0   0.0   0:00.04 top
...

exec

代码语言:javascript
复制
$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

在运行的容器中执行指定的命令。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker run -d ubuntu:latest top -b
1f749a6ec815b28cef0e94d1ad654c3240efd33d887fed563b32776724df9145

[ming@localhost ~]$ sudo docker exec -it 1f749a6e /bin/bash
root@1f749a6ec815:/# ps -elf
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root         1     0  0  80   0 -  1490 poll_s 03:34 ?        00:00:00 top -b
4 S root         7     0  0  80   0 -  1025 do_wai 03:35 pts/0    00:00:00 /bin/bash
0 R root        17     7  0  80   0 -  1472 -      03:35 pts/0    00:00:00 ps -elf

pause, unpause

代码语言:javascript
复制
$ docker pause CONTAINER [CONTAINER...]

使用 freezer cgroup 挂起容器中的所有进程(进程对挂起操作是无感知的)。

代码语言:javascript
复制
$ docker unpause CONTAINER [CONTAINER...]

恢复容器中挂起的进程。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker pause 1f749a6ec815
1f749a6ec815
[ming@localhost ~]$ sudo docker ps -a
CONTAINER ID   IMAGE           COMMAND    CREATED         STATUS                  PORTS     NAMES
1f749a6ec815   ubuntu:latest   "top -b"   6 minutes ago   Up 6 minutes (Paused)             hungry_chandrasekhar

[ming@localhost ~]$ sudo docker unpause 1f749a6ec815
1f749a6ec815
[ming@localhost ~]$ sudo docker ps
CONTAINER ID   IMAGE           COMMAND    CREATED         STATUS         PORTS     NAMES
1f749a6ec815   ubuntu:latest   "top -b"   6 minutes ago   Up 6 minutes             hungry_chandrasekhar

stop

代码语言:javascript
复制
$ docker stop [OPTIONS] CONTAINER [CONTAINER...]

停止容器,终止容器中的进程:首先发送 SIGTERM 信号给容器中的进程,一段时间之后发送 SIGKILL 信号。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker stop 1f749a6ec815
1f749a6ec815
[ming@localhost ~]$ sudo docker ps -a
CONTAINER ID   IMAGE           COMMAND    CREATED         STATUS                     PORTS     NAMES
1f749a6ec815   ubuntu:latest   "top -b"   9 minutes ago   Exited (0) 2 seconds ago             hungry_chandrasekhar

start

代码语言:javascript
复制
$ docker start [OPTIONS] CONTAINER [CONTAINER...]

启动停止的容器(还是运行之前给定的命令)。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker start 1f749a6ec815
1f749a6ec815
[ming@localhost ~]$ sudo docker ps
CONTAINER ID   IMAGE           COMMAND    CREATED          STATUS         PORTS     NAMES
1f749a6ec815   ubuntu:latest   "top -b"   11 minutes ago   Up 2 seconds             hungry_chandrasekhar

rm

代码语言:javascript
复制
$ docker rm [OPTIONS] CONTAINER [CONTAINER...]

删除指定的容器。

--force 选项可以强制性删除运行的容器。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker rm 83d375a4271d
83d375a4271d

cp

代码语言:javascript
复制
$ docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
$ docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

在容器和主机之间拷贝文件、目录。

代码语言:javascript
复制
[ming@localhost ~]$ echo "hello" > hello.txt
[ming@localhost ~]$ sudo docker cp hello.txt 1f749a6ec815:/root/
[ming@localhost ~]$ sudo docker exec 1f749a6ec815 cat /root/hello.txt
hello
代码语言:javascript
复制
[ming@localhost ~]$ sudo docker cp 1f749a6ec815:/root/hello.txt .
[ming@localhost ~]$ cat hello.txt 
hello

export

代码语言:javascript
复制
$ docker export [OPTIONS] CONTAINER

将容器的文件系统(不包括卷的内容)导出为 tar 文件,后续可通过 docker import 来加载镜像。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker export -o ubuntu2.tar 1f749a6ec815
[ming@localhost ~]$ ls -lh ubuntu2.tar 
-rw-------. 1 root root 72M Oct  6 03:00 ubuntu2.tar

2. 操作镜像

images

代码语言:javascript
复制
$ docker images [OPTIONS] [REPOSITORY[:TAG]]

查看所有的顶层镜像。

-a 选项可以查看所有的镜像。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       latest    597ce1600cf4   5 days ago   72.8MB

search

代码语言:javascript
复制
$ docker search [OPTIONS] TERM

搜索 docker hub。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker search centos
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                            The official build of CentOS.                   6786      [OK]       
ansible/centos7-ansible           Ansible on Centos7                              135                  [OK]
consol/centos-xfce-vnc            Centos container with "headless" VNC session…   130                  [OK]
jdeathe/centos-ssh                OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   120                  [OK]
...

pull

代码语言:javascript
复制
$ docker pull [OPTIONS] NAME[:TAG|@DIGEST]

拉取镜像。

代码语言:javascript
复制
$ sudo docker pull debian:jessie

tag

代码语言:javascript
复制
$ docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

基于源镜像创建一个包含 tag 的镜像。

代码语言:javascript
复制
$ sudo docker tag 0e5574283393 fedora/httpd:version1.0

push

代码语言:javascript
复制
$ docker push [OPTIONS] NAME[:TAG]

推送镜像。

代码语言:javascript
复制
$ sudo docker image tag rhel-httpd:latest registry-host:5000/myadmin/rhel-httpd:latest
$ sudo docker image push registry-host:5000/myadmin/rhel-httpd:latest

import

代码语言:javascript
复制
$ docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

从 tar 文件中加载镜像。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker import ubuntu2.tar ubuntu2:v1
sha256:649f9cf75008bc2bf84cfa97a008883530b9384029a53e3d7f5262556e07fcae

[ming@localhost ~]$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
ubuntu2      v1        649f9cf75008   6 seconds ago   72.8MB
ubuntu       latest    597ce1600cf4   5 days ago      72.8MB

save

代码语言:javascript
复制
$ docker save [OPTIONS] IMAGE [IMAGE...]

保存镜像为 tar 文件,后续可通过 docker load 来加载。

可通过 -o 选项将镜像保存至指定的文件,默认输出到标准输出。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker save ubuntu:latest | gzip > ubuntu3.tar.gz
[ming@localhost ~]$ ls -hl ubuntu3.tar.gz 
-rw-rw-r--. 1 ming ming 27M Oct  6 03:17 ubuntu3.tar.gz

load

代码语言:javascript
复制
$ docker load [OPTIONS]

从标准输入或 tar 文件中加载镜像。

-i 选项指定从 tar 文件中加载镜像。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker load -i ubuntu3.tar.gz 
Loaded image: ubuntu:latest

rmi

代码语言:javascript
复制
$ docker rmi [OPTIONS] IMAGE [IMAGE...]

删除本地镜像。如果 IMAGE 包含了 tag,且该镜像具有多个 tags,则此命令只是移除该 tag,而不会删除镜像。

-f 选项可强制删除运行容器所用的镜像。

代码语言:javascript
复制
[ming@localhost ~]$ sudo docker rmi ubuntu2:v1
Untagged: ubuntu2:v1
Deleted: sha256:649f9cf75008bc2bf84cfa97a008883530b9384029a53e3d7f5262556e07fcae
Deleted: sha256:d01576ff475bf2c2cac6231b7c3e0c4b977b463238d23fdd70bceb911c3e1b04
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络技术联盟站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • run
  • ps
  • inspect
  • top
  • stats
  • port
  • logs
  • attach
  • exec
  • pause, unpause
  • stop
  • start
  • rm
  • cp
  • export
  • 2. 操作镜像
    • images
      • search
        • pull
          • tag
            • push
              • import
                • save
                  • load
                    • rmi
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档