docker命令总结

1.镜像管理

1.1 镜像仓库

1.1.1 login

  • 作用:登陆镜像仓库

  • 语法

# docker login | loginout [-u xxx -p 密码 ]

默认Docker Hub

1.1.2 pull

  • 作用:拉取镜像

  • 语法

# docker pull 镜像名[:标签]
  • 参数:

-a 拉取所有tagged镜像

–disable-content-trust,忽略镜像校验,默认校验

  • 示例:

下载java最新镜像

# docker pull java

下载java所有镜像

# docker pull -a java

1.1.3 push

  • 作用:上传镜像

  • 语法

# docker push 参数 镜像名:[标签]
  • 参数

–disable-content-trust,忽略镜像校验,默认校验

  • 示例
# docker push myapache:v1

1.1.4 search

  • 作用:查找镜像

  • 语法

# docker search 服务名
  • 参数:

–automated:只列出自动化安装的镜像

–no-trunc:显示完整镜像描述

-s:列出收藏数不小于某值的镜像

  • 示例:
# docker search -s 10 java

1.2 本地镜像操作

1.2.1 image

  • 作用:列出本地镜像
  • 语法:
# docker images
  • 参数

-a,列出本地所有镜像(不加过滤掉中间层镜像)
-f,显示满足条件的镜像
–format,指定返回值的模板文件
-q,只显示镜像ID

  • 示例
# docker images # docker images httpd

1.2.2 rmi

  • 作用:删除镜像
  • 语法:
# docker rmi 镜像名:标记
# docker rmi 唯一标识(不用写全)
  • 参数

-f ,强制删除
–no-prune,不移除该镜像的过程镜像

  • 示例:
# docker rmi -f runoob/ubantu:v4

1.2.3 tag

  • 作用:修改镜像名

  • 语法:

# docker tag 原名:标记 新名:标记

1.2.4 build

  • 作用:使用Dockerfile创建镜像

  • 语法:

# doker build 参数 路径|url
  • 参数:

–build-arg=[] :设置镜像创建时的变量;

–cpu-shares :设置 cpu 使用权重;

–cpu-period :限制 CPU CFS周期;

–cpu-quota :限制 CPU CFS配额;–cpuset-cpus :指定使用的CPU id;

–cpuset-mems :指定使用的内存 id;

–disable-content-trust :忽略校验,默认开启;

-f :指定要使用的Dockerfile路径;

–force-rm :设置镜像过程中删除中间容器;

–isolation :使用容器隔离技术;

–label=[] :设置镜像使用的元数据;

-m :设置内存最大值;

–memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;

–no-cache :创建镜像的过程不使用缓存;

–pull :尝试去更新镜像的新版本;

-q :安静模式,成功后只输出镜像ID;

–rm :设置镜像成功后删除中间容器;

–shm-size :设置/dev/shm的大小,默认值是64M;

–ulimit :Ulimit配置。

  • 示例
# docker build -t tomcat:v1 -f tomcat-Dokcerfile .

1.2.5 save 和 load

  • 作用:

save:将指定镜像加载到文件

load:从文件中加载镜像

  • 语法:
# docker save -o 文件名 镜像名
# docker load -i 文件名
  • 示例
# docker save -o tomcat.tar.gz  docker.io/tomcat 
# docker load -i tomcat.tar.gz 

1.2.6 export 和 inport

  • 作用:

export:将容器保存为tar文件

import:将export的tar文件导入为镜像

2)语法

# docker export -o 指定文件名 容器名
# docker import 文件名 要导出的镜像名
  • 示例:
# docker export -o /tmp/nginx.tar 59eabc2614ef 
# docker import nginx.tar nginx:v01

1.2.7 history

  • 作用:查看指定镜像的创建历史
  • 语法:
# docker history 参数 镜像名
  • 参数:

-H :以可读的格式打印镜像大小和日期,默认为true;

–no-trunc :显示完整的提交记录;

-q :仅列出提交记录ID。

2. 容器管理

2.1 生命周期管理

2.1.2 run

  • 语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • 参数
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的高端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--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=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷
  • –link=[ ]
    1)创建一个mysql-server 容器
docker run --name=mysql_server -d -P mysql_server

2)创建一个客户端,用 --link 链接server

docker run --name=mysql_client1 --link=mysql_server:db -t -i mysql_client /usr/bin/mysql -h db -u root -pletmein 

说明:将mysql_server定义为db,在后边命令里使用(-h db )

  • 简单示例

