INDEX
- §0 官网文档连接
- §1 docker 服务指令
- §2 docker 帮助指令
- §3 镜像指令
- §4 容器指令
- §4.1 运行容器( docker run )
- §4.2 查看容器( docker ps )
- §4.3 退出容器( exit )
- §4.4 启动容器( docker start )
- §4.5 重启容器( docker restart )
- §4.6 停止容器( docker stop)
- §4.7 强制停止容器( docker kill )
- §4.8 删除容器( docker rm )
- §4.9 查看容器日志( docker logs )
- §4.10 查看容器内进程( docker top )
- §4.11 查看容器内部细节( docker inspect )
- §4.12 进入运行中的容器( docker exec )
- §4.13 进入运行中的容器( docker attache )
- §4.14 容器内文件复制到主机( docker cp )
- §4.15 容器的导出( docker export)
- §4.16 容器的导入( docker import )
- §4.17 从容器提交副本( docker push )
- §5 docker 仓库指令
§0 官网文档连接
Docker 官网命令行指令文档 连接
Docker 官网接口文档 连接
§1 docker 服务指令
docker 服务相关指令其实就是 systemctl / services(centos6) 指令
-
启动 docker 服务
systemctl start docker
-
停止 docker 服务
systemctl stop docker
-
重启 docker 服务
systemctl restart docker
-
查看 docker 服务状态
systemctl statusdocker
-
开机自启 docker 服务
systemctl enable docker
§2 docker 帮助指令
-
查看概要信息
docker info
-
查看帮助文档
docker --help
-
查看指令帮助文档
docker [commond] --help
§3 镜像指令
§3.1 查看本地镜像列表( docker images )
docker images
字段说明
REPOSITORY:镜像仓库源
TAG:镜像标签,同一个仓库源中可能有多个标签,相当于版本,若不指定,默认使用 lastest 版
IMAGE ID:镜像 ID
CREATED:镜像创建时间
SIZE:镜像大小
参数说明
- -a 列表本地所有镜像
- -f 筛选
- -q 只显示镜像 id
§3.2 查找镜像( docker search )
docker search image_name
字段说明
NAME:镜像名
DESCRIPTION:镜像描述
STARS:星数,相当于点赞
OFFICIAL:是否是官方镜像
AUTOMATED:是否自动构建
参数说明
-
--limit n,只查看前 n 个查询结果
docker search redis --limit 3
§3.3 拉取镜像( docker pull )
docker pull image_name
docker pull image_name:TAG
TAG 是镜像的版本号,省略默认使用最新版,即 image_name:lastest
§3.4 查看空间( docker system df )
docker system df
字段说明
TYPE:docker 对象类型
- Images:镜像
- Containers:容器
- Local volumes:本地卷
- Build Cache:缓存
TOTAL:总数
ACTIVE:运行数量
SIZE:大小
RECLAIMABVLE:可回收的大小和百分比,正在被使用的无法回收
§3.5 删除镜像( docker rmi )
docker rmi 仓库名 / 镜像 id
可以批量删除,多个仓库名或镜像 id 之间用空格间隔
镜像删除前必须停止由它启动的容器
镜像可以强制删除,需使用参数 -f
参数说明
-f 强制删除
§3.6 裁剪镜像( docker image prune )
docker image prune
裁剪镜像可以一次性清除所有虚悬镜像
虚悬镜像
虚悬镜像(danglign image) 仓库(REPOSITORY)和标签(TAG)都是 <none> 的镜像
虚悬镜像通常是构建或删除镜像时出现错误导致的,通常需要删除
还可以使用下面命令删除虚悬镜像
docker rmi $(docker images -q -f dangling=true)
§3.7 镜像的导入( docker import )
参考 容器的导入
§3.8 镜像的提交( docker import )
参考 提交新镜像
§3.9 镜像的构建( docker build)
docker build [OPTIONS] (PATH | URL | -)
使用 Dockerfile 构建镜像
可以指定 Dockerfile 的路径、url 或 省略
参数说明
- -t 指定 仓库/镜像名:TAG
§4 容器指令
§4.1 运行容器( docker run )
docker run 镜像名
参数说明
-
--name
重命名容器 -
-d ( detach,分离 )
后台(守护式)运行 容器并返回容器 ID -
-i ( interactive,交互式的 )
交互式运行容器 -
-t ( tty )
为容器分配模拟终端 -
-p ( port )
指定 端口映射
参数格式 主机端口:容器端口-p 5000:5000
可以同时指定多个
-p 5000:5000 -p 6000:6000
-
-P
随机端口映射 -
-v ( volum )
挂载 数据卷
参数格式 主机挂载路径:容器路径-v /docker_registry:/tmp/registry
可以同时指定多个
-v /docker/redis/6.0.8/conf/redis.conf:/etc/redis/redis.conf \ -v /app/redis/6.0.8/data:/data
通常配合参数
--privileged=true
以 打开数据卷权限 -
--privileged
是否获取主机 root 权限
值为 true 时容器内路径获得容器所在主机的 root 用户的权限 -
--restart
指定容器的重启策略- no
不重启,默认 - on-failure
失败重启,只在容器非正常退出时(退出状态非0)才会重启容器
此策略可以指定最大重启次数,比如--restart=on-failure:5
(最多重启 5 次) - unless-stopped
停止时无尽,在容器退出时总是重启容器
但 Docker 守护进程启动时就已经停止了的容器不重启 - always
总是,在容器退出时总是重启容器
- no
§4.2 查看容器( docker ps )
docker ps
参数说明
-
无参数
查看当前正在运行的容器 -
-a
查看所有容器 -
-l
查看最近创建的容器 -
-n
查看最近创建的 n 个容器 -
-q
查看容器 id
§4.3 退出容器( exit )
exit
使用 exit 命令退出容器,容器会停止
详情查看 docker 容器的退出机制
§4.4 启动容器( docker start )
docker start 容器 id / 容器名
需要容器已经存在
§4.5 重启容器( docker restart )
docker restart 容器 id / 容器名
需要容器已经存在
§4.6 停止容器( docker stop)
docker stop 容器 id / 容器名
需要容器已经存在、
§4.7 强制停止容器( docker kill )
docker kill 容器 id / 容器名
需要容器已经存在
§4.8 删除容器( docker rm )
docker rm 容器 id / 容器名
参数说明
-
无参数
删除已存在并且已停止的容器 -
-f
强制删除容器
示例
删除所有运行的容器
docker rm -f $(docker ps -a -q)
删除所有状态为 exited 的容器
docker rm $(docker ps -qf status=exited)
§4.9 查看容器日志( docker logs )
docker logs 容器 id
§4.10 查看容器内进程( docker top )
docker top 容器 id
§4.11 查看容器内部细节( docker inspect )
docker inspect 容器 id
输出类似
[
{
"Id": "cf426c231d50d2f134323daf91d65b959425751d5c72f08359bfa1211a930b5e",
"Created": "2022-08-09T07:36:23.165295141Z",
"Path": "docker-entrypoint.sh",
"Args": [
"redis-server"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 37511,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-08-09T07:36:23.971877345Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:7614ae9453d1d87e740a2056257a6de7135c84037c367e1fffa92ae922784631",
"ResolvConfPath": "/var/lib/docker/containers/cf426c231d50d2f134323daf91d65b959425751d5c72f08359bfa1211a930b5e/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/cf426c231d50d2f134323daf91d65b959425751d5c72f08359bfa1211a930b5e/hostname",
"HostsPath": "/var/lib/docker/containers/cf426c231d50d2f134323daf91d65b959425751d5c72f08359bfa1211a930b5e/hosts",
"LogPath": "/var/lib/docker/containers/cf426c231d50d2f134323daf91d65b959425751d5c72f08359bfa1211a930b5e/cf426c231d50d2f134323daf91d65b959425751d5c72f08359bfa1211a930b5e-json.log",
"Name": "/intelligent_turing",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/bd6044bb08219fb4f973d4bfb4a9d6cfe0d973b6084b326db5eacbbe751bf383-init/diff:/var/lib/docker/overlay2/74e7276324c4944736e8b7afcddf427eeb7baabb370192d23e3187ef46eb073e/diff:/var/lib/docker/overlay2/0139b73183f9009e54c44743e53898fa7cf170d7c1ab31a6c04018f47c6c4e31/diff:/var/lib/docker/overlay2/d268b7e9669ecacaea6c964753f2e2dea4cb181e6d68796ff0b05eb80c9793ec/diff:/var/lib/docker/overlay2/0e5908be525c58ffc9f23c6468ee2ea34a0c3578bbf1409d91e25c3d381a1225/diff:/var/lib/docker/overlay2/1f621f01d512b031485da9d30cbb80423fc92f5b4f4e4475ff1382000f7e95af/diff:/var/lib/docker/overlay2/ef0e10883d6f6fb6afad6010781dde4ef75b0f6997cf30b37cd0468705457b9d/diff",
"MergedDir": "/var/lib/docker/overlay2/bd6044bb08219fb4f973d4bfb4a9d6cfe0d973b6084b326db5eacbbe751bf383/merged",
"UpperDir": "/var/lib/docker/overlay2/bd6044bb08219fb4f973d4bfb4a9d6cfe0d973b6084b326db5eacbbe751bf383/diff",
"WorkDir": "/var/lib/docker/overlay2/bd6044bb08219fb4f973d4bfb4a9d6cfe0d973b6084b326db5eacbbe751bf383/work"
},
"Name": "overlay2"
},
"Mounts": [
{
"Type": "volume",
"Name": "b06a421968771e3003bcc414dd1a3efe30b742782d32232f512533b65d6e8ac7",
"Source": "/var/lib/docker/volumes/b06a421968771e3003bcc414dd1a3efe30b742782d32232f512533b65d6e8ac7/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
"Config": {
"Hostname": "cf426c231d50",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"6379/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GOSU_VERSION=1.12",
"REDIS_VERSION=6.2.6",
"REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-6.2.6.tar.gz",
"REDIS_DOWNLOAD_SHA=5b2b8b7a50111ef395bf1c1d5be11e6e167ac018125055daa8b5c2317ae131ab"
],
"Cmd": [
"redis-server"
],
"Image": "redis",
"Volumes": {
"/data": {}
},
"WorkingDir": "/data",
"Entrypoint": [
"docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "6f9b8573f20c11c0864d7cd878cca8267c9176ca94b86c1006aadd64e1db582d",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"6379/tcp": null
},
"SandboxKey": "/var/run/docker/netns/6f9b8573f20c",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "b87e27785ed39d7c6f161e0837f9119b9d3f8b7f59cd7471ef3399d3b23036db",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "238a5418d55eff5243394b05575a46f36b1dbeecf201b8b656d13a8646d47667",
"EndpointID": "b87e27785ed39d7c6f161e0837f9119b9d3f8b7f59cd7471ef3399d3b23036db",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
字段说明
- Mounts
挂载信息
§4.12 进入运行中的容器( docker exec )
docker exec 容器 id
参数说明
- 无参数
进入运行中的容器 - -it
进入运行中的容器,并以打开新的终端以交互
与 docker attache 区别
- exec 会用新进程打开新的终端以交互
- exec 下使用 exit 退出不会终止容器
- docker attache 下使用 exit 会终止容器,一般不在正式工作场景使用
示例
进入运行中的 ubuntu 容器,并以新的 bash 命令行终端交互
docker exec -it ubuntu /bin/bash
§4.13 进入运行中的容器( docker attache )
docker attache 容器 id
示例
容器 b7bb2cf0efd5 下根目录的 a 文件,复制到主机根目录
docker cp b7bb2cf0efd5:/a /
§4.14 容器内文件复制到主机( docker cp )
docker cp 容器 id:容器内路径 主机目录
§4.15 容器的导出( docker export)
docker export 容器 id > 文件名
导出的容器会形成 tar 文件
参数说明
-
-o
输出字符串,容器导出后输出的文件的路径和名字
可以用 “> 文件名” 代替
不指定时输出到 STDOUT,但可能报cowardly refusing to save to a terminal. Use the -o flag or redirect
示例
容器 b7bb2cf0efd5 导出为 1123.tar 和 1124.tar
docker export b7bb2cf0efd5 > 1123.tar
docker export -o 1124.tar b7bb2cf0efd5
§4.16 容器的导入( docker import )
先读取容器导出的文件,然后交由 docker import 导入
cat tar文件 | docker import - 库名/镜像名:TAG
- 导入后会形成一个具有指定 库名、镜像名和TAG 的新的 镜像
- 使用新镜像 docker run 完成容器的导入
- 导入的容器会带有原容器导出时的所有文件
示例
用 1124.tar 导入镜像
cat 1124.tar| docker import - ubuntu/ubuntu:1.0
§4.17 从容器提交副本( docker push )
参考 提交新镜像
§5 docker 仓库指令
§5.1 提交新镜像( docker commit )
docker commit 容器 ID 新镜像名:新镜像标签
参数说明
- -m
对新镜像的描述 - -a
新镜像的作者
示例
基于基本的 ubuntu 安装 vim 并提交新镜像
更新 apt
apt-get update
安装 vim
apt-get -y install vim
§5.2 推送镜像到仓库( docker push )
docker push 仓库标签
流程和示例
使用公有云仓库
需要先准备公有云仓库,可参考 创建阿里云仓库
可以参考 阿里云仓库相关指令 从目的仓库的基本信息中快速获取指令模板
登录
docker login --username=用户名 仓库
创建仓库标签
docker tag 镜像id registry.cn-hangzhou.aliyuncs.com/命名空间名/仓库名:镜像版本号
推送
docker push 仓库标签
示例
使用私有仓库
需要先准备私有仓库,可参考 创建私有仓库
创建仓库标签
docker tag 镜像:TAG 私有仓库IP:私有仓库端口/仓库名:TAG
推送
docker push 仓库标签
示例
§5.3 从仓库拉取镜像( docker pull )
docker pull 仓库标签
流程和示例
使用公有云仓库
需要先具备目的仓库,可参考 创建阿里云仓库
可以参考 阿里云仓库相关指令 从目的仓库的基本信息中快速获取指令模板
登录
docker login --username=用户名 仓库
拉取
docker pull registry.cn-hangzhou.aliyuncs.com/fc-learning/ubuntu:镜像版本号
使用私有仓库
需要先准备私有仓库,可参考 创建私有仓库
拉取
docker pull 私有仓库IP:私有仓库端口/仓库名:TAG