docker常用命令
1、基础命令
启动docker
java
systemctl start docker
关闭docker
java
systemctl stop docker
重启docker
java
systemctl restart docker
docker设置随服务器启动而启动
java
systemctl enable docker
查看docker运行状态
java
systemctl status docker
查看docker版本号
java
docker info / docker version
docker帮助命令
java
docker pull --help
查看自己服务器中的docker镜像
docker images -a //a:all
docker images -aq //显示全部,但是只显示id
搜索镜像
docker search 镜像名/id
docker search--filter=STARS=9000 mysql //搜索 STARS >9000的 mysql 镜像
拉取镜像
java
docker pull 镜像名
docker pull 镜像名:tag //tag是版本号
不加tag 就默认拉取最新版本
运行镜像
docker run 镜像名
docker run 镜像名:Tag
run 命令是十分复杂的 有什么持久运行 映射端口 设置容器别名 数据卷挂载等
停止容器
docker stop 容器名/容器id
删除镜像
docker rmi -f 镜像名/镜像ID
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID //删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f $(docker images -aq) //删除全部镜像
docker image rm 镜像名称/镜像ID //强制删除镜像
-f是强制删除标志
在命令行中,符号用于表示变量。在这个命令中,符号用于表示变量。在这个命令中,(docker images -aq) 返回一个列表,其中包含所有docker镜像的id,然后将此列表作为参数传递给docker rmi -f命令,用来强制删除所有docker镜像。因此,$符号指示命令行将其替换为由括号括起来的命令输出,以便在执行命令时使用正确的参数。
保存镜像
将我们的镜像 保存为tar 压缩文件 这样方便镜像转移和保存 ,然后 可以在任何一台安装了docker的服务器上 加载这个镜像
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
docker save tomcat -o /myimg.tar //o:output
加载镜像
任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像
java
docker load -i 镜像保存文件位置 //i:input
查看docker日志文件存储位置
docker inspect --format='{{.LogPath}}' my_container
实际使用中将my_container换成想要查询容器的id或者名称
查看docker镜像中的挂载点
如果您想要在 Docker 容器运行时挂载一个主机目录,但是不知道该目录在容器中的路径,可以使用 docker inspect
命令查看容器的详细信息,包括容器中的挂载点。具体来说,您可以使用以下命令查看容器的详细信息:
docker inspect container_name
在这个命令中,container_name
是您要查看的容器的名称或 ID。
执行此命令后,将显示该容器的详细信息,包括其挂载点。您可以查看 "Mounts"
部分,以查看容器中的所有挂载点及其路径。例如:
"Mounts": [
{
"Type": "bind",
"Source": "/home/user/app",
"Destination": "/app",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
]
在这个例子中,/home/user/app
是在容器中挂载的主机目录的路径,/app
是容器中该目录的挂载点。因此,您可以使用 -v
选项将该目录挂载到容器中并指定其挂载点。例如:
docker run -v /home/user/app:/app image_name
在这个例子中,image_name
是您要运行的 Docker 镜像的名称。当容器启动时,/home/user/app
目录将被挂载到容器中的 /app
目录,因此您可以在容器中使用 /app
查看实际路径。
上述命令执行后,展示的数据较多,可以通过下面命令只查看容器挂载目录部分:
dockerfile
docker inspect --format='{{json .Mounts}}' <container_name_or_id> | jq
2、进阶操作
镜像标签
有的时候呢,我们需要对一个镜像进行分类或者版本迭代操作,比如我们一个微服务已经打为docker镜像,但是想根据环境进行区分为develop环境与alpha环境,这个时候呢,我们就可以使用Tag,来进对镜像做一个标签添加,从而行进区分;版本迭代逻辑也是一样,根据不同的tag进行区分
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag 源镜像名:TAG 想要生成新的镜像名:新的TAG
# 如果省略TAG 则会为镜像默认打上latest TAG
docker tag aaa bbb
# 上方操作等于 docker tag aaa:latest bbb:test
# 我们根据镜像 quay.io/minio/minio 添加一个新的镜像 名为 aaa 标签Tag设置为1.2.3
docker tag quay.io/minio/minio:1.2.3 aaa:1.2.3
# 我们根据镜像 app-user:1.0.0 添加一个新的镜像 名为 app-user 标签Tag设置为alpha-1.0.0
docker tag app-user:1.0.0 app-user:alpha-1.0.0
查看正在执行的容器列表
java
docker ps
docker ps -a
运行容器
# -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行) --name 给要运行的容器 起的名字 /bin/bash 交互路径
docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash
-p 宿主机端口:容器端口
docker run -itd --name redis002 -p 8888:6379 redis:5.0.5 /bin/bash
# 运行一个docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动
docker run -d -p 6379:6379 --name redis505 --restart=always -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf redis:5.0.5 --requirepass "password"
进入容器
docker exec -it 容器名/容器ID /bin/bash
#进入 前面的 redis001容器
docker exec -it redis001 /bin/bash
退出容器
#-----直接退出 未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭
exit
# 优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭
Ctrl + p + q
杀死容器
java
docker kill 容器ID/容器名
容器文件拷贝
java
#docker cp 容器ID/名称:文件路径 要拷贝到外部的路径 | 要拷贝到外部的路径 容器ID/名称:文件路径
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径 容器外路径
#从外部 拷贝文件到容器内
docker cp 容器外路径 容器ID/名称: 容器内路径
查看容器日志
docker logs -f --tail=要查看末尾多少行 默认all 容器ID
自己提交一个镜像
docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag
容器改名
java
docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag
查看docker工作目录
java
sudo docker info | grep "Docker Root Dir"
查看docker磁盘占用情况
java
du -hs /var/lib/docker/
查看docker的磁盘使用情况
java
docker system df
删除无用的容器和镜像
# 删除异常停止的容器
docker rm `docker ps -a | grep Exited | awk '{print $1}'`
# 删除名称或标签为none的镜像
docker rmi -f `docker images | grep '<none>' | awk '{print $3}'`
清除无容器使用的镜像
java
docker system prune -a