Docker命令大全
构建
根据当前目录中的dockerfile构建镜像
docker build -t <镜像名称>.
运行
使用 指定镜像 以 交互模式 运行容器,并监听服务端口开放外部(直接执行镜像startup CMD)
docker run -it -p <对外端口>:<服务端口> <镜像名称>
使用 指定镜像 以 交互模式 运行容器,并监听服务端口开放外部(直接执行镜像startup CMD),并按照 容器名称docker run -it --name <容器名称> -p <对外端口>:<服务端口> <镜像名称>
使用 指定镜像 以 交互模式 运行容器,并监听服务端口开放外部(不执行startup,开启终端)
docker run -it -p <对外端口>:<服务端口> <镜像名称> /bin/bash
映射目录
使用 指定镜像 以 交互模式 运行容器,并将本机文件映射到容器内部(不执行startup,开启终端)
docker run -it -v <本机文件地址>:<容器内部地址> <镜像名称> /bin/bash
指定网络
使用 指定镜像 以 交互模式 运行容器,并使用本机网络
docker run -it --network=host <镜像名称>
启动
如果已经有容器实例,可以直接启动(直接执行镜像startup CMD)
docker start <容器名称>
进入
容器运行过程中,开启一个终端
docker exec -it <容器名称> /bin/bash
查看镜像
docker images
删除
docker rmi docker_name
在Docker中,通常会有一些无标签(none)的镜像和悬空镜像(即不再任何容器中使用但未被删除的镜像)。这些无标签镜像和悬空镜像可能会占用磁盘空间。
要删除这些无标签的镜像,可以使用以下命令:
docker rmi $(docker images -f "dangling=true" -q)
这条命令会删除所有未被任何容器使用的悬空镜像。
如果你也想删除无标签的镜像,可以使用以下命令:
docker rmi $(docker images -f "dangling=true" -q) $(docker images | grep "<none>" | awk '{print $3}')
这条命令会先删除所有悬空镜像,然后删除所有无标签的镜像。
请注意,在执行删除操作前,确保不会删除任何你可能还需要的镜像。如果不确定,可以先使用 docker images
命令列出所有镜像,进行检查。
这两条都是只删除none的镜像,使用效果都一样
docker rmi $(docker images | grep "<none>" | awk '{print $3}')
docker rmi $(docker images | grep "none" | awk '{print $3}')
注意这里直接使用这个命令删除none的镜像时,有可能会因为空间不足报如下错误
Error response from daemon: open /var/lib/docker/image/overlay2/.tmp-repositories.json2277775052: no space left on device
这时建议先使用上面的docker rmi $(docker images -f "dangling=true" -q)命令删除悬空镜像清理出空间后再删除none的镜像
system
docker system df
提供Docker整体磁盘使用率的概况,包括镜像、容器和(本地)volume。所以我们现在随时都可以查看Docker使用了多少资源。
[root@localhost ~]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 10 6 2.652GB 1.953GB (73%)
Containers 6 6 6.922MB 0B (0%)
Local Volumes 0 0 0B 0B
docker system prune
如果之前的命令展示出 docker 已经占用了太多空间,我们会开始清理。有一个包办一切的命令:
[root@localhost ~]# 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
Total reclaimed space: 0B
根据警告信息可知,这个命令会删除所有关闭的容器以及dangling镜像。示例中,含有3个1GB随机文件的镜像的名称被占用了,名称为:,为dangling镜像,因此会被删除。同时,所有的中间镜像也会被删除。
更进一步,使用-a选项可以做深度清理。这时我们会看到更加严重的WARNING信息:
$ docker system prune -a
WARNING! This will remove:
- all stopped containers
- all volumes not used by at least one container
- all networks not used by at least one container
- all images without at least one container associated to them
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: test:latest
deleted: sha256:c515ebfa2...
deleted: sha256:07302c011...
deleted: sha256:37c0c6474...
deleted: sha256:5cc2b6bc4...
deleted: sha256:b283b9c35...
deleted: sha256:8a8b9bd8b...
untagged: alpine:latest
untagged: alpine@sha256:58e1a1bb75db1...
deleted: sha256:4a415e366...
deleted: sha256:23b9c7b43...
Total reclaimed space: 2.151GB
这个命令将清理整个系统,并且只会保留真正在使用的镜像,容器,数据卷以及网络,因此需要格外谨慎。比如,我们不能在生产环境中运行prune -a命令,因为一些备用镜像(用于备份,回滚等)有时候需要用到,如果这些镜像被删除了,则运行容器时需要重新下载。
此时,所有未绑定容器的镜像将会被删除。由于第一次prune命令删除了所有容器,因此所有镜像(它们没有绑定任何容器)都会被删除。
执行脚本
容器运行过程中,执行容器内 /root/test.sh 脚本
docker exec -it <容器名称> /bin/sh /root/test.sh
使用.env文件
创建.env文件
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=password
使用
在启动容器时,可以通过
--env-file
参数指定.env
文件的路径,让容器可以读取其中定义的环境变量,例如:
docker run --env-file=.env my_image
docker-compose注意事项
1. 不要把 docker 当做数据容器来使用,数据一定要用 volumes 放在容器外面
2. 不要把 docker-compose 文件暴露给别人, 因为上面有你的服务器信息
3. 多用 docker-compose 的命令去操作, 不要用 docker 手动命令&docker-compose 去同时操作
4. 写一个脚本类的东西,自动备份docker 映射出来的数据。
5. 不要把所有服务都放在一个 docker 容器里面