Docker(二):镜像、容器 - 基础命令
参考地址:https://blog.csdn.net/weixin_43526371/article/details/125811320
镜像命令
# 基础信息
$ docker info
# 镜像列表
$ docker images # image全部列表
$ docker images -a # image全部列表
$ docker images -q # image ID列表
# 查镜像
$ docker search 镜像名
$ docker search --limit 5 镜像名 # 只列取出5个镜像(默认显示25个)
# 拉去镜像
$ docker pull 镜像名[:版本]
# 查看 镜像/容器/数据卷 作战空间
$ docker system df
# 删除镜像(存在使用此镜像的已启动容器无法删除)
$ docker rmi 镜像名/镜像ID
# 强制删除镜像
$ docker rmi -f 镜像名/镜像ID
# 删除多个镜像
$ docker rmi -f 镜像名[:TAG] 镜像名[:TAG]
# 删除全部
$ docker rmi -f $(docker images -a)
# 查询虚悬镜像(仓库名、标签都是none的镜像 - dangling image)
$ docker images -f dangling=true
# 删除虚悬镜像(虚悬镜像一般都是些构建错误的无用镜像)
$ docker rmi $(docker images -q -f dangling=true)
防火墙命令
# 查看防火墙开放端口
$ firewall-cmd --list-all
# 开放端口
$ firewall-cmd --zone=public --add-port=端口号/tcp --permanent
# 删除端口
$ firewall-cmd --zone=public --remove-port=端口号/tcp --permanent
# 重启
$ firewall-cmd --reload
容器命令
# 查看运行容器列表
$ docker ps
# 查看所有容器列表
$ docker ps -a
# 查看容器列表 仅返回容器ID
$ docker ps -aq
# 删除容器
# -f 强制移除正在运行的容器
$ docker rm -f 容器ID
$ docker rm 容器ID
# 运行并进入容器 $ docker run -it 镜像 [可输入的终端程序]
# -i 表示交互式的,表示 [可输入的终端程序] 是一个有用户输入的程序,比如 /bin/bash 和 python 等等。
# -t 产生一个终端。
# 所以说有 -i 就必须有 -t ,不然怎么输入呢
$ docker run -it ubuntu /bin/bash
# 启动容器
$ docker start 容器ID/名字
# 重启容器
$ docker restart 容器ID/名字
# 停止容器
$ docker stop 容器ID/名字
# 强制停止容器
$ docker kill 容器ID/名字
# 进入容器
$ docker exec -it 容器ID/名字 /bin/bash # 推荐(会打开一个新的进程终端,使用exit退出不会使容器停止)
$ docker attach 容器ID/名字 # 进入容器终端,使用exit退出会使容器停止
# 退出容器
$ exit # 容器停止, Ctrl + p + q 容器不停止
# 运行容器并指明容器名字
$ docker run -it --name=名字 ubuntu /bin/bash
# 在后台运行容器并打印容器ID
# ubuntu无前台进程所以使用-d后会自动退出后台运行,使用 docker ps 无法看到 ubuntu 容器
$ docker run -d ubuntu
# nginx存在前台进程,所以使用 docker ps 可以看到nginx容器在后台运行
$ docker run --name=nginx -p 8080:80 -d nginx
# 查询容器logs
$ docker logs 容器ID
# 查看容器的负载情况
$ docker top 容器ID
# 查看镜像/容器内部信息
$ docker inspect 镜像ID/容器ID
# 查看指定的元信息
$ docker inspect -f '{{.Config.Cmd}}' 镜像ID/容器ID
# 拷贝容器内文件到主机上
$ docker cp 容器ID:容器内路径 主机路径
$ docker cp 容器ID:/etc/nginx /tmp/
# 导出容器
$ docker export 容器ID > 文件名.tar
$ docker export -o 文件名.tar 容器ID
# 导入容器 为 镜像
$ cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本
$ cat nginx.tar | docker import - lee/nginx:0.0.1
$ docker import /tmp/nginx.tar lee/nginx:0.0.2
# REPOSITORY TAG IMAGE ID CREATED SIZE
# lee/nginx 0.0.2 9b009501fb34 About a minute ago 140MB
# lee/nginx 0.0.1 e9b11534af06 About a minute ago 140MB
# 运行导入的容器
$ docker run -d lee/nginx:0.0.1
# 报错:
# docker: Error response from daemon: No command specified.
# See 'docker run --help'.
# 通过查看容器内部信息 docker inspect e9b11534af06 发现其中 ContainerConfig.Cmd 为null,所以导致了以上错误
# 解决办法:
$ docker run --name=nginx -p 8080:80 -it lee/nginx:0.0.1 /bin/bash
# 问题:
# 以上命令会出现无法访问问题,需要进入容器后手动启动,原因还是因为 ContainerConfig.Cmd 没有进行响应的配置
# 解决办法:
$ docker run --name=nginx -p 8080:80 -it lee/nginx:0.0.1 /bin/bash
$ nginx
$ Ctrl + p + q
# 或者:
$ docker run --name=nginx -p 8080:80 -it lee/nginx:0.0.1 /docker-entrypoint.sh nginx -g 'daemon off;'
$ docker run --name=nginx -p 8080:80 -it lee/nginx:0.0.1 /usr/sbin/nginx -g 'daemon off;'
$ Ctrl + p + q