docker run --name mynginx -d nginx:latest

docker run -P -d nginx:latest

docker run -p 80:80 -v /data:/data -d nginx:latest

#绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

docker run -it nginx:latest /bin/bash 
  • 执行一个循环保证容器启动
docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1;done"

2.1.3 start/stop/restart

2.1.4 kill

docker kill [OPTIONS] CONTAINER [CONTAINER...]
docker kill -s KILL mynginx

2.1.5 rm

  • 语法
docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
  • 参数
-f :通过 SIGKILL 信号强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。
  • 实例
# 强制删除容器 db01、db02:
docker rm -f db01 db02

#移除容器 nginx01 对容器 db01 的连接,连接名 db:
docker rm -l db  nginx01

#删除容器 nginx01, 并删除容器挂载的数据卷:
docker rm -v nginx01

#删除所有已经停止的容器:
docker rm $(docker ps -a -q)

2.1.6 pause/unpause

  • 作用
    docker pause :暂停容器中所有的进程。
    docker unpause :恢复容器中所有的进程。

  • 语法

docker pause [OPTIONS] CONTAINER [CONTAINER...]
docker unpause [OPTIONS] CONTAINER [CONTAINER...]
  • 实例
#暂停数据库容器db01提供服务。
docker pause db01

#恢复数据库容器db01提供服务。
docker unpause db01

2.1.7 create

  • 作用
    docker create :创建一个新的容器但不启动它
    用法同 docker run

  • 语法

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
  • 参数
    同run

  • 实例
    使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob

docker create  --name myrunoob  nginx:latest 

2.1.8 exec

  • 语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • 参数
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
  • 实例
#在容器 mynginx 中以交互模式执行容器内 /root/runoob.sh 脚本:
docker exec -it mynginx /bin/sh /root/runoob.sh
#在容器 mynginx 中开启一个交互模式的终端:
docker exec -i -t  mynginx /bin/bash

2.2 容器操作

2.2.1 ps

  • 语法
docker ps [OPTIONS]
  • OPTIONS
-a :显示所有的容器,包括未运行的。

-f :根据条件过滤显示的内容。

--format :指定返回值的模板文件。

-l :显示最近创建的容器。

-n :列出最近创建的n个容器。

--no-trunc :不截断输出。

-q :静默模式,只显示容器编号。

-s :显示总的文件大小。
  • 容器的7种状态
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
  • 示例
    列出最近创建的5个容器信息。
runoob@runoob:~$ docker ps -n 5
CONTAINER ID        IMAGE               COMMAND                   CREATED           
09b93464c2f7        nginx:latest        "nginx -g 'daemon off"    2 days ago   ...     
b8573233d675        nginx:latest        "/bin/bash"               2 days ago   ...     
b1a0703e41e7        nginx:latest        "nginx -g 'daemon off"    2 days ago   ...    
f46fb1dec520        5c6e1090e771        "/bin/sh -c 'set -x \t"   2 days ago   ...   
a63b4a5597de        860c279d2fec        "bash"                    2 days ago   ...

列出所有创建的容器ID。

runoob@runoob:~$ docker ps -a -q
09b93464c2f7
b8573233d675
b1a0703e41e7
f46fb1dec520
a63b4a5597de
6a4aa42e947b
...

2.2.2 stats

  • 语法
docker stats [OPTIONS] [CONTAINER...]
  • 选项
    –all, -a

    –no-stream 只显示第一次取到的数据,默认一直显示

  • 常用显示

[root@das-meeting-16 kong]# docker stats --no-stream
CONTAINER ID   NAME	     CPU %    MEM USAGE / LIMIT    MEM %    NET I/O         BLOCK I/O        PIDS
e3b762d3fd0a kong_kong_1 0.24%	  416.2MiB / 15.5GiB   2.62%  729kB / 767kB    1.36MB / 49.2kB     9
  • 格式化输出
docker stats --no-stream --format \
"table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

所有占位符如下:

.Container 根据用户指定的名称显示容器的名称或 ID。
.Name 容器名称。
.ID 容器 ID。
.CPUPerc CPU 使用率。
.MemUsage 内存使用量。
.NetIO 网络 I/O。
.BlockIO 磁盘 I/O。
.MemPerc 内存使用率。
.PIDs PID 号。

2.2.3 inspect

2.2.3.1 基本使用

  • 作用
    获取容器/镜像的元数据。

  • 语法

docker inspect [OPTIONS] NAME|ID [NAME|ID...]
  • OPTIONS说明:
