一、帮助命令
docker version docker info # 重要 docker --help
可以使用docker COMMAND --help 查看某个命令具体如何使用。
二、镜像命令
1. docker images:列出本地主机上的镜像
各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。
#列出本地所有的镜像(含中间映像层) docker images -a # 只显示镜像ID docker images -q # 显示镜像的摘要信息 docker images --digests # 显示完整的镜像信息 docker images --no-trunc
2. docker search 某个XXX镜像名字
注:从镜像仓库 https://hub.docker.com 搜索
# docker search [OPTIONS] 镜像名字 # 显示完整的镜像描述 docker search --no-trunc tomcat # 较为重要:列出收藏数不小于指定值的镜像。 docker search -s 30 tomcat # 只列出 automated build类型的镜像 docker search --automated tomcat
3. docker pull 某个XXX镜像名字
下载镜像
docker pull 镜像名字[:TAG]
如果不加TAG,默认拉取的是镜像名字:latest(即最新版本)
4. docker rmi 某个XXX镜像名字ID
删除镜像
(1) 删除单个
docker rmi -f 镜像ID
注:不加:TAG,默认删除的是:latest
(2) 删除多个
docker rmi -f 镜像名1:TAG 镜像名2:TAG
(3) 删除全部
docker rmi -f $(docker images -qa)
三、容器命令
有镜像才能常见容器,拉取镜像测试:docker pull centos
1. 新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] # OPTIONS说明(常用):有些是一个减号,有些是两个减号 # --name="容器新名字": 为容器指定一个名称; # -d: 后台运行容器,并返回容器ID,也即启动守护式容器; # -i:以交互模式运行容器,通常与 -t 同时使用; # -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用; # -P: 随机端口映射; # -p: 指定端口映射,有以下四种格式 # ip:hostPort:containerPort # ip::containerPort # hostPort:containerPort # containerPort
启动交互式容器:
“root@1b7d3abdedd8”说明已进入到容器ID为1b7d3abdedd8的一个终端。
较为完整的 docker run 选项: --add-host list 添加自定义主机到IP映射(主机:IP) -a, --attach list 连接到stdin、stdout或stderr --blkio-weight uint16 块IO(相对权重),介于10到1000之间,或0到禁用(默认为0) --blkio-weight-device list 块IO权重(相对设备权重)(默认值[]) --cap-add list 添加Linux功能 --cap-drop list 放弃Linux功能 --cgroup-parent string 容器的可选父cgroup --cidfile string 将容器id写入文件 --cpu-period int 限制CPU CFS(完全公平调度程序)周期 --cpu-quota int 限制CPU CFS(完全公平调度程序)配额 --cpu-rt-period int 限制CPU实时周期(微秒) --cpu-rt-runtime int 限制CPU实时运行时间(微秒) -c, --cpu-shares int CPU共享(相对权重) --cpus decimal CPU数量 --cpuset-cpus string 允许执行的CPU(0-3、0、1) --cpuset-mems string 允许执行的微机电系统(0-3、0、1) -d, --detach 在后台运行容器并打印容器ID --detach-keys string 重写用于分离容器的键序列 --device list 将主机设备添加到容器 --device-cgroup-rule list 将规则添加到cgroup allowed devices列表 --device-read-bps list 限制设备的读取速率(字节/秒)(默认为[]) --device-read-iops list 限制设备的读取速率(IO/秒)(默认值[]) --device-write-bps list 限制对设备的写入速率(字节/秒)(默认值[]) --device-write-iops list 限制设备的写入速率(IO/秒)(默认值[]) --disable-content-trust 跳过图像验证(默认为true) --dns list 设置自定义DNS服务器 --dns-option list 设置DNS选项 --dns-search list 设置自定义DNS搜索域 --domainname string 容器NIS域名 --entrypoint string 覆盖图像的默认入口点 -e, --env list 设置环境变量 --env-file list 读取环境变量文件 --expose list 公开一个或一系列端口 --gpus gpu-request 要添加到容器的GPU设备(“all”用于传递所有GPU) --group-add list 添加要加入的其他组 --health-cmd string 运行以检查运行状况的命令 --health-interval duration 运行检查之间的时间(m s s m h)(默认为0s) --health-retries int 需要连续失败才能报告不正常 --health-start-period duration 开始运行状况重试倒计时之前容器初始化的开始时间 (m s s m h)(默认为0) --health-timeout duration 允许一个检查运行的最大时间(ms s m m h)(默认值0) --help 打印使用 -h, --hostname string 容器主机名 --init 在转发信号和获取进程的容器中运行init -i, --interactive 即使没有连接,也保持stdin打开 --ip string IPv4地址(例如172.30.100.104) --ip6 string IPv6地址(例如,2001:db8::33) --ipc string 要使用的IPC模式 --isolation string 集装箱隔离技术 --kernel-memory bytes 内核内存限制 -l, --label list 在容器上设置元数据 --label-file list 读取以行分隔的标签文件 --link list 将链接添加到另一个容器 --link-local-ip list 容器IPv4/IPv6链路本地地址 --log-driver string 容器的日志驱动程序 --log-opt list 日志驱动程序选项 --mac-address string 容器MAC地址(例如92:d0:c6:0a:29:33) -m, --memory bytes 记忆极限 --memory-reservation bytes 存储器软限制 --memory-swap bytes 交换限制等于内存加交换:'-1'以启用无限制交换 --memory-swappiness int 调整容器内存交换(0到100)(默认-1) --mount mount 将文件系统装载附加到容器 --name string 为容器指定名称 --network network 将容器连接到网络 --network-alias list 为容器添加网络范围的别名 --no-healthcheck 禁用任何容器指定的运行状况检查 --oom-kill-disable 禁用OOM杀手 --oom-score-adj int 调整主机的OOM首选项(-1000到1000) --pid string 要使用的PID命名空间 --pids-limit int 调整容器PIDS限制(设置-1表示无限制) --privileged 授予此容器扩展权限 -p, --publish list 将容器的端口发布到主机 -P, --publish-all 将所有公开的端口发布到随机端口 --read-only 将容器的根文件系统装载为只读 --restart string 重新启动策略以在容器退出时应用(默认为“否”) --rm 容器退出时自动拆卸 --runtime string 用于此容器的运行时 --security-opt list 安全选项 --shm-size bytes /dev/shm的大小 --sig-proxy 代理接收到进程的信号(默认为true) --stop-signal string 停止容器的信号(默认为“sigterm”) --stop-timeout int 停止容器超时(秒) --storage-opt list 容器的存储驱动程序选项 --sysctl map sysctl选项(默认映射[]) --tmpfs list 装入tmpfs目录 -t, --tty 分配一个伪tty --ulimit ulimit ulimit选项(默认值[]) -u, --user string 用户名或uid(格式:<name uid>[:<group gid>]) --userns string 要使用的用户命名空间 --uts string 要使用的uts命名空间 -v, --volume list 绑定装入卷 --volume-driver string 容器的可选卷驱动程序 --volumes-from list 从指定容器装入卷 -w, --workdir string 容器内的工作目录
2. 列出当前所有正在运行的容器
docker ps [OPTIONS]
# OPTIONS说明(常用): # -a :列出当前所有正在运行的容器+历史上运行过的。 eg: docker ps -a # -l :显示最近创建的容器。 eg: docker ps -l # -n:显示最近n个创建的容器。 eg: docker ps -n 3 # -q :静默模式,只显示容器编号。 eg: docker ps -q # --no-trunc :不截断输出。 eg: docker ps --no-trunc
CONTAINER ID:容器ID,如上面启动交互式容器的那一个字符串
IMAGE:镜像ID
CREATED:创建时间
STATUS:状态,Up表示正在运行,Exited表示已停止退出
PORTS:映射端口
NAMES:容器名字,可以自己指定
3. 退出容器
# 两种退出方式 # 第一种:容器停止退出,在容器终端输入exit # 第二种:容器不停止退出,在容器终端按Ctrl+P+Q
第二种退出方式:
4. 启动容器
# docker start 容器ID或者容器名 docker start 1b7d3abdedd8
原因:docker服务启动时定义的自定义链DOCKER由于某种原因被清掉,重启docker服务即可重新生成自定义链DOCKER。
# 重启docker服务后再启动容器 systemctl restart docker docker start 1b7d3abdedd8
5. 重启容器
# docker restart 容器ID或者容器名 docker restart 1b7d3abdedd8
6. 停止容器
# docker stop 容器ID或者容器名 docker stop 1b7d3abdedd8
7. 强制停止容器
# docker kill 容器ID或者容器名 docker kill 1b7d3abdedd8
8. 删除已停止的容器
# docker rm 容器ID docker rm 1b7d3abdedd8 # 强制删除 docker rm -f 1b7d3abdedd8 # 一次性删除多个容器 docker rm -f $(docker ps -a -q) docker ps -a -q | xargs docker rm
9. 启动守护式容器
docker run -d 容器名
问题:docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点:Docker容器后台运行,就必须有一个前台进程。
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就会自动退出的。
这是docker的机制问题,容器后台启动后,会立即自杀,因为他觉得他没事可做了。
所以,我们只要不让容器自动退出就行。
# 以后台模式运行centos:docker run -d centos # /bin/bash -c "while true;do echo hello zzyy;sleep 2;done" 循环打印 # eg:docker run -d tomcat /bin/bash -c "while true;do echo hello linhw;sleep 2;done" docker run -d centos /bin/bash -c "while true;do echo hello linhw;sleep 2;done"
10. 查看容器日志
# docker logs -f -t --tail 容器ID # 选项说明 # -t 是加入时间戳 # -f 跟随最新的日志打印 # --tail 数字 显示最后多少条 docker logs -f -t --tail 3 1b652326460e
11. 查看容器内运行的进程
docker top 容器ID
12. 查看容器内部细节
docker inspect 容器ID
13. 进入正在运行的容器并以命令行交互
# 第一种:docker exec -it 容器ID bashShell
# 进入容器:docker exec -it 1b652326460e # 执行命令: ls -l /tmp/,这种不会进入容器终端命令行 docker exec -it 1b652326460e ls -l /tmp/ # 会进入到容器终端命令行 docker exec -it 1b652326460e /bin/bash
# 第二种:docker attach 容器ID
docker attach 1b652326460e
两者的差别:
- attach 直接进入容器启动命令的终端,不会启动新的进程
- exec 是在容器中打开新的终端,并且可以启动新的进程
14. 从容器内拷贝文件到主机上
# docker cp 容器ID:容器内路径 目的主机路径
15. 从主机上拷贝到容器内
#docker cp 本地文件路径 容器ID:容器内路径 docker cp /var/fdfs/01.jpg e06f2fd36ee4:/var/fdfs/
四、命令总结
attach # 当前 shell 下 attach 连接指定运行镜像 build # 通过 Dockerfile 定制镜像 commit # 提交当前容器为新的镜像 cp #从容器中拷贝指定文件或者目录到宿主机中 create # 创建一个新的容器,同 run,但不启动容器 diff # 查看 docker 容器变化 events # 从 docker 服务获取容器实时事件 exec # 在已存在的容器上运行命令 export # 导出容器的内容流作为一个 tar 归档文件[对应 import ] history # 展示一个镜像形成历史 images # 列出系统当前镜像 import # 从tar包中的内容创建一个新的文件系统映像[对应export] info # 显示系统相关信息 inspect # 查看容器详细信息 kill # kill 指定 docker 容器 load # 从一个 tar 包中加载一个镜像[对应 save] login # 注册或者登陆一个 docker 源服务器 logout # 从当前 Docker registry 退出 logs # 输出当前容器日志信息 port # 查看映射端口对应的容器内部源端口 pause # 暂停容器 ps # 列出容器列表 pull # 从docker镜像源服务器拉取指定镜像或者库镜像 push # 推送指定镜像或者库镜像至docker源服务器 restart # 重启运行的容器 rm # 移除一个或者多个容器 rmi # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除] run # 创建一个新的容器并运行一个命令 save # 保存一个镜像为一个 tar 包[对应 load] search # 在 docker hub 中搜索镜像 start # 启动容器 stop # 停止容器 tag # 给源中镜像打标签 top # 查看容器中运行的进程信息 unpause # 取消暂停容器 version # 查看 docker 版本号 wait # 截取容器停止时的退出状态值