之前看 Docker 手册时顺手记的一些笔记比较杂乱,这里总结日常使用常用的命令
Docker常用命令
Docker 基础命令
搜拉列查看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 搜索镜像 $ docker search xxx # 拉取镜像,默认官方仓库 $ docker pull [registry url [:port]/] 仓库名[:标签] # 列出所有docker运行的container,q指容器ID $ docker pa -a[q]
# 检查 容器的数据卷具体信息 $ docker inspect # 查看 镜像/容器/卷 所占用的空间 $ docker system df # 查看 资源占用状态 $ docker stats # 查看 访问记录 $ docker logs # 查看 镜像构建过程 $ docker history
|
跑
由镜像实例化创建容器(操作对象是image)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| # 由镜像实例化创建容器(操作对象是iamge) $ docker run -d -i -t --rm --name [contianer name] -e [env list] -p [local port : container port] -v [local dir : container dir] [IMAGE][COMMAND][ARG]
# 例子: -dit, 防止自停; --rm, 容器退出后随之删除以节省空间; -v, $PWN为当前目录 ; -e, 指定环境变量 $ docker run -d --rm --name mysql_database -e MYSQL_USER=dxx -e MYSQL_PASSWORD=123456 -e MYSQL_DATABASE=awesome -p 3307:3306 -v $PWD/www:/opt/app-root/src/www # WEBSRC目录 -v $PWD/data:/var/lib/mysql # 数据库内容持久化 -v $PWN/conf:/etc/mysql/conf.d # 配置文件
# 例子: docker run -dit --name ruoyi -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/data:/var/lib/mysql -v $PWD/log:/var/log/mysql mysql:5.7
# 重启已停止的容器 $ docker resart ID
# 数据卷容器,数据同步 $ docker ... container2 --volumn-from container1(父数数据卷) ...
|
- 常见问题:docker后台运行容器必须有前台进程,否则会自动停止
- 解决方法:
1 2 3 4 5 6
| # 1.指定挂起阻塞命令启动容器 $ docker run -d --name my-redis redis sleep 99999999999999 # 2.使用交互界面后退出容器 $ docker run -it --name my-redis redis bash # 3.-td命令结合使用(-i 不是必需,加了容器起来后终端返回容器ID) docker run -itd --name my-redis2 redis bash
|
进
1 2 3 4 5 6 7 8 9
| # exec 进入容器, 并使用bash交互 $ docker exec -it [name/ID] bash $ docker exec -it [name/ID] /bin/bash
# attach $ docker attach 容器ID|容器name
# SSH # nsenter
|
停
1 2
| # 停止所有容器 $ docker stop $(docker ps -aq)
|
操
1 2 3 4
| # 拷贝物理机文件至容器某路径 $ docker cp xxx.txt [container ID:/dir] [local dir path] # 拷贝物理机路径下所有文件至容器某路径 $ docker cp [container ID:/dir] [local dir path]
|
看
1 2 3 4 5
| # 查看容器映射 $ docker port [container ID]
# 查看镜像改动 $ docker diff [image]
|
保存
1 2
| # 给原来镜像新添加一层,形成新镜像,自己定制的黑箱镜像。慎用! $ docker commit [选项] <容器ID> [容器名字]
|
导出入
1 2 3 4 5
| # 导出 $ docker export ID > xxx.tar # 导入, 区别:容器快照将丢弃所所有的历史记录和元数据可以重新指定标签元素) $ docker import ULR/FILE $ docker load url/FILE
|
Docker image
1 2 3 4 5 6 7 8 9
| docker images docker image ls [镜像名] #列出部分镜像 docker image ls -a #列出中间层镜像 docker image ls -q #列出镜像的ID docker iamge ls --digests #列出镜像摘要
docker image ls -f dangling=true #列出悬虚镜像 docker image ls -f since/before=mongo:3.2 #列出被过滤镜像,如before mingo:3.2前的镜像 docker image ls --format "{{.ID}}:{{.Repository}}" #指定格式列出
|
1 2 3
| docker image rm [选项] <镜像1> [<镜像2> ...] docker image prune #删除悬虚镜像 docker image rm $(docker image ls -q -f before=mongo:3.2)) #配合ls过滤删除
|
1 2 3 4
| docker exec -it ubuntu:18.04 /bin/bash #进入镜像,用bash交互,完成定制镜像需求 docker diff nginx #查看镜像改动 docker commit [选项] <容器ID> [容器名字] #将容器的存储层保存下来成为镜像,慎用!黑箱镜像(处理制作人别人不知道执行过什么命令),会导致镜像臃肿! docker commit -a "作者" -m "备注" 容器IdD <image-name>:<tag>
|
Docker contianer
1 2 3 4 5 6
| docker container start #启动容器 docker container restart #重启容器 docker container stop #终止容器,只启动终端的容器,exit或ctrl+d退出时,容器立刻停止
docker container logs #获取容器输出信息 docker container ls -a #列出所有容器
|
1 2
| docker attach ID/名 bash #从stdin中exit会导致容器停止 docker exec -it ID/名 bash #从stdin中exit不会导致容器停止
|
1 2 3 4
| docker container rm xxx #删除停止的容器 docker contaienr prune #清理所有停止容器
docker container rm -f xxx #删除运行的容器
|
1 2
| docker export ID > xxx.tar docker import URL/文件
|
Docker-compose
docker-compose.yaml配置文件
1 2
| ports: - 433:5000 # 将主机433端口映射到容器5000端口
|
Docker Clear
1 2 3 4 5 6
| $ docker system df -v
已使用镜像(used image): 指所有已被容器(包括已停止的)关联的镜像。即 docker ps -a 看到的所有容器使用的镜像。 未引用镜像(unreferenced image):没有被分配或使用在容器中的镜像,但它有 Tag 信息。 悬空镜像(dangling image):未配置任何 Tag (也就无法被引用)的镜像,所以悬空。这通常是由于镜像 build 的时候没有指定 -t 参数配置 Tag 导致的。
|
1 2 3 4 5 6 7 8 9 10 11
| $ docker system prune
该指令默认会清除所有如下资源: 已停止的容器(container) 未被任何容器所使用的卷(volume) 未被任何容器所关联的网络(network) 所有悬空镜像(image)。 该指令默认只会清除悬空镜像,未被使用的镜像不会被删除。 添加 -a 或 --all 参数后,可以一并清除所有未使用的镜像和悬空镜像。 可以添加 -f 或 --force 参数用以忽略相关告警确认信息。 指令结尾处会显示总计清理释放的空间大小。
|
1 2 3 4 5 6
| docker rmi $(docker images -f "dangling=true" -q)
docker rmi $(docker images-q)
|
1 2 3 4 5 6
| docker volume rm $(docker volume ls -qf dangling=true)
docker volume rm $(docker volume ls -q)
|
1 2 3 4
| docker rm -v $(docker ps -aq -f status=exited)
docker rm -v $(docker ps -aq -f status=dead)
|
1
| $ docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
|
Docker Hub
1 2 3 4 5 6 7 8
| # 当前目录的 Dockerfile 创建镜像 $ docker build -t <image-name>:<tag> # 指定文件构建镜像,默认寻找当前目录的 Dockerfile 文件 $ docker build -f /path/to/a/Dockerfile -t <image-name>:<tag> . # 将镜像保存 tar 包 $ docker save -o image-name.tar <image-name>:<tag> # 导入 tar 镜像 $ docker load --input image-name.tar
|
1 2 3 4
| # 登录 Docker Hub $ docker login # 上传推送镜像到公共仓库 $ docker push <hub-user>/<repo-name>:<tag>
|