-f :查看容器某一项的信息
-s :显示总的文件大小。
--type :为指定类型返回JSON。
  • 示例1
[root@das-meeting-16 ~]# docker inspect iot-apigw
[
    {
        "Id": "fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89",
        "Created": "2020-04-17T09:45:47.830765333Z",
        "Path": "/svc.apigw",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 120119,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-05-06T12:43:10.370184639Z",
            "FinishedAt": "2020-05-06T12:42:53.282001566Z"
        },
        "Image": "sha256:32aa9934fae627c8bbfe1dc1218f52b19476ff9a66b29514e45d471ab554d781",
        "ResolvConfPath": "/data/docker/containers/fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89/resolv.conf",
        "HostnamePath": "/data/docker/containers/fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89/hostname",
        "HostsPath": "/data/docker/containers/fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89/hosts",
        "LogPath": "/data/docker/containers/fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89/fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89-json.log",
        "Name": "/iot-apigw",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/data/dast/iot/prd.conf:/prd.conf:rw",
                "/data/dast/iot/logs:/logs:rw",
                "/data/dast/iot/keys:/etc/iot:rw",
                "/data/dast/iot/svc.apigw.prd.conf:/svc.apigw.prd.conf:rw",
                "/etc/localtime:/etc/localtime:rw"
            ],

如上,可以输出容器的各种信息包括:

docker-compose.yaml中定义的所有信息,甚至hots、hostname文件在宿主机中的位置

2.2.3.2 查看容器某一项信息

  • 查看某一项信息:

[root@das-meeting-16 ~]# docker inspect -f {{.Id}} iot-apigw
fae8a91beb0a5cf7008bd7507b2037c463775848c6cf8e8eb4406e99c3ecaf89

[root@das-meeting-16 ~]# docker inspect -f {{.Config.Hostname}} iot-apigw
fae8a91beb0a
  • key在某个范围查找
[root@das-meeting-16 ~]# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' iot-apigw
172.23.0.3

上图range 表示在这个范围查找,后边的key,注意最后要有{{end}}

2.2.4 top

[root@das-meeting-16 ~]# docker top iot-apigw
UID		PID		PPID		C	STIME		TTY		TIME 			CMD
root	120119 	120088		0	5月06		?		01:16:06	/svc.apigw

2.2.5 attach

连接到容器中,注意加上 --sig-proxy=false,否则ctrl+c 退出时,容器有可能stop

docker attach --sig-proxy=false iot-apigw

2.2.6 events

  • 查看容器事件
  • 语法
docker events [OPTIONS]
  • OPTIONS说明:
-f :根据条件过滤事件;
--since :从指定的时间戳后显示所有事件;
--until :流水时间显示到指定的时间为止;
  • 示例
[root@das-b4 ~]# docker events  --since="1591590435"
2020-06-08T09:57:36.127905035-04:00 container attach 31a5c5ef33d44b628fe2a308362830d2401a2e3436d80df8ca695a7df626ee0e (com.docker.compose.config-hash=f0348a267d54724ef74619dc2d6ca603b860cdb1a783622d505085cc608201f4, com.docker.compose.container-number=1, com.docker.compose.oneoff=False, com.docker.compose.project=iot, com.docker.compose.service=apigw, com.docker.compose.version=1.24.0, image=iot/svc.apigw:1.1.1, maintainer=Hongjun Du<duhongjun@boe.com.cn>, name=iot-apigw)

[root@das-b4 ~]# docker events  --since="1588926435" -f "image"="mysql:5.7"
2020-05-09T06:02:57.006139509-04:00 container start eb2044574d569e97532fd0df03e4667b1c59eef1ce750fae9206db882b773d96 (com.docker.compose.config-hash=fde3194713b144a0f2f02a45390a139a6a5602f4eb449c28ef006bcfa0b9096d, com.docker.compose.container-number=1, com.docker.compose.oneoff=False, com.docker.compose.project=mysql, com.docker.compose.service=mysql, com.docker.compose.version=1.24.0, image=mysql:5.7, name=mysql_mysql_1)

2.2.7 logs

  • 语法
docker logs [OPTIONS] CONTAINER
  • OPTIONS说明:
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
  • 示例

