三分钟Docker-镜像、容器实战篇

本文主要内容:

  1. Docker 镜像、容器 常用命令整理

  2. 使用Docker常见命令,搭建Consul集群

  3. 通过创建自定义镜像,把.NetCore Api运行在Docker中

1.镜像、容器命令

镜像
序号命令描述
1docker image build基于Dockerfile创建镜像
2docker image history显示镜像的历史记录,主要因为镜像文件由多个层组成,那么可以使用该命令知道各个层的内容具体是什么。
3docker image importImport the contents from a tarball to create a filesystem image
4docker image inspect显示镜像的详细信息
5docker image load载入镜像,可以使用该命令将导出的tar文件再导入本地镜像库
6docker image ls列出本地主机上安装的所有镜像
7docker image prune清理一些临时的镜像文件,未被使用的。
8docker image pull从registry中拉取镜像或存储库(repository),可以指定Tag(一般用来标识版本信息),默认会选择latest标签,下载最新版本的镜像。
9docker image push将镜像或存储库推送到注册表(registry)
10docker image rm删除一个或多个镜像
11docker image save存取镜像,如果要导出镜像到本地文件,可以使用该命令
12docker image tag为本地镜像添加新的标签。
容器
序号命令描述
01docker container attach进入容器
02docker container commitCreate a new image from a container’s changes
03docker container cp在容器和主机之间复制文件
04docker container create创建容器,状态是停止的,需要使用start命令
05docker container diff查看容器内文件系统的变更
06docker container exec可以在运行中容器内执行命令
07docker container export导出容器,文件类型后缀tar
08docker container inspect查看容器详情
09docker container killKill one or more running containers
10docker container logs查看容器输出记录
12docker container ls列出所有容器
13docker container pause暂停容器
14docker container port查看端口映射
15docker container pruneRemove all stopped containers
16docker container renameRename a container
17docker container restartRestart one or more containers
18docker container rm删除一个或多个容器
19docker container run运行一个容器,等同于先create、在start命令
20docker container start启动容器
20docker container stats查看统计资源信息(cpu,内存,存储,网络等使用情况)
21docker container stop终止容器
22docker container top查看容器内进程
23docker container unpauseUnpause all processes within one or more containers
24docker container update更新容器配置 比如启动方式--restart=always
25docker container waitBlock until one or more containers stop, then print their exit codes

2.使用Docker常见命令,搭建Consul集群

拉取consul镜像到本地
docker pull consul
运行consul容器并且添加服务节点consul_node_1和consul管理界面
  docker run -d -p 8500:8500 -v /data/consul:/consul/data -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_1 consul agent -server  -bootstrap -ui -node=consul_node_1 -client='0.0.0.0'

单机版的consul已经运行起来了,下面搭建个consul集群

查看consul_server_1容器的ip地址,再添加2个服务节点,组成集群
docker inspect --format='{{.NetworkSettings.IPAddress}}' consul_server_1
添加consul_node_2节点
 docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_2 consul agent -server -node=consul_node_2  -join='172.17.0.2'
添加consul_node_3节点
docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_3 consul agent -server -node=consul_node_3  -join='172.17.0.2'
最后添加3个client 加入集群
docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_4 consul agent -client -node=consul_node_4 -join='172.17.0.2' -client='0.0.0.0'docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_5 consul agent -client -node=consul_node_5 -join='172.17.0.2' -client='0.0.0.0'docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_6 consul agent -client -node=consul_node_5 -join='172.17.0.2' -client='0.0.0.0'
在浏览器输入localhost:8500,查看集群信息

client节点是不参与leader选举的,使用如下命令查看

 docker exec consul_server_1 consul operator raft list-peers

使用如下命令查看集群情况

docker exec consul_server_1 consul members
consul参数解释:
  • –net=host docker参数, 使得docker容器越过了net namespace的隔离,免去手动指定端口映射的步骤

  • -server consul支持以server或client的模式运行, server是服务发现模块的核心, client主要用于转发请求

  • -advertise 将本机私有IP传递到consul

  • -retry-join 指定要加入的consul节点地址,失败后会重试, 可多次指定不同的地址

  • -client 指定consul绑定在哪个client地址上,这个地址可提供HTTP、DNS、RPC等服务,默认是>127.0.0.1

  • -bind 绑定服务器的ip地址;该地址用来在集群内部的通讯,集群内的所有节点到地址必须是可达的,>默认是0.0.0.0

  • allow_stale 设置为true则表明可从consul集群的任一server节点获取dns信息, false则表明每次请求都会>经过consul的server leader

  • -bootstrap-expect 数据中心中预期的服务器数。指定后,Consul将等待指定数量的服务器可用,然后>启动群集。允许自动选举leader,但不能与传统-bootstrap标志一起使用, 需要在server模式下运行。

  • -data-dir 数据存放的位置,用于持久化保存集群状态

  • -node 群集中此节点的名称,这在群集中必须是唯一的,默认情况下是节点的主机名。

  • -config-dir 指定配置文件,当这个目录下有 .json 结尾的文件就会被加载,详细可参考https://www.consul.io/docs/agent/options.html#configuration_files

  • -enable-script-checks 检查服务是否处于活动状态,类似开启心跳

  • -datacenter 数据中心名称

  • -ui 开启ui界面

  • -join 指定ip, 加入到已有的集群中

