镜像命令
镜像检索
通常情况下,Docker 的镜像都放在 Docker 的官网 Docker Hub 上,点此前往官网
docker search 镜像名称:查找镜像,会把相似的结果也查询出来
除了可以在 Docker Hub 上搜索镜像外,还可以通过命令 docker search xxx 进行搜索,下面以hello-world为例:
docker search hello-world
1
输出结果
NAME:镜像名称
DESCRIPTION:镜像描述
STARS:星数(点赞)
OFFICAL:是否是官方镜像
AUTOMATED:是否是自动构建的
另外,docker search -参数 含义:
-f, --filter filter:根据提供的条件过滤输出,比如:docker search -f stars=30 hello-world列出星数不小于30的hello-world镜像;
--no-trunc:显示镜像完整描述信息;
--limit int:最大搜索结果数(默认 25)
镜像下载
镜像下载命令为:docker pull [IMAGE_NAME]:[TAG]
其中,IMAGE_NAME:镜像名,TAG :标签,镜像版本,可选的,默认为 latest;
在生产环境中,推荐指定 TAG,选择稳定版本的镜像,具体有哪些版本可以上Docker Hub去查找。
docker pull hello-world
1
镜像列表
获取已下载镜像列表命令:docker images
其中,
RESPOSITORY:镜像名;
TAG:镜像版本,latest 代表最新版;
IMAGE_ID :镜像唯一 ID;
CREATED :镜像的创建时间;
SIZE:镜像的大小。
docker images -参数 含义:
-a:all 的简写,列出本地所有镜像(包含中间映像层);
-q:只显示镜像 ID;
--digests:显示镜像摘要信息;
--no-trunc:显示完整的镜像信息。
镜像删除
删除指定镜像:
docker rmi image-id
1
删除多个镜像:
docker rmi mysql tomcat
1
删除所有镜像:
docker rmi $(docker images -q)
1
强制删除镜像:
强制删除(当前镜像启动的容器正在运行中,是无法正常删除的,可以通过 -f 强制删除)
如果删除时不指定 TAG,默认为最新版 Least。
docker rmi -f image-id
1
容器命令
镜像运行起来后,称为容器。 下面以 Tomcat 为例
搜索镜像
docker search tomcat
1
下载镜像
docker pull tomcat
1
运行容器
运行tomcat
docker run --name tomcat -d -p 8080:8080 tomcat
1
如果docker运行Tomcat后访问首页报404,详细解决方案可参考:https://cloud.tencent.com/developer/article/1704573
最简单的根据镜像新建并启动容器的命令如下:
docker run --name container-name -d image-name
1
运行一个容器,使用 docker run 命令即可。 另,docker run -参数 含义:
-- name:为容器起一个名称;
-d:detached,执行完这句命令后,控制台将不会阻塞,可以继续输入命令操作,不会阻塞,也就是启动守护式容器,如果执行 docker run --name tomcat -it tomcat 会进入启动容器的命令控制台,也就是启动交互式容器;
-i:以交互方式运行容器,通常与 -t 搭配使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 搭配使用;
-P:随机端口映射;
-p:指定端口映射;
image-name:要运行的镜像名称;
端口映射
启动做端口映射的容器
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P(大写) 或 -p (小写) 参数来指定端口映射。启动容器的时候如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。
Docker 的端口映射通过 -p 或 -P 参数实现,命令如下:
docker run --name tomcat1 -d tomcat
docker run --name tomcat2 -d -p 8888:8080 tomcat
1
2
如上,就把主机端口 8888 请求映射到 Docker 容器内部端口 8080 了。
-p 和 -P 区别为:
-P : 随机映射一个49000~49900的端口到内部容器开放的网络端口
-p : 可以指定要映射的IP和端口,但是在一个指定端口上只可以绑定一个容器
1
2
执行完这两条命令后,通过 docker ps 查看:
通过 PORTS 可以看出,tomcat2 是做了端口映射的,tomcat1 是没进行映射过的。
分别通过浏览器访问:
http://*.*.*.*:8080/ // tomcat1默认端口;
http://*.*.*.*:8888/ // 做过端口映射的 Tomcat2,8888 会转发请求到 tomcat2 的 8080。
结果如下:
第一个请求是无法请求到的,原因开篇处说过了。
第二个请求是可以正常进行请求的,会由 tomcat2 容器进行处理
————————————————
版权声明:本文为CSDN博主「ThinkWon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ThinkWon/article/details/117638128