[root@das-b4 ~]# docker logs --since="2018-06-01" --tail=10 mysql_mysql_1
2020-05-09T10:03:50.163225Z 0 [Note] Skipping generation of RSA key pair as key files are present in data directory.
2020-05-09T10:03:50.420794Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
2020-05-09T10:03:50.420873Z 0 [Note] IPv6 is available.
2020-05-09T10:03:50.420903Z 0 [Note]   - '::' resolves to '::';
2020-05-09T10:03:50.420935Z 0 [Note] Server socket created on IP: '::'.
2020-05-09T10:03:51.025040Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2020-05-09T10:03:53.492378Z 0 [Note] InnoDB: Buffer pool(s) load completed at 200509 18:03:53
2020-05-09T10:04:02.496968Z 0 [Note] Event Scheduler: Loaded 0 events
2020-05-09T10:04:02.497378Z 0 [Note] mysqld: ready for connections.
Version: '5.7.28'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

2.2.8 wait

  • 作用
    阻塞运行直到容器停止,然后打印出它的退出代码。

  • 语法

docker wait [OPTIONS] CONTAINER [CONTAINER...]
  • 实例
docker wait CONTAINER

2.2.9 export/import

  • 作用:
    export:将容器存储为tar包
    import:将expot存储的tar包释放为镜像

  • 语法

docker export -o xxx.tar 容器名或ID
docker import xxxx.tar 镜像名:tag
  • 示例
docker export -o postgres-export.tar postgres

2.2.10 port

  • 作用:查看端口
  • 语法
# docker port 容器名
  • 示例
# docker port 59eabc2614ef 80/tcp -> 0.0.0.0:80 
# docker port kickass_pike 80/tcp -> 0.0.0.0:80 

2.3 system命令

2.3.1 容器空间使用情况

[root@das-meeting-16 docker]# docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              40                  21                  5.442GB             2.643GB (48%)
Containers          22                  22                  35.07MB             0B (0%)
Local Volumes       8                   8                   4.495GB             0B (0%)
Build Cache         0                   0                   0B                  0B

2.3.2 查看实时事件

docker system events

2.3.3 docker 系统信息

docker system info
Containers: 22
 Running: 22
 Paused: 0
 Stopped: 0
Images: 40
Server Version: 18.06.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: d64c661f1d51c48782c9cec8fda7604785f93587
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-514.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 15.5GiB
Name: das-meeting-16
ID: 5XO4:CLUY:LDI3:U54X:JIPR:HH5K:MJWR:VTBX:LB4Y:V2NR:6SPU:TOSC
Docker Root Dir: /data/docker
Debug Mode (client): false
Debug Mode (server): false
HTTP Proxy: 10.10.222.191:808
HTTPS Proxy: 10.10.222.191:808
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 10.252.96.249:1987
 127.0.0.0/8
Registry Mirrors:
 https://72idtxd8.mirror.aliyuncs.com/
Live Restore Enabled: false

2.3.4 自动清理

进阶内容见《docker服务清理》

[root@das-meeting-16 ~]# docker system prune
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all build cache
Are you sure you want to continue? [y/N] y
Deleted Networks:
app_kong-net
boe-iotgw-server_default

Deleted Images:
untagged: 10.252.97.57/iot/web@sha256:35f4fc8df4d6aee308f239d7b395435058ed95fa5467220f4a448822423f86eb
deleted: sha256:ef73a04f1abb55216af6447bc8823cb30d84e96081cd502ed3a57b36091b05a3
deleted: sha256:034bf5325ec3345d68a1762c3ec1a7404cf48d7b194ac11cd86597908147ab74
untagged: 10.252.96.249:1987/epd/image-studio@sha256:d662b294b43e4277dbbb79efee729c672ba0a7191840a7ebb706cfeac77e77af
deleted: sha256:e0b1eb162b0bea4e2564419150891ae624bc4523e43159f64b6b63e0411bc42b
deleted: sha256:d61799bda8e52190456503c6bfdfb137bc5a8c563dfc8cbda878bf53cc656fb9

如上可知:

    - all stopped containers
    - all networks not used by at least one container
    - all dangling images
    - all build cache

3. 一些通用选项

3.1 自动重启

  • 语法:
docker run --restart=值 镜像
docker updata --restart=值 镜像
  • 值:
    always 任何情况下重启
    on-failure 仅错误退出时重启

  • 示例:

# docker run -d --restart=always docker.io/tomcat:v01
# docker update --restart=always tomcat-test-01

3.2 使用主机mac地址

–mac-address

# docker run -it --mac-address 00:16:3e:08:9f:8f docker.io/tomcat:v01

posted on 2022-03-23 11:22  运维开发玄德公  阅读(6)  评论(0编辑  收藏  举报  来源

导航