3.通过创建自定义镜像,把.NetCore Api运行在Docker中

生成Dockerfile文件

本示例使用前几天分享的项目把AAStore.ProductCatalog.Api,选中项目右键->添加->Docker支持,就会看到生产的Dockerfile文件

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 8081
EXPOSE 18081FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["AAStore.ProductCatalog.Api/AAStore.ProductCatalog.Api.csproj", "AAStore.ProductCatalog.Api/"]
COPY ["AAStore.ProductCatalog/AAStore.ProductCatalog.csproj", "AAStore.ProductCatalog/"]
COPY ["AAStore.ProductCatalog.DataContracts/AAStore.ProductCatalog.DataContracts.csproj", "AAStore.ProductCatalog.DataContracts/"]
RUN dotnet restore "AAStore.ProductCatalog.Api/AAStore.ProductCatalog.Api.csproj"COPY . .
WORKDIR "/src/AAStore.ProductCatalog.Api"
RUN dotnet build "AAStore.ProductCatalog.Api.csproj" -c Release -o /app/buildFROM build AS publish
RUN dotnet publish "AAStore.ProductCatalog.Api.csproj" -c Release -o /app/publishFROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "AAStore.ProductCatalog.Api.dll"]

构建镜像

docker build -t aastore.productcatalog.api:dev -f F:/codelab/AAStore/AAStore.ProductCatalog.Api/Dockerfile .

镜像构建成功了,可以使用docker image ls查看镜像

运行容器

docker run --name aastore.productcatalog.api.service.001 --restart=always -d -p 8081:8081 aastore.productcatalog.api:dev

最后输入url:http://localhost:8081/api/product/get,查看部署的是否成功 图:

参考:

https://docs.docker.com/engine/reference/commandline/image/

https://docs.microsoft.com/zh-cn/visualstudio/containers/container-build?view=vs-2019(Visual Studio 如何构建容器化应用)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机键鼠映射软件_吃鸡,我最专业!---盖世小鸡键鼠吃鸡套装评测

Hello大家好,欢迎浏览这篇评测贴。首先很荣幸能够参与本期的评测,毕竟如此炫酷富有科技感的装备是可遇而不可求的,所以不论是得知入选还是收到快递开箱的时候,心情都是无比激动。话不多说,接下来就让我带你走进这个不一…

[Redis6]Redis启动_前台启动和后台启动

前台启动(不推荐) 前台启动,命令行窗口不能关闭,否则服务器停止 redis-server 关闭redis ctrlC : 关闭 后台启动(推荐) 备份redis.conf cd redis-6.2.6/cp redis.conf /etc/redis.confcd /etc后台启动设置daemonize no改成y…

深入剖析.NETCORE中CORS(跨站资源共享)

前言由于现代互联网的飞速发展,我们在开发现代 Web 应用程序中,经常需要考虑多种类型的客户端访问服务的情况;而这种情况放在15年前几乎是不可想象的,在那个时代,我们更多的是考虑怎么把网页快速友好的嵌套到服务代码中…

ai进入轮廓模式怎么退出_详解AI中扩展、扩展外观、轮廓化描边、创建轮廓

详解AI中扩展、扩展外观、轮廓化描边、创建轮廓在学习AI软件中,有不少同学分不清扩展、扩展外观、轮廓化描边、创建轮廓这四个概念具体的功能区别,今天我们具体聊一下。先说“扩展”,扩展是把复杂物体拆分成最基本的路径。矢量物体在组合&…

[Redis6]Redis相关知识介绍

Redis介绍相关知识 端口6379 6379 是 "MERZ " 九宫格输入法对应的数字。Alessia Merz 是一位意大利舞女、女演员。 Redis 作者 Antirez 早年看电视节目,觉得 Merz 在节目中的一些话愚蠢可笑,Antirez 喜欢造“梗”用于平时和朋友们交流&#x…

【Power Automate】如何自动生成Word与PDF文件[上]

