docker从入门到实践参考文档
https://docker-practice.github.io/zh-cn/
dockr练习网站
https://labs.play-with-docker.com/
查看docker版本
docker version
或
docker -v
查看docker详细信息
# 包括镜像和容器数
docker info
镜像相关
从镜像仓库中拉取或者更新指定镜像
docker pull NAME[:TAG]
-a :拉取所有 tagged 镜像
例:
docker pull nginx:1.22
如不指定TAG则默认最新镜像
搜索docker镜像
# all所有镜像,可指定镜像
docker search all
选项
- -f:过滤条件,列出收藏数不小于指定值的镜像(默认收藏数从高到低)。
- --no-trunc:显示完整的镜像描述;
- --limit int:最大搜索结果数(默认值为25)
# 从Docker Hub查找所有镜像名包含 java,并且收藏数大于10的镜像,只显示前5条
docker search -f stars=10 --limit 5 --no-trunc java
输出详情:
- NAME: 镜像仓库源的名称
- DESCRIPTION: 镜像描述(使用--no-trunc选项后显示完整,不使用默认过长的描述会截断末尾显示...)
- OFFICIAL: 是否 docker 官方发布
- STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。
- AUTOMATED: 自动构建。
列出本地镜像列表
# 列出本地所有镜像 //docker image ls 的缩写
docker images
# 指定镜像名
docker images [镜像名]
输出详情:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签,同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
给镜像打标签
# 镜像ID如:860c279d2fec,用户名可以省略,直接使用自定义镜像名:标签名
docker tag 镜像ID 用户名/镜像名:标签名
# 一个镜像可以打多个标签,共用一个镜像ID
docker tag 镜像名:标签 新镜像名:新标签
删除镜像
# 从本地删除一个已经下载的镜像,需先删除对应容器
docker rmi 镜像名:标签
-f:强制删除
--no-prune:不移除该镜像的过程镜像,默认移除
# 删除所有未被容器使用的镜像(有交互提示,按y确认)
docker image prune -a
# 删除所有none的镜像、删除所有停止的容器、删除所有未被容器使用的网络(有交互提示,按y确认)
docker system prune
备份、注入本地镜像
# 备份,备份名推荐 镜像名-版本号.tar
docker save -o 备份名.tar 镜像名:标签
# 注入
docker load -i 备份名.tar
docker load < 备份名.tar
# 示例
docker save -o ngins_test-v1.tar nginx_test:latest # 备份
docker rmi nginx_test:latest # 删除源镜像
docker load -i ngins_test-v1.tar # 恢复
容器相关
创建一个容器并运行
# 语法
docker run 选项 镜像名:标签 命令参数(可选)
docker run -tid --name c1 centos:7
选项
- -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
- -i:以交互模式运行容器,通常与 -t 同时使用。
- -d:后台运行容器,并返回容器ID。
- --name:为容器指定一个名称;例:--name test-container
- -p:指定端口映射,映射多个端口使用多个-p参数,格式为:主机(宿主)端口:容器端口;例:-p 5000:5000
- -v:映射一个数据卷或本地目录到容器内(类似于挂载)。例:-v /本地目录:/tmp/data
- -e:设置环境变量,设置多个环境变量使用多个-e参数;例:-e REDIS_HOST=redis
- --network:将容器连接到指定网络;例:--network NetworkName
- --restart:指定容器停止后的重启策略,参考下方设置容器开机自启。
- --rm:容器退出时自动移除容器。
- --workdir,-w:容器内的工作目录,如果路径不存在,则会在容器内创建该路径;例:-w /path/to/dir/
- --hostname或-h:指定容器的hostname;例:-h flask
- --memory或-m:设置容器使用内存最大值;例:-m 200M
- --cpu-shares或-c:设置容器 CPU 权重,最小值为2(多容器共享CPU场景下,如A容器值设置为5,B容器设置为10,两个容器将CPU拉满,则B容器占比66%,A容器占比33%);例:-c 5
- --cpus:设置cpu数量限制;例:--cpus=2
- --net:指定容器的网络连接类型,支持 bridge/host/none/container 四种类型;例:--net="bridge"
- --env-file=[]: 从指定文件读入环境变量;例:--env-file ./env.list
- --link=[]:添加链接到另一个容器;例:--link test1,将创建的容器link到test1
只创建容器不运行
docker create
# 示例
docker create --name mynginx nginx:latest
进入容器
# 使用attach命令进入容器,如果使用exit命令或ctrl+d退出,容器会停止运行;使用exec命令进入再exit退出容器终端,容器不会停止。
docker attach 容器名|容器ID
or
docker exec -ti 容器ming|容器ID /bin/bash
# 示例,使用容器名或ID均可,使用attach进入容器,可使用Ctrl+p+q,退出但不停止容器运行
docker attach test
docker exec -ti 5e542a78fd84 /bin/bash
启动容器
docker start 容器名
docker restart 容器名
# 启动所有容器
docker start `docker ps -qa`
停止容器
# kill强制干掉进程,stop优雅退出,可同时停止多个
docker kill 容器名|容器ID
docker stop 容器名|容器ID
# 停止所有容器
docker stop `docker ps -qa`
列出容器
docker ps
选项
- -a:显示所有的容器,包括未运行的。
- -s:显示总的文件大小。
- -l:显示最近创建的容器。
- -n:列出最近创建的n个容器。
- -f:根据条件过滤显示的内容,其值格式为"key=value"对。如:docker ps -f "name=test"
- --no-trunc:显示不截断输出。(容器ID会完整显示,默认只显示前12位)
- -q :静默模式,只显示容器编号。(配合其它选项使用作为变量删除所有容器)
输出详情
- CONTAINER ID:容器ID
- IMAGE:使用的镜像
- COMMAND:容器里面运行的命令
- CREATED:创建时间
- STATUS:容器的状态
- PORTS:容器的端口映射
- NAMES:容器的名字
STATUS状态有7种:- created(已创建)
- restarting(重启中)
- running(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
查看容器详情
# 语法,inspect命令的参数为容器则是查看容器详情,参数为数据卷名则是查看该数据卷详细信息,参数为网络名则是查看该网络详情。
docker inspect 容器名|容器ID
# 选项
--format,-f # 使用给定的 Go 模板格式化输出
--size,-s # 如果类型为容器,则显示总文件大小
--type # 返回指定类型的 JSON
# 示例
# 获取容器的IP信息
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_ID
# 获取实例的 MAC 地址
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $INSTANCE_ID
# 获取实例的日志路径
docker inspect --format='{{.LogPath}}' $INSTANCE_ID
# 获取实例的镜像名称
docker inspect --format='{{.Config.Image}}' $INSTANCE_ID
# 列出容器所有端口映射
docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID
# 如果请求的字段本身就是包含其他结构的结构字段,就是JSON格式,就可以使用如下方式获取对应的值
# 获取Config部分的信息
docker inspect --format='{{json .Config}}' $INSTANCE_ID
# 获取Config信息里Hostname这个key的value,即主机名
docker inspect --format='{{json .Config.Hostname}}' $INSTANCE_ID
# 获取NetworkSettings信息里IPAddress这个key的value,即获取IP
docker inspect --format='{{json .NetworkSettings.IPAddress}}' $INSTANCE_ID
设置容器开机自启
# 在创建容器时
docker run -tid --restart always 镜像名 /bin/bash
# restart参数值
no:容器不自动重启
on-failure:容器退出状态不为0时自动重启
on-failure:[n]:容器退出状态不为0时自动重启,最大尝试n次
always:始终尝试自动重启
# 如果容器已经被创建,修改容器的重启策略
docker update --restart always 容器名|容器ID
从容器创建一个新的镜像
# 语法
docker commit 容器名|ID 镜像名:标签
# 选项
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
# 示例,注:如使用-a、-m等选项,需将容器名和镜像名置于命令最后,置于选项前会报错。
docker commit 493cfc test-mysql:1.0
# 当使用同一个容器生成镜像,并且指定的镜像名:标签和先前提交过的镜像重复时,旧的镜像:标签都会变为<none>
docker commit -a "tandabao" -m "my nginx" -p 493cfc test-mysql:1.0
删除容器
# 使用rm删除一个或这个容器,可使用容器名或容器ID。注:删除容器必须在容器处于关闭状态时
docker rm 容器ID1 容器ID2
# -f选项,强制删除,包括正在运行中的
docker rm -f 容器ID1
# 删除所有停止的容器(有交互提示,按y确认)
docker container prune
# 删除所有停止的容器,通过-f过滤出状态为停止的容器。实际上可以不使用-f过滤,运行状态的容器无法删除会报错,停止的容器会直接删除
docker rm $(docker ps -qa -f"status=exited")
# 删除清空所有容器,包括运行中的
docker kill `docker ps -qa` ; docker rm `docker ps -aq`
# 删除所有停止的容器、删除所有未被容器使用的网络、删除所有none的镜像(有交互提示,按y确认)
docker system prune
cp -- 容器与主机之间的数据拷贝
# 语法
docker cp [OPTIONS] 容器ID:src_path dest_path
docker cp [OPTIONS] dest_path 容器ID:src_path
# 选项
-L :保持源目标中的链接,即符号链接,默认复制符号链接,加上-L选项复制源
# 示例,将本地目录文件拷贝至容器目标目录,源目录以/结尾则拷贝整个目录,以/.结尾则拷贝目录内的所有文件至目标目录,目标目录不存在则创建。
# 如果拷贝单文件,源文件和目标文件同名,源文件将覆盖目标文件
docker cp /www/. 96f7:/www/
# 将容器96f7的/www目录拷贝到主机的/tmp目录中,其余和上述一致。
docker cp 96f7:/www/ /tmp/
查看容器的日志
# 语法
docker logs [options] 容器ID|容器名称
# 选项
-t:加入时间戳
-f:跟随最新的日志打印(动态展示,类似于tail -f命令)
--tail N:显示最后多少条
--since:显示某个开始时间的所有日志
# 示例,查看容器mynginx从2022年7月1日后的日志
docker logs --since="2022-07-01" mynginx
# 查找容器日志位置
docker inspect --format='{{.LogPath}}' 容器ID
# 可以修改docker配置文件 daemon.json 限定log文件的大小,/etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"}
}
查看容器中运行的进程信息
docker top 容器IP|容器名称
标签:容器,删除,--,ID,常用命令,镜像,Docker,docker
From: https://www.cnblogs.com/tandabao/p/17204897.html