上半年已经悄悄溜走,因为疫情,大家似乎也很习惯于在家办公。作为业务人员,如何汇报自己的工作,让自己更多地学习和掌握数字化办公技巧至关重要。那么今天我们就来看一下在不使用代码的情况下,如何通过Power Automate自…

easyui datagrid 中怎么选中所有页面的数据_学会这5个Excel中常用技巧,可以准时下班去摆摊了...

Excel是大家常用的办公工具之一,虽说上手简单,但是想要精通还是要下一些功夫的。最近有些小伙伴在留言吐槽说Excel数据处理时很方便,但是操作起来还是挺费时间的,其实工作是离不开技巧的,今天要跟大家分享的5个Excel技…

五年了,别再把务虚会开 “虚” 了

这是头哥侃码的第210篇原创上个月,为了配合公司的半年度战略讨论会,我特意留出一个周六的时间,与几位Leader在公司的会议室里开了一次部门半年度务虚会。让我没想到的是,几位小伙伴在这次讨论过程中都表现得非常亢奋,所…

人工智能正在如何改变传统行业

做了这么多年的技术工作,也正好赶上了这一波的人工智能浪潮,有时候我总是不免在想,人工智能如何真正地融入到我们的日常工作和生活中,实现它应有的价值。大家可能不知道,人工智能其实最早在上个世纪五十年代就提出来了…

[Redis6]key键操作

我们先连接redis cd /usr/local/bin/ redis-cliRedis键(key) keys *查看当前库所有key (匹配:keys *1) exists key判断某个key是否存在 type key 查看你的key是什么类型 del key 删除指定的key数据 unlink key 根据value选择非阻塞删除 仅将keys从keyspace元数据…

继续分享 5 个实用的 vs 调试技巧

前言我在上一篇文章????《5 个非常实用的 vs 调试技巧》 中分享了 5 个我认为非常值得了解的 vs 调试技巧,本周继续分享 5 个很基础但同样实用的调试技巧。1. 条件断点作用简介:顾名思义,带条件的断点。满足条件才中断。条件断点非常非常…

[Redis6]常用数据类型_String字符串

Redis字符串(String) 简介 String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。String类型是Redis最基本的数据…

在ASP.NET Core中创建自定义端点可视化图

在上篇文章中,我为构建自定义端点可视化图奠定了基础,正如我在第一篇文章中展示的那样。该图显示了端点路由的不同部分:文字值,参数,动词约束和产生结果的端点:在本文中,我将展示如何通过创建一…

[Redis6]常用数据类型_List列表

List列表 简介 单键多值 Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。 它的底层实际是个双向链表,对两端的操作性能很高,通过索…

[Redis6]常用数据类型_Set集合

Set集合 简介 Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个s…

来领.NET Core学习资料,7天整理了30多个G(适合各阶段.Net开发者)

干货分享2020/07/27大家好,我是CSDN的小黑,2020年的唯一跳槽季,金九银十马上到来,今天这波干货必须学习起来!前后整理了半个月,从零基础到就业,进阶高级开发,走向架构,三…

[Redis6]常用数据结构_Hash哈希

Hash哈希 简介 Redis hash 是一个键值对集合。 Redis hash是一个string类型的field和value的映射表&#xff0c;hash特别适合用于存储对象。 类似Java里面的Map<String,Object> 用户ID为查找的key&#xff0c;存储的value用户对象包含姓名&#xff0c;年龄&#xff…

ASP.NET Core中的分布式缓存

ASP.NET Core中的分布式缓存在上一篇文章中[1]&#xff0c;我解释了如何使用内存缓存在ASP.NET Core应用程序中管理缓存。如果您的应用程序托管在单个服务器上&#xff0c;则可以使用这种类型的缓存。那.NET Core框架可以使用哪些工具在云中的分布式方案中进行缓存呢IDistribut…

marquee滚动起始位置_巧用喵影关键帧制作滚动水印,让视频小偷无可盗

视频创作者最奔溃瞬间&#xff0c;不是翻遍了所有网站还找不到合适的素材&#xff0c;也不是作品快完成了却发现电脑死机&#xff0c;而是自己呕心沥血做出来的视频被盗了&#xff0c;结果盗版视频的播放量还更高&#xff01;&#xff01;​理想的解决方法就是给视频打上水印。…

.NET Core + K8S + Loki 玩转日志聚合

Grafana loki1. Intro最近在了解日志聚合系统&#xff0c;正好前几天看到一篇文章《用了日志系统新贵Loki&#xff0c;ELK突然不香了&#xff01;》&#xff0c;所以就决定动手体验一下。本文就带大家快速了解下Loki&#xff0c;并简单介绍.NET Core如何集成Loki。2. Whats Lok…