From c026103cef143664eeb1aa2ee685cc8e55d97eef Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Fri, 18 Oct 2024 16:41:13 +0200 Subject: [PATCH 1/6] guides: update listing layout on landing page Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- hugo_stats.json | 23 ++++----- layouts/_default/baseof.html | 2 +- layouts/guides/landing.html | 93 +++++++++++++++++------------------- 3 files changed, 54 insertions(+), 64 deletions(-) diff --git a/hugo_stats.json b/hugo_stats.json index 4ea6d584b275..ff59b548403a 100644 --- a/hugo_stats.json +++ b/hugo_stats.json @@ -3,7 +3,6 @@ "tags": null, "classes": [ "!mt-0", - "-", "--mount", "--tmpfs", "-mb-3", @@ -15,7 +14,6 @@ "-v", "-z-10", ".NET", - "64px)]", "Admin-Console", "After", "Angular", @@ -78,7 +76,6 @@ "Mac", "Mac-/-Linux", "Mac-/-Linux-/-Git-Bash", - "Mac-/-Linux-/-PowerShell", "Mac-/-Linux-/-Windows-Git-Bash", "Mac-/-Linux-CLI", "Mac-and-Linux", @@ -172,8 +169,8 @@ "block", "border", "border-0", - "border-2", "border-amber-light", + "border-b", "border-b-4", "border-blue-light", "border-blue-light-500", @@ -228,13 +225,11 @@ "dark:from-blue-dark-200", "dark:from-blue-dark-400", "dark:from-gray-dark-100", - "dark:group-hover:text-white", "dark:hidden", "dark:hover:bg-blue-dark", "dark:hover:bg-blue-dark-500", "dark:hover:bg-gray-dark-200", "dark:hover:bg-gray-dark-500", - "dark:hover:border-blue-dark-500", "dark:hover:text-blue-dark", "dark:hover:text-white", "dark:prose-invert", @@ -271,6 +266,7 @@ "flex-col-reverse", "flex-grow", "flex-none", + "flex-shrink", "flex-wrap", "focus:ring-blue-light", "font-medium", @@ -296,7 +292,6 @@ "grid-cols-1", "group", "group-hover:block'", - "group-hover:text-black", "group-hover:underline", "h-16", "h-2", @@ -312,15 +307,15 @@ "hidden", "hidden'", "highlight", - "hover:-translate-y-1", "hover:bg-blue-light-400", "hover:bg-gray-light-100", "hover:bg-gray-light-200", "hover:bg-gray-light-300", + "hover:bg-white", "hover:bg-white/20", - "hover:border-blue-light-400", "hover:border-gray-light-200", "hover:border-white/20", + "hover:dark:bg-gray-dark-200", "hover:dark:bg-gray-dark-300", "hover:dark:border-gray-dark", "hover:dark:text-blue-dark", @@ -358,7 +353,6 @@ "lg:pb-2", "lg:scale-100", "lg:text-base", - "line-clamp-5", "link", "lntable", "lntd", @@ -374,13 +368,15 @@ "max-w-full", "max-w-none", "max-w-xl", + "mb-2", "mb-4", "mb-8", "md:block", + "md:flex-nowrap", "md:flex-row", "md:grid-cols-2", "md:h-[334px]", - "md:h-[calc(100vh", + "md:h-[calc(100vh-64px)]", "md:hidden", "md:max-w-[66%]", "md:scale-100", @@ -400,6 +396,7 @@ "mt-1", "mt-2", "mt-20", + "mt-4", "mx-auto", "my-0", "my-2", @@ -519,13 +516,11 @@ "top-3", "top-6", "top-full", - "tracking-wider", "transition", "truncate", "underline", "underline-offset-2", "underline-offset-8", - "uppercase", "w-2", "w-8", "w-[1200px]", @@ -534,8 +529,10 @@ "w-full", "w-screen", "whitespace-nowrap", + "xl:flex-row", "xl:grid-cols-3", "xl:grid-cols-4", + "xl:mb-0", "xl:w-[1200px]", "xl:w-[400px]", "youtube-video", diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index f75c74e73b4a..fd991c9923ea 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -26,7 +26,7 @@ } } })" - class="md:h-[calc(100vh - 64px)] fixed md:sticky top-0 md:top-16 z-40 hidden h-screen flex-none overflow-y-auto overflow-x-hidden bg-background-light dark:bg-gray-dark-100 w-full md:z-auto md:block md:w-[300px]" + class="md:h-[calc(100vh-64px)] fixed md:sticky top-0 md:top-16 z-40 hidden h-screen flex-none overflow-y-auto overflow-x-hidden bg-background-light dark:bg-gray-dark-100 w-full md:z-auto md:block md:w-[300px]" :class="{ 'hidden': ! $store.showSidebar }">
{{ .Title }}
+ +{{ .Summary }}
+{{ .Title }}
- -{{ .Summary }}
-Euqa2S5Zy zfmPRgf}~uLQEdE8jD|#hdHAls(OrKYYxedeu+pRJZjV&B_^VG+qumcvo%PZlwCMt`bSGw`!+cX-RJWz3`zL_8#!!fKd?dFs1k3KSLj z+FNZrSkf9L&7VCknRcHZRKLR;NQX3fo%PAyqVypzquabhXbt!4_{W&Axvm}Z8* z |FY^Se1SsTc&WvG#D{fi{nD-%#7^f_gi3u_pVw@?BT5wIKMxO|>Ofg_ zlyCIin!{;Spfhz{5Q(`?_owYK%c~dPS(pPLhUWDutg a3+@DzTErw-I{J z)DdvVH^P6kd`ZBNf)~W0D$n)EU6hNPTUJYFBl$umsXD;zxqIV3y1ft;KI~4U5P~B~ zOEKj1>B5~fgJlBYWatT|>CJ0-QS&>ffydt$%R-FCrfPzgNJAo*>g7qwF^#vydO@zi z^)&6aQK#}ix#^vj%vJFqy}#_W7)pGGuiu4 J$XP%`+y51U9> z{J`H9H=|@9ZOb_>B@RCO%agfrw3svLIJ0rsg}mwO4%>*v187JC0aj%G$Zdvw@O|&k zd$jy3M-GUIHMd+;_zw^u84?&fn&&owab HVNv zVZKs6asTz0?PsKJN&Q3Q0J+`VTWX0z$q^zkDs~Wf5xt4!$FaR4f6gSnSQ-ZFSOP!t z5_M1bYGtQsf&2>M^ZOIwAx$4Bdihf!Q?YlR99+0TWpKQiQa7Ur057JSuJ)jYC-LWy zAR7eLOnev?&6iIJS)lW(gnzh(gt !c` z@36*6?!uAm_;&hf2ezXjjF>~5tw?96#03rnrBVR_$sMzTp_~0dpY;17-K(@o-#J9P zu&yP@E~flgx=zoPAgrIz0sp1s*bN>Uq-8CI^ZBdT${ZNm?;XJP?NPr|LV}CKUB&dt z`+5R`8Hbc`x_ipHyWa-VkB!da#UQ)$cafvuY5J`D|94SLDx+(AMYKY@ScOGNa-ScK zjmG^nCeB~T(CTCpuS1i$SRjrTSc-209S_`B=x i)sJW)U6@ f%pP)!4_7FjM)Rn8`MK~$X9jCORK;4`=Q;<=C= z_65i10Kd{u-}ARzyB$bxvW_q&a@K5vw`&CK^0?M~YwKJ;*M0&!9u2*ma*H{H*ZBQx zovh=JQPUXfIIEH;2|CC5@~HGSxD5a716}A-ruD*464w$v-z(;f3wj|$+Y1;#P>paz zeyJNFIv=D7H DG zin%EUNn)ZqW-iiGG1nwbejcE)o{x&uNan=(VtCD_L}0^mb| 3t*^dC?(UB;$v15ncX=*6E&NqvZ${+H{=Qxl zBAtU(|FIF^L2_Z&-~eGbc?68T3>qv;?HE4U@j*8Et#_ypd_D>r{!e;@ZQOXjit>BB zC#Udc7-69&9EbS_;zq6WtsPxnuOsB_sN-J^Z_B1lPT`MMI_pWRg;~$5 EdUQpeCGK5lH?+20J3(Mr6{e?*OU^ z+bL)y1r^Nj8aO+oBNEp*C-+){^neZKMZ;L$r6Qbo|KrdDIPJls4oys)Ix*borpw#` zT;1mr?sCQY>@G#^4zmjX3zF#@L+YIrE&M(2k>n|Q2SBDz67gcGifs-YKWK~V(U>`g zhIm+^ED)iYsPCVj7fEs+fC-EUfK#9j$jhNzg&B4U9P=gTl_2t5>Bo5jMKUWD=nX;2 z5j#M$tJ4c?Mfk5(3IKrr?E-W&Hoe#jp1N>JPJGr`#j>)!yCLPA)oubKD*WhmvgFUq zF9Vs)UE<+nlW?yqCygan#cwndM>lds6$Jb$2IxVkv#w1WVT|g_!b~(@!}SCJ{x3Ge Bg9!it literal 0 HcmV?d00001 diff --git a/content/guides/images/traefik-non-containerized-workload-architecture.webp b/content/guides/images/traefik-non-containerized-workload-architecture.webp new file mode 100644 index 0000000000000000000000000000000000000000..ece82a543d7f5c43ff102980c6576345619f68b3 GIT binary patch literal 21766 zcmZU(Q;;r9(52h9ZM%2dwz=E3ZQHhOW4CSFwr%sBZ~i$KCuZ(4@**p MuB2uNK_SW!)plj!lkSkVtS7np_-R1AdQlsQe3jHIZr2-R{w04~zh?prMY4y^m- zBz_@~JMD?!SKu8HL{nf=zvB1kVrAmzPU7 iRwa3vWPxx0~p1&?>@m{SARGzjhzw zyRVzRguNdAzF*46`nA5g-wA-tYZd_a%l(R@C@ve2crNg$U*Bg9!2c5a>3So*Ex-3a z>thzE`!s$Kc;B00xYsAr&j3*T?)`MV=6@mH5v~Z-0&D>2U(UbU06^Mq_AkS)e+5I0 zJ|}?iC;iR+TYu2L0+9Dx{xx=Mzq0o%u mFMSKGQ0H1x30G40p zr@1AG8~rN*^
=oAO8D5pWLp@UQ)X`?dYi z{<(W6d?EZ6nES8J%UdJ>upNGL1^~GBZ6X4W7^&rFo3q{luMl_;3YsV1E9VGh{U^tR zUULkm^@6VKkPK)7`!;dll IKQh9i*6E@6lRSj@mQ_yYAOI*XvPtl^?h9j8OI3jIvT zW_4sGt9l$hsc5d}>_(uE1dP?K=veCzn^)Wb&Op&nX9}8*4B-+6>+tid4dC?jbL3b; z>=MOh;&|PyPg3^ Zrv%(qsyW(?}Z^9O8=jZ-!Ve3*;nK`2s+fbekQ&7`DhC74U_;OP-RnT<@Inl zJ;2LLe`N|`F(*$8N_ouAC7rd(L<^wFI=;$pYNd*hB!?91f4K&;7(jes$@9f@(6~h1 zbkGg(K?Pzv-7wh%>+pN#iEBm#>;p{wY#2i+XNIvm3hpdsFeaQndk?${&8MM9I~}Xx za^t0L{JWS$d5uSa@!lS0ov|glU0IKQ{^|`A{P!wBpJ&;R`lT<;HuX}vBWM#by0|mE zd(0%m3jt%Tn4P$f`TS5277g|5ef+2@LpaWU DeHSFib0;E5a@UGHhB@CN}Vm^yuaU8@qB7s~&`qHP&Ec>@;$* zF8kSg?%+7S#f_9 G~vI4j__QUG!XfEGK{+WCyoP#9!0yl%3mG~BWw4oEMJv$ z74Er7^c!tARX}T|^^~Z#DyBqrqHaBAQjvDB3@|_pvp5s5!;V@hx7bT6*(5Z7+#Ian zPDDIIUg0-HpcU_4%$~He`Dw9=rs287 *Vj4MBbw=dLDwV+4ICX$M~%qjo(ZHncH z?S|G{ay+2@QarT@%3yTgmwmz!n)`BedMw9b<(jT}B%^m8v k%3k6Okdn<4c=@ zQ|kjeuRZMw4dIWP`gH)BxN6Uzj|9W_Ro8!%u@u8}QL{gYc$vWIt@|E=C;g4{w=4d@ z>QM8ornuuX5y9wgXGPfWzDESMF*WdL!D7_)iSL9<>ByF_>>%GruLot%K?ut8<<^0< zMml+SK!KN*=` z6+vRFEmHdrnZ#1fw-GH G!OVJcxke- z5Wbhpp4a>S?K7ZwBNzMu7cx+-nuke}?kYrN0H+Q|ZHQAynJp39M{H%e#G0iIn2l(@ zJTs3YxWw$IGq~HpCjCfnqb$b(FLA<-KM$UwJ^_3!3?`as2R KCF#?X5(6^sg; zaI;PRqM!JA6%6o#L0!22)V2dh@YxdN@PtP#pbA&FCt_h;Z`k6RL7(ws(1zGdHx`VV zcGhK;#FfS6=P2kL;*;9pBTb1uj$i^?UVX90Sx59hoC=c PgbaC_xPbsY!^ Y;>61A>}Rso zaXoTbC*PxDYE*ZclN1OGrvSt}E5Bcel}8dSr7$5Q?WU9Hq}E@^&V%&xk4j-`jT9jS zUE=upZhG!4Ur!UU46Of73%!RGC`0Ob*2 ^Dzaab7D8o^y~1qz98)hBK0(g{rNP z`NC12HBR-PC8$1ui9ZoCda6+FeS6fA_?jR1ZaXK0){#|fqCaerZV2)LSa@l^FObkU zcW}>%|Bf&6MxSeU{oeh)6KgCjJBN3YVD8cN&8=@ QRzpKZKsIX31E*0b $B4{+czdc&bJS!sf5-9q66Y5|`g{2y}{@OL3LVaZSe?sQAil+wwTk{{*d46)X| ztiP5^W647w@6l$s>m_rU;QIe#LJKhTtWsf`L8iBX-L7tBcY$5a84`z@a|GgWT+87v zrx%#Y;f|uh|M6n*{3WRWaNyGrb|2%Pa#J3f;+?g Y$?+m>Mhp5mXsq_#Ar85ak z^io&Y+W#K}VIh)0)E^c1IJhnR4@WFJ8oPT6nm!qin7 {D0^A z{|G3AffESm_j~N)a>@eqn-vLOlkZo~_u{>vu>-vlQCcZLKl-j^Ph}hFMDZB0zDw8u zUkJ(=ND&AgWp_4B3FHW_cn2K+C-A-(fv`3m?Wr9W#?ng!nhjw<5Qxi!4yOzI`V)i* z2ctGLZ&-mQ1{nxiX8;%@@>**h2bc%X84Lm(iJDKaS1{EFp422e?#tWzQ5hZ77Ivfp z$PSaXdrCMES>vPp)+LcC y9fQB5R;QC@^~4c{%X4_vED)D z0e7-VR(51lsr?1^r4n`4M0AJo?YgbJWcDxHhV~>FTC8oqSVYO_A|4#=WawgFGBO-i zOc+lRC*(nEh`Mt;!4)^qSRO (cGwmsSZI8>lyc{uV zDZ~jw;XY5cPeFK=h_)oVwAM(#xqx z133&ti{wr#vkYM}S_Vd)ji;z!ho`|FjFeF2y!dzK+Ml35Ro7T92>p)vn*d^y>(opF zKK_*1L8$k#mCufGKh toNSyvnvjtILy8XJ_P3RE?RO6%(ig0grBXA zA+xE4aHII5-RS{g4VzdGJ1f%| JiOb4P^E(c@IXc5(uM#=gO^v6folfLPRujUUI(i)|AJH_` z8zUN;fs`k#2)!Yw0$PW(*h((}kPgs3((Z3))F)~q<8C K$9;}&)4w<#IS|5BJ0Wm=-c+waphJ{f5>lu@g?S{AWqN_d= z<@SNh9{f`kBf?zC2UMawb3bJ6r }9bQUy5Q$|J9RhLzM9>+`^dbIfW`4Oq6$C7O<4Q z(OOSw&~7qSp^i51lL?Mnospd!HWHGb*oH0m R{E{V~_b0di@U^LJd#(5JS zbWemw7VA 7`4H`Nna8_f1O)fzBT@Nf!)sr*cziC|Cfz*P8>+p%t z=U$sC#xPVbxM(tJv3LLTK57k$@#u?ec=S)1v^;H23%z&E!(4G+S4gPA>(47H`7()v zR5>tn2D4`-S38ES`cvypn9MPWXW*5G8G*J2(Y&l9*p()1bc)+Yp6~av 8bpyyWe&*2N#Va_ac(1bT?&@xQ-QhZ`lUV&+=8XimRVe*H=Qp%2Zy@^Mv}=Q z82Q8Q%PmfKh*9s>m|r@FMF@6MzzL~d^UJD`5^dil67M@Za*_Qm^wn({e}l|!{|%cP z *QAwAsT=P&gpwv-fz~-Y2a>5 =o(n zjGymjr#F&Vc+$~WGu?(njSx`Uv1NhVqgYp+&xq!<=ujKEx%5c^%Fdwn^^|b3$3QMM z`N+Xyj}BGoam{K)bTTf`pv-a3+SlN%F`Q`=Ek0oj)3&e!!g#%6ToR6@exV7T#6%MW zzmRHvxyK5-`7UaEN-E(eP@ws*Z~zeI`krPR{Jv;H+Rh!!<`;BA8{Tdwr#;3(jB>E= zIoObcAiyct^UsCA>Ra~aRIZa&SB^<29n7}*$uW8Z&iMqaE&@TW4~vZ0I|~q~vMvQ! zpxTqZ_BIkL2{Kx e_ zulb%i?vHMY&t7eP(iN6U#J~BP1{-BLycNHcaFsg7j8_mtuM6&0r`UOP+F`QE@X%}` zyV1(+Nma3K&2)`6a-iU|^b2apU%`2R%J5Cxwm{zlo^avl z>ogA@70uDmz$z*!Y)qxVHXf842IrZc{_H6LOO5X-ee@-Qs*KK$wlyHA-SeXeE^+`@ zeu8_JfI-DJWz_QKwlYMU_-H2NUK~NL*;1VR_Z{k1wjbX{%+BNuixq!YhB<=+M+fa9 zjuTm%D*0c~)D9l|ANZ~yg$U}3;1GeOd2!6YrUFfTTwMN%+|+VI DO4c2WIUhS zPdgvbn6L7Ctw1ptmZ`9IBWVb}49A;_L3`ZaKLP*3IjY4{(hjQxt7*kgD@r?`f}&vF zGqJKE%c`CfxSE|Ih1F(Ve02K|?xL3U<2d-uoNqf LV!^Z~ zf^edM>mqhOhWcwR0)SZda>;=mF|K-FW$KGU6?1a1VB#JzveXxz_T$Qrrm_a1`Sj`o zAh!ewk?(Z&bLOMkPv@no>qS|t_;u0Ez|S0kEG}|FHUmF bhayw& z3-IfLeHOIKrDFkx 0pym8&oIXzRxey8-RaMaOM$I}ON|Mb7R z?@78hTLyh2>i7M~O5a-$@hWmDQ*=+N^#V8qpn5azex?M#nLh4F64{6LREa12-MG(X zT!( =kV3-= zI{8&tM^MTjAT`u|nZO?P6_+`SxKh{G)UkpmKTWUHdWRT3# qce$xI!fcOOx zj0UmN<0g4gF^*p`gsC$POW?|vazQ^9Pn2R!waVE*8{m(!?nA%!1d{|^9~vue`MW>& zlH $c_y+a*T!<)VXP+Kt;@Tl9nXIJuyhY_EP2k)Z=xXQddFrR=?@ zQsESrPv0OTdIA{g2hJ57mIplw*hu48`gN2e!efw+-A83FBu}jlr*#7XGU@6MeeXdN zIMqrzp2b dzt*yL{Ysewa;me()ZE z`8E|<3c#pBRl~e7{B;SfQU*V6wERb1I7X0Vjt({LQ{xhW8~&$q)jseW7dh#EDDv9^ zHUk!!QR^!|)@++3&$p>+nvx?P(O-4( eWiE4P%??!A@-% ~KuDF!j?DkDpDZi4cZx_`3`61i)M A@mduqjD4h@L$=&<$-P?j?e8;m(p+ zCfU3AcI5*Z9K~eNm48V8c7bJnk3eJh$uU&J2gYc?OP?sI^pfG2n=1&J{Ot@{Jam#9 zsOaPFqas`2K94WJIe~e`jfYRllIdyC<|oI&d<6p*YT4$t3({z$L7VGXHbx74B`h$l ziwfyAoL^g>hF)2?`_WhcWD;k!s|Vb5Q|c#!8N`v_MIGnj`6(R(+4xoFc9ImhLFJ09 z3 b&(g 5M8dIGmv*xv;_89Z`t1pSB|LocZc;R9g~9XpM{&*@gz!YtCW@!mk(R;k^6fnKuP+ zTujb`I5q+qM<%Ar8_P14jfn$tb8@Q2kKDHSNg5f4-B8qjq|GX7{pLj4+}>HJ#~*>5 zOZ7(yzHYR~V#k;MP)z=Gs6$SN>MN(78mtU2rnlMauz}NF*HjG0^{q8e5v-md>+YCx z33famWJ((->MqNGT&BcOgv3$>&{cr^lWueRHawa&Wf=)(U;v!@<(|=BP8Ni#6 z9xLwsfl}JzM#3eyJ|2yBoJ_k?{dgZS@*pNxp)oBaTmVEW@ro|lfh@{l#h@cT0)La{ zmmK~igPkHRbRN?U-5s<60z H8@t5xw*->8a;&zL?wF)%f9u3-r z-ItJha!->4zZRRc`VaBV?Q1;FcSQCO{j=D{*qyt_Ig(-AXw-M>x#|9R%u93iDJ0I} z3&(^JLe(uRq3;_#ydxfBb-qUt{r#-e8;@R_Q^vjL(g#HPNv;0@zQ{lmsNvuc(0q<) z2nN(0FwalNL1G>cH})NRGTCUgYA;=dv!lRQz^q5}&>MJ$Wkd&cn(JGRAx-?<$$^qC zJQMDgk7Y^Fb!Hxw_k_USKka1Wpl^r`$91WkalyV% `u9~6xw{Mwein~% zcZ{5DwiSvd5)<3%MU6r4VX-VunI -swO8FW03=%Z$ zraWsAP2!(mYI3N7d#3nqgc v3ser<+57W+gF~4{5p;`0Dc3c@Lcu ho$~CG=;AQz6Py1NPYEasddk^99 zDfBFp7)$NiM4wU^w>ho0Cp8dPJclCAbw#$1*2tZwJnt~nYP%xQFXl(zSWiZ&1fzj( zwbBRiE=kJ6{%yXEPBB>q(rP+VEQ7QET|E3FQ8@NoyTQB4_QHsZzPg8E0q@ar@^_QK zyO{-eyK1v)Qw9OMU=oun777XC;<`eQ_v3-0 vv%Rx`yOr(&pCS8YzGMhugQ5QWe9=kXzl(m4(U4&=LLnJ<>h zdyl;ui$whEWd@kXY1OQeG-5vUGQ|i5Xz+H4Z|E0)daq-f63P8n&ML?4%Hv@V87_|{ zQ}+~aeDU>e450-m1*)+HzFrgTGl=!r+RVE?K&65j5Cy`P>oxIX pg!%vSbN#Fzm zJEiKB(4s0;6@JjE)5Lj6Qz*`?WW6H=9UYvLis*#NiIw|>4k &6(|*j#jGl8d#VM?&HU u}LjR$-taRW(eTuv8Jj?-J-ixwnZcFw}XndzNbI- zoY|h02M)NTem@JvRob-uCas{~!zPJOKYnsjz|R3*^&rSc!0NSs*O4 Dm1h8Aa{d7Ui-I7Y*@4 zd`SmuOpTW8A!uZ})KTlB?tW$c5YIUXC-$IBxok;?uO=Yxl)-1gBA_B$zWQBP)pna# zsJpySx}BOCyNU&t;LH7imS1%+JwV4L#d uyyi!5YW?i&mdS%)> zR=S~6fq)QPD3HaqXi7 zTXZ8lhn?{v#dLiJ7DL&U5e kc+BFIxmq2!U4b)gr5>7YBa+%@*fGY#J?|`WzO%0 zIXT)JP=@R;&}2Dy K{l3v4ps>0| H>o5*jZ?3k`wNd#>yJ66@r&$&IOQng1Nm-WwXx~E&=2R$L3Yut)=v;rJg z&V!DA$4@ulOOWYA^HZ5ZHPB2mNQzT3y-LRlH`v>~Gh$aJrnT=yS@XjY@C>|Jv95+4 zUg%~co88(q%TZsZ }vK8GfCsuRI`Ev%I ohJFMw4nnhh zzwzsegEB@a5$}DA8}Ezn1<2dyZWIQ%Ns_TR3xHzak*=YMKP#72Y5?*NGiX%nLf;1z zS4V(oR7^rWTqT@z;mLTX!Mpl)lm_^>u8P$i*4s0d3|K|>fgv2hMCj#dzeBG3fst0Z zAN|K{^+JI6WwT!G}NbKnmDCpW}mQ`Ej@7^{urqjM}ke(qDloD z5ig3_I#1he6bF&Jk{5XE6(|Q9Kkmd_WIjV4vrh(F{L{{Im-U9`6F-i8d-{Rjg~Cm% zY8X?;jeoA;u7(7!6$w|579$%;?)UWZ_1FES5vTm@>#viM(M>0N=Jb*_YU> zibNSHgp1aAzBUZYslgdGXMWgE=a#sm`|JuT 6#=IZrjK)`6iBIyqW0VDhAC zKI&(fIOKhhqJDO (ow}`#}qhRUV_4V-OMk_Vb z%QJLW2|w~SjMF)3*gj!Z?3XDJbB@@O0iq)}jn)A_z~IEQSGr-)qm^joe@W0O=4*YL z50+L5EhzK-BI%E=$RLQI%(;koF?%I!cy;P`F80mfM1TPOiQ6xAxM-3k0oNB?h9z38 zK{Lp{HhjKdT>`K6seZ#!fKa*XvJb>TZlnL*`2HJ<=|?xC4m2yG*`+GBp4jZ1ynZTp z22X{=el47IWh-wc{Tc1_OLpAEm2%#0tbT~lIJlb9qJQ4Y;tQ*S7C>05cV%`AMRU5d zlk0VC#TcN~ ?Wa$>h|v`#>wO1 z%( dDxF_q!&rLf{@ z6TRcuZ}%T&NKc$DA!HWRxqM? 9XZ9 zhU9(-Cp>l~6?g;3h+oC6S2ogVHiQ<)OD^6P);H$0?Wo)d?vSl=;iC$%aCqEO)d$3k z7I2JMu+7crX{x*z(nS3_<5d;X@+0HUoJi#I_ U76)OO=3@n?j>8~06U&cbZrf`H7Rc5E!_Km-7IriuW>}r;L$UW{ z1pEcyfVbA71JlK!8k~#VtdDx7^w$J+}=7E~(=AjD*mg57r}# zezP6atrab}(=q8nW&dvGZeY!f-fAq?$tYx@Dw!0dkz9!P{`V_2dKYp8%lSl $yZRySH=$_NyI?yb> zO0r^Q5)Chs8|$1ItnH`k1^3e9kT{8upSQxx_`NkGS#Gs?VJ8vz>1QM)Wy?hU;G~_e z`2^wA8>XuwfcLj_H5avIkhlh1Y~#YDV47!}1SEOH;j0pnyU9O{f`(;gac-@6iNFmz z6B&$ZV}FruRYt@N5iSIjrJ`A9lZ>xw8RnHwP)X%!hD;qg3zt-6dY-|x9ek=qX^8rx zF7;9Pc!`G6+xC(HGFnd+-!Y5ehaQF5t7r+2jlsQC-@H`}Tq*5f`l~$lsluVW*F?G1 z6*uk!RQ5Y*I!tI`RR{^WESqlYr-~5@@3hVQa4w0imfgblFXzQF#7)$e=ws zi3B z>2n0${@PVb`e7qwYw3mO HYNtC#bvp&g>q;Q{K&MmX52lLC)=4^|IAdnZ zyJD!J*(cot%P+W%`vg(}TrK=ktCB@jJg>BrF^rsxPd!r8oRADgXs3sNcoqo+4HKsF z`zrKBU;&mlW)ytNV*_`J@kiFe8zdy*h_k721_m1|Jm!KsD#zx9aP%uKO;<28N$2*& zgQjyv52oLvr_=Bu{Xs4lp40gR&KS!Xy0JcS##$)S*l=g8VFA6`MEs@r8}WD9D}SvF zH-v<~AYMgJf%DIjVWD`MGWZSD!@rjKR2O*& wD@imV0c!jhqlUNK2&+H5pheUnK@gsnGxlBB?}#M)I}IRG z(S@Q2B1E0;8PuNd%O02@S0u=5$XVOU5#qrM=+Jh)2PFe)g(LERrBe{iK4P (;Mh-gZy_^ozQ&gDJerK3I_WU#U_gm_2IoQ4Ggi@% zIq+;|5r>O`*cA11S~N(WYMw8VI6-ZUeNY@dCvPhUsJ`44mPqrQbVr&EKGX?xOy$WQ zloI=Ch+_oYU#FuvmqC6T?#CHo6CH~71+t2xbuv3{)Tf9Y&>I#DaCZA|Ca@O{GG`@z zkwtd1q#r{)AFKUjLw_}gv+egDRo$;{f5jm_gli2^)q<-~nE~?|`Fz=TUP <0;ZGKB%(|YS zj--T8N+APOI|<|e8C1R^vB)`o+GX>Q!!;MR%{pUr(jmoaj`Z*BZ$RUnek<0(o9F0N zxi}D`CI olLq)-RhA|jMbdxvUnfqXL zBPBfXqX|tPAEC}p212#r> aG4b45BZ6KcMsUB6%hDF4!-LS_5oH@ zrMZ_kn^E&-3sXiWXhT{zv|~|JPO3TVF`aG}M+<}~J}luSq(lz^fWZw-2{;&P(|9>< zqP(Vel7OLs0=3X22(hmpO>Ieinx?S!V!q6F=?8^Qr j9$@YCZPIXs zZIEnl3+`wknF~er<%9w|;Q)A^=GS)|Ie2ogrI-bq%f4>NIUwL5d@is^*_1spRt}z8 z*;8cD{(M{fT_k}Ou*MiMJw?)eg4!WuhKk>b*d4p|1CnoQqf7;_if!CKaA41xH$ArQ zw*4q{cx@aW@cmI0EPv;&elvY1UCysG)8t%)1HH9th+KLS0>%x1VReoV02`dFM)>Ju zoQp$GCHd8U?c}Q@Q*|a=Rt>bUF)#fYT_Or6xXkt#ZO8f|aOq_OZ;MNcUqjJ6FhZf8 z!e@dmG&UKac!9HVVy D(xtYs z@4JD}K)!`|d<7%h%GP-6IUu*+cDMwOh+*MUzq-Ie4g!QI+uV5}zM7pmN;J>c555M0 zqm=P|X~X_uo@JpQ`14H2u6CH&!e|_?Duq5t$gr2+mtILM{UbPIf(uz`dpbj7(mCDP zc=z5?wgfg B(BG@f%UySShEmb?nK1yd>;&)5+J_i}$<>63=$K z>Iu}(%t}QhO^zCCHsz)$q=k5RlHdL)C40p(&4H1G3H#sa6z(ZaHlee@KMo;(O(2HO z^qrIr*H+|dxl4~T?D_F^l@-*i3Rhkpj(?YGYAN7WTbpIjs3eQKNr?q&1@nQL!ANX@ zDy{f%)hj%Htjh&Q{TX40d3tIxu_w@Ya<+ujZ}ale8z^3G@(;1JH`7Owybc`8 (vIwp3wE+e|w58g9_F zIj`IuCK06Z{Gk@wgH%MEwjhE!*sKswR)bqQ?^@zSi!eup$ug4KAOT)hxFaixDIKKL zPx{iNc| *yWqMC%bv(NIvaf z;-M!6;>a`91(StmSZ4N3e9ww#Au5%YZY)On0X87tp&Ww_ma$sEpblwoG_tFPIT%Db zVVS88l_8S}Hw FuB7+mg`qRo0+)xc zMU{z2gOrE>_C$=O3I2dd^r5;GaS?#l1FKfFjLAPe!tQxW)~($9$z{(a`7(mVf(8V& z {-?s3E1!44bgvgD6dqwNa)Aj8Dq#UMr`}kUg)z@ zOXj2JmrH?CH9D`_!t|x5ZI_ehJam^8Z=Wqv-^kc{WzSf(Vt->-0AI@?E3KowiyVs* z^cV=jMdrv6mchdF75c_+c~@dIPao(_t?vWcBnUHdJnV^BIs99dis+6Xm10odCrvj4 zwqMvn)$XvEd?q5Mu2y;s`Jmx5H)tO_ 6ATX+u@T!ayxG*?hm`3Gb zFcfZ|s06T_bL%Fu=etH&yP0hfJ)>yaA8U{PaO9ytNUH~ppGZ#A&^#eY?=f+X=xxYo z*tSClm8%ZCiVf*E?uO;G`O}Dja9 $gg;)i?iL10>AhWLvmKhc7f}UhZ{vW{W6S z&YHgDDE>uKO#K@Yx&Vo$+d{~*QP|pcg|J-MsqHztes$TXu~5V|>;}iLBSwHaWZOXJ ztiw7EwJ~*^GOKjT6u^{Z?D+3<3RC>zC5=9Iu}_boK&!wtj`dv ^PYRzPXL5j$6!q zm2(KTnJD&zKPrtz{~&Q}VCgs0hwFl2oWk|lyWIGIp(=&=fax-1Tz7ujC<)W~8n82z zQ(EB|%vp{k{U6*JgD^skIG!Riyn#r7pP3T&Bn1d<5Wyc_Dl+qgFZ*VS-dg;T4l @p?E6#5R!=z3IL#=ViDrnJr=lY~qXlf7{!}(9Iuw16$Kcc#e))82 zBow~zGXJ#lGR({e%>1y9dLT|D)9m6K4~c~HAi1IYoSI9kVRxqMG7c9V2KFk1`^e_T zWjM%5t#MFdK14(VT&m?iqKm!g5^#5CHd;lZhiqOB(CNU5*z7YR=bNorUfs9Cpm4DW zSRp9-R14@v&@Cf&9yL5$8ES!9x<5%Fved9kU{2qH#Zb0Y_|iN;;B%vlW@aJ4({8`E zJXhBSQp;l?lX~>qzWy)dD!M+>TPG#?E6oT>X6exeV adENK0GFCi&cXZ2|)i+i2~jgSQ3~GuVs`q+_Zc_3%<~07ZX=XoznA$;LvJb z#4jjgGTr~=kYU4f5( AWWvFb|1JXBJ_OzssutF*1>v8X19D-VJ_fhLaMcEX#X z7*z{g(*we7j~p@N?2wmn9QjWe-EsBjTDFWijcAKQCzB?&=_ogi>MdiPWDxVERXJ#L z$| b;P@rdm)}-WU(1)V*<`o(5gDFlDNK6dZGy%b)wgbE&bboBSD^ zBWoTcSt6kItqs(FV!6BU9LqaKBL$IS?Rt~6;w)Old8L_kE%faqQu}Wwy~?i7n@;#4 z17s>4{M>+FDa{kVkEh9%3GBe(2aQ`OtA{>QRRwK%Wn2ADv~X${TEicsQ`KI`!B8zq zw%s8mA_y7iuIR)e9Yi1IIhVBzy AegU~k@ySkROO%GOk%1DH zyiwiw!yMml STZOSTn6|qcGFOZ*sOPv0F%J!sLYU+^ zFa2X-5XyYtR+TG6g;0uO`W$xl$@X2fV^;2J!ayp_KLf-2>MMVfC6acJWcFJa^4uIh z>&m{DDVORG%yzqYH>vp2Z?7ymsDgCjmcE=9_0|4U^dCEhp @JCpbr89`)c9;#i?ZRLR=u(btq-%K^qAA4xY1lNB2~ zP% 23xq+l7HP_t@W03tQx6rxSvbM`VQbA?`$+}$h? z!9KzN)(#6fHms(TKQ#41tMSs%_zts>hg{BvsD9Xfk(I)-~6l)elWwVii-^jhnlo^VnP1D9>>()CJ zJ;H~L `WfI7+|Brp`3=J-Ul3&6K$L$5W#71cE)Y zGAj0=cP`%Xk=w#`%`6I1{RCA?1Fve%GK;&y{(cyRe*udOey}hZ3l=jalk4 Eh`IK@uB`KdF+rq>wfP zGXpFmuvPkiZEtu^-dJ_2tBPoTn0()pf&b;bV;W=sW99azW0`#*yluyPSTyi4?#=73 zFLy!|) ^etw-$ymN-IGWvprQTRTi5q3wqD(K6-O~HAlb*sg zIHO}0qWu{n8Cr?lLtv%p%(?Zv8c%^1$4@I?SQ}W+@d}(N^6*MOCFVT%_BTRYd$2)6 z5#J<)Ed~j=U4W!liIKvYq!AJRnC~noZO0cHc )@Iaa{8u zpA_y_WcE;0EXMT)vW|PSXVn-XbWn5Z)nVi}JY%=8C8!};xQL` ;BkV~Lhsi4+k zG_(b@wX2bb1y^yiDRK_CC9EPlLF~99)udd~6u%P0PoB(I)I-gq0-$ zr>knnQl}`vlH`I40Y~YG5N4k}y0ZO8WrPWgd#>GzWoDkBv3kJI^i%q<(DFePCV4T) z#}~NvYV}y{g9ck9SAGm#CV$FxlZW)NrNYAMqJKkQ0_@5@x~jbsP_@hO+zvMgbTIJ0 z0-zLM>r!R}13WCjKA6~Oy1EJP#UUNnZuUR>0_#Y@?5Z#B?IsGqLWMIsuH>d3YaUJh z+CON?h=;PPqso}UK;ik+!HuzGt6@7e94T)L iVMl*t5`dc->6zE5Vpyk;53RVl$1_bx{knl?&IX9fY|s=0< WOPsJMj2@B{~7z#136_9H^iV4ga{KpBq0-a9q z%sV}2LXWIftNE3LLjB8xu%%hz@_x5FxE|k4o}BX4`~*PY@*{u4-%JYGR`RO6f9s@g ziqMt^uYD$4aNgy+^~g|F ;WB9)YPVRJCLvL%hriApZ7SGXZ$Ih5C?p^TZh3_LG&OiJSnS)^~hf5BU>sDcwav zNBD30a?mAT2 gs~}BA@=+iF00p2M7sgsNpmj$e1Zi4J zX8Hn^y!*iBAeT@vh7XYzkjDm?k#5F_d}M~`5^taS2{UjJCrs{ei*H~b96890?h3C# zjOv6-QkH0(XuD!7O$RsWhl#HPQ11sNXb%lb5N@Sn0#S-_#E(;QH-J)m53Cx~zlhUr zs=kFF00tBWNddrXzzG7Vk;4eIYSu)zbO#4n^F11GSc|}16WnNvnEdU;thU0cAgK0E zP3y^LChNHVj?Fyck{r1AdrokY(7`Rm{X#5c3<`A8MaOX)XoCob_G69T(Bi+MfBA!D zPNckw2x-PN$pGP1dg3b-zRXUeBf$Qk=x4=MxGnMZh%*B=U|bH)nbuT-6<~rK=76B8 zF&uZPn4~q(jh*#iVyukMreMi6nY4@*)RQu&Yqy$UyG6cjS?K@Mb+kcw* CAHd!t4w4W&jIlVf(8aVAf`*SNpTnPJ$YBH+d}KR68c_kBM3x)H2oPGb<-tqVJm5 z{eV_el?IIg;r_^M1+msSw~c70yRo-Zv` 2vOwDWEB8cdE7+(B*V)C!yjYuM={84gTq50h{!*+(a#j5E6#9e|lS3fv+ zA{}&tYZ;^Q_H2_1HBnY`1s?x@U|P%2mCx#*4sdH(X;g6+rCST{oK YXff1$O**f7J!^f@mwyL)F zt#4iAPXzEG&ZYXqKbY7PB1Ef2?1pkm{-CI-*N{tcm zp&QKulT6-8aHBG^x-;Y{U#{`=2JBD)qC`S6uBT0|%|pioI3B2wG+nuKp`_EB5Z-K^ z8nV=1@-~V3#nIqW(#_d?YU|;}IaS71<$k&&Q;9k@Y_I-K#<{q)98mBm_Md4R?Fem+ znDI7Rcp{j4usX$;PhBDYg}G0G3*&t(z2E==YvO$k;OC$p*$6r2X-E^Lv&a%gcli*P z6rGRjno `Ip95MS~=*bKhk=2%K$^Lg)SoR#~{ z6s1djeEciwms}Vn_8UP4DNT7?PGgiR0o_CdpA?>4JaxE7f=^U3 ~%6{EkoTzoOgM_6xj`~5jfj?0R|g}m&DIcbI(qw;47V1xuBbo z6X$ia>b+mrGF-A}OB@vT&_OBIPNgruOvk)><|gb!Noe9YqD+b6AV92pB+^}=5l3CQ z0?b8nuduPrFD!L1+Det2``!G-i$pOzY1XaLa8rcsi{Fd;lg}PwCyU&W%<<+knFfXd zP%D0s7R!{~d@IB(ac8V#t~Ry@i7v%(I0>X(B{eq@Au^!QWtBuAh-C1@d-7F`Lx}Lo z@^>_B)Nl*UFDT9v$~0ypc~8>+5`Q!Y9-KgcoBEOR44U&j+MK>w-%;Q%nEbat--eta zi0etwA$|}uyDfeuBDv6J>ZWeFe>)V5V-X=;x*nMl;V&&e4ak=?827z&n9+&eCjQ8B zsj5}ufE|;6l^x2b(p215&{#q%NvtA1(`}f`w;kYYE&7k=#D;!fXl!OiWBt{>S R5Jphf8x#V| z6e1%9m${-47c1HjMN{4wH-{Y`&&$a-`+-7n&Zv{f?@Q>Ss&Hsnp$27YzV4&8gx**+ z >HFn{c?o0@F&|150p`%o zQFfTx;9(8!mCXsys{~9aRG?9$^xSRcHK%y`>3Q}MhI-qn(_1+iTHtdhkrMoQyx_bU zvk;@}#+=4+7uteGT%0HCM^A-zc$SGLp16yUU6DpbwO@T%TenO&5~46XIKBnpXqn3P z4Nj}Q08@?PffQ+4HDSDd=1yC;zl(-BP$w z4KlalzEdP1EsK)!-i7AO5&=(5{rQ!zFK*d;g0*K4zqvkew;`3kOmzLrKOrD+h$`x- znuT;%$@I(I{D_OKP4fJ*^yPP1ZluGEO#5F8JY@n+1Vm&*gMZ}F4-Ts&i1)O`B;lSq zQnD{*TlxQ1qPg=fvtcU&(Arb<(nkGH^h{tND?@Q8bFzRU7Gv~d7F+AciR2mTvtTF< zUsT$%mZ-8BhE_`y*5EmOA!K&Il#c)g4{UT$-?{=lWBZG%Ru2~z$tHDRtHSqG>f;>L zD|D00Z2U(;Sz=QAb`5F&XK2ze#ePi2Fs-ondPv2pV);tmOP`<)d=Y{4&KFqkV?^a+ z5%X2NXK2TuwW_TqHPV35-Z;HJ6I*q3{N4&(`+Q+{C3MJ8JWIxX#qHqiK|hbTp%f$q za(g?p)npyDUC!nY*)2N %kv#E z2ag>4QqX7fAeeRLj%<=$iE>9+G~MJEbsr6e?OSA_urIkDLBu!0+i+Cd8fw2q(`O+0 z4n3F2E2svgk$a5k(_Y9XrpT9th-W?r130ss`S1Vu 3_+vzXn0EO4+3VYb{J62w&c`Vhwh z6y!3zpXU^=jxwowMiuUFimufvFhAz6wI4ZmwGEERP+AGED8(BrVESkqVW!a*@q!D2 z2IHQJGwXz6?*R`YW9M24FMM9O9Jep`jJqYsFg_zMM!s9PV1a@AfudRJ>EzmgP` Y=k#8`+()nP$diAfj8yw^W(MvTd5;iwS3feGT eHAFmSA?EZ~|2(lzR5QSNIa@Eq=-(Wo2+bzLj#|dT< zGm7vq!Ho56qVJ#kS`{(!%Y zbyHnmcYr=XB$g#H93PqYf4pO%o0I%KRFQ{QWwr2BMTcefnsl07>`I(@49;r1&4<2u z6KHELl@v}^WM!Gt2wHF7U!ldt)$$lbFc8KiS}g6$KCfmMw*iJ-z`bUB!I6tGkD <=3^c4 8^UxD5TIhpl!PNs|OwxTk_7!B5Y&)|JF!D!p~JkK3SXpF^;@UR4DmF;ugUSLg< zizxh_IlvS2e*B;R!W!V>zn;Ve*O!6*g;o3@K&lC;MK_LDE8(=$6*~Y%I;V|b4|SGo z$_c&5_D5aVA(c1VZ$^Z0E^VTvlR(w_8*KT8S3+n=Bz$f8Xg{OS8mWC67c&KL3IeN( zxbAso9$(1{G3$k^y8N1Vuk?xeb5j+VsVuFg&Aew=(LA+WU~=+Vq`iMP?*IU_pgaE) zdMHxW=dZ?DwS~QkgEEx_S(`X!??LKQ$h4^XE?4FNhIs1==V9q-;f)T}C1NV+u>ubU zx0?x4y8wG!VeKy`@?2?=6bteYUlHw!^Xbd7MwxLrg^G9^x(A
``ee9(6{A`SY*aVI**ZzM=ab10o*C&3+6Qou?7ejzq2^lt zTON>x2DS-c`%V^80SYJCY}QT~y7nei8RA4311F%JxF83?|KUJOWr%yNTYGfv03JUw z$VXKtTqlweiYNdblCK0)jYb1GOWe=k&tPmrpSm-VEx8g=9Q=tW;Vcy|z52N|+?59O zw9J3$Cft-3pmsn201puICB<>;w_$E4Fmw1RX5RP();fD23Y-!|3A(d D ;8NNi6 z1plLgneY<<6_KMIz9LH4Et^qwfW2toZ!Y=z46;Wj<9?=3HfTqJf(&Fn@t9t3S`C-A zmOvQZ=jsY083I;2l;8w2qrIiRGs{}o$a%^QUhY#?)YJw!v(WH&HY&b?Oap_OY#c@I zC&Wi=vb3 e&I!!FRW3vj z5~z`$C+2B9j&I~MUbSPvRKCnH3#d37Y87-ypu)5faeh $T+m_@E=1IS*O~gQ5jPY1=c41U7>`mv0 zt=p*mY(Wv`nXaWie _>GKbG%HaCEho3b%{ zuhaGg+T1@y=Dt@Yq`^ {eE(VlMln40 z6)45&sn8GQV0xBp#lW}yHw7E^Iu0BkR1PJ=)dFq!8623pB}^&OH<1S~8J_SOo(eaw z=>m&@;a-VOJHngAuvb&>tB-FnKATVga}88d%CMVfHKPx(f{{R3dD4RU$Z*B!&QAi- z#u%VUbr*a900000vv<_~2{5Q^cyoNqJklV$y=Tk^5vC!wm}UgHjG;dAR .rule` - used to indicate the routing rule ([view all of the available rules here](https://doc.traefik.io/traefik/routing/routers/#rule)) +- `traefik.http.services. .loadbalancer.server.port` - indicates the port Traefik should forward the request to. Note that this container port does not need to be exposed on your host machine ([read about port detection here](https://doc.traefik.io/traefik/providers/docker/#port-detection)) + +Let’s do a quick demo of starting Traefik and then configuring two additional containers to be accessible using different hostnames. + +1. In order for two containers to be able to communicate with each other, they need to be on the same network. Create a network named `traefik-demo` using the `docker network create` command: + + ```console + $ docker network create traefik-demo + ``` + +2. Start a Traefik container using the following command. The command exposes Traefik on port 80, mounts the Docker socket (which is used to monitor containers to update configuration), and passes the `--providers.docker` argument to configure Traefik to use the Docker provider. + + ```console + $ docker run -d --network=traefik-demo -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock traefik:v3.1.2 --providers.docker + ``` + +3. Now, start a simple Nginx container and define the labels Traefik is watching for to configure the HTTP routing. Note that the Nginx container is not exposing any ports. + + ```console + $ docker run -d --network=traefik-demo --label 'traefik.http.routers.nginx.rule=Host(`nginx.localhost`)' nginx + ``` + + Once the container starts, open your browser to [http://nginx.localhost](http://nginx.localhost) to see the app (all Chromium-based browsers route \*.localhost requests locally with no additional setup). + +4. Start a second application that will use a different hostname. + + ```console + $ docker run -d --network=traefik-demo --label 'traefik.http.routers.welcome.rule=Host(`welcome.localhost`)' docker/welcome-to-docker + ``` + + Once the container starts, open your browser to http://welcome.localhost. You should see a “Welcome to Docker” website. + +## Using Traefik in development + +Now that you’ve experienced Traefik, it’s time to try using it in a development environment. In this example, you will use a sample application that has a split frontend and backend. This app stack has the following configuration: + +1. All requests to /api to go to the API service +2. All other requests to localhost go to the frontend client +3. Since the app uses MySQL, db.localhost should provide phpMyAdmin to make it easy to access the database during development + + + +The application can be accessed on GitHub at [dockersamples/easy-http-routing-with-traefik](https://github.com/dockersamples/easy-http-routing-with-traefik). + +1. In the `compose.yaml` file, Traefik is using the following configuration: + + ```yaml + services: + proxy: + image: traefik:v3.1.2 + command: --providers.docker + ports: + - 80:80 + volumes: + - /var/run/docker.sock:/var/run/docker.sock + ``` + + Note that this is essentially the same configuration as used earlier, but now in a Compose syntax. + +2. The client service has the following configuration, which will start the container and provide it with the labels to receive requests at localhost. + + ```yaml {hl_lines=[7,8]} + services: + # … + client: + image: nginx:alpine + volumes: + - "./client:/usr/share/nginx/html" + labels: + traefik.http.routers.client.rule: "Host(`localhost`)" + ``` + +3. The api service has a similar configuration, but you’ll notice the routing rule has two conditions - the host must be “localhost” and the URL path must have a prefix of “/api”. Since this rule is more specific, Traefik will evaluate it first compared to the client rule. + + ```yaml {hl_lines=[7,8]} + services: + # … + api: + build: ./dev/api + volumes: + - "./api:/var/www/html/api" + labels: + traefik.http.routers.api.rule: "Host(`localhost`) && PathPrefix(`/api`)" + ``` + +4. And finally, the `phpmyadmin` service is configured to receive requests for the hostname “db.localhost”. The service also has environment variables defined to automatically log in, making it a little easier to get into the app. + + ```yaml {hl_lines=[5,6]} + services: + # … + phpmyadmin: + image: phpmyadmin:5.2.1 + labels: + traefik.http.routers.db.rule: "Host(`db.localhost`)" + environment: + PMA_USER: root + PMA_PASSWORD: password + ``` + +5. Before starting the stack, stop the Nginx container if it is still running. + +And that’s it. Now, you only need to spin up the Compose stack with a `docker compose up` and all of the services and applications will be ready for development. + +## Sending traffic to non-containerized workloads + +In some situations, you may want to forward requests to applications not running in containers. In the following architecture diagram, the same application from before is used, but the API and React apps are now running natively on the host machine. + + + +To accomplish this, Traefik will need to use another method to configure itself. The [File provider](https://doc.traefik.io/traefik/providers/file/) lets you define the routing rules in a YAML document. Here is an example file: + +```yaml +http: + routers: + native-api: + rule: "Host(`localhost`) && PathPrefix(`/api`)" + service: native-api + native-client: + rule: "Host(`localhost`)" + service: native-client + + services: + native-api: + loadBalancer: + servers: + - url: "http://host.docker.internal:3000/" + native-client: + loadBalancer: + servers: + - url: "http://host.docker.internal:5173/" +``` + +This configuration indicates that requests that for `localhost/api` will be forwarded to a service named `native-api`, which then forwards the request to http://host.docker.internal:3000. The hostname `host.docker.internal` is a name that Docker Desktop provides to send requests to the host machine. + +With this file, the only change is to the Compose configuration for Traefik. There are specifically two things that have changed: + +1. The configuration file is mounted into the Traefik container (the exact destination path is up to you) +2. The `command` is updated to add the file provider and point to the location of the configuration file + +```yaml +services: + proxy: + image: traefik:v3.1.2 + command: --providers.docker --providers.file.filename=/config/traefik-config.yaml --api.insecure + ports: + - 80:80 + - 8080:8080 + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./dev/traefik-config.yaml:/config/traefik-config.yaml +``` + +### Starting the example app + +To run the example app that forwards requests from Traefik to native-running apps, use the following steps: + +1. If you have the Compose stack still running, stop it with the following command: + + ```console + $ docker compose down + ``` + +2. Start the application using the provided `compose-native.yaml` file: + + ```console + $ docker compose -f compose-native.yaml up + ``` + + Opening [http://localhost](http://localhost) will return a 502 Bad Gateway because the other apps aren’t running yet. + +3. Start the API by running the following steps: + + ```console + cd api + yarn install + yarn dev + ``` + +4. Start the frontend by running the following steps in a new terminal (starting from the root of the project): + + ```console + cd client + yarn install + yarn dev + ``` + +5. Open the app at [http://localhost](http://localhost). You should see an app that fetches a message from [http://localhost/api/messages](http://localhost/api/messages). You can also open [http://db.localhost](http://db.localhost) to view or adjust the available messages directly from the Mongo database. Traefik will ensure the requests are properly routed to the correct container or application. + +6. When you’re done, run `docker compose down` to stop the containers and stop the Yarn apps by hitting `ctrl+c`. + +## Recap + +Running multiple services doesn’t have to require tricky port configuration and a good memory. With tools like Traefik, it’s easy to launch the services you need and easily access them - whether they’re for the app itself (such as the frontend and backend) or for additional development tooling (such as phpMyAdmin). diff --git a/content/subjects/networking/_index.md b/content/subjects/networking/_index.md new file mode 100644 index 000000000000..e5573002b601 --- /dev/null +++ b/content/subjects/networking/_index.md @@ -0,0 +1,3 @@ +--- +title: Networking +--- From abdedeac6f4e3132a6b2a3b95c4914b065118045 Mon Sep 17 00:00:00 2001 From: "Ajeet Singh Raina, Docker Captain, ARM Innovator" Date: Mon, 21 Oct 2024 21:27:23 +0530 Subject: [PATCH 5/6] Add 2 New Use Case Guides - Pre-Seeding database and WireMock (#20968) * Added a use case guide for Pre-seeding database * Fixed formatting * Fixed vale linting * Added WireMock use case guide * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Removed psql instructions under the prerequisite * Removed the statement that ask user to enter password * Removed Windows Tips as we're using command * Modified the volume section * added a note for port mapping * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Removed bold cases * Added instructions for Node and NPM * Moved the index.js file explanation up in step 3 * Added a prerequisite for WireMock * Added list of sections in the inital para * Added missing instructions * Modified wiremock guide * linting and fixes * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * avoid exposing API keys in logs * Fixed formatting * Fixed the result for Wiremock * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/pre-seeding.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Update content/guides/use-case/wiremock.md Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> * Fixing linting issues --------- Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- .../images/wiremock-accuweatherapi.webp | Bin 0 -> 15368 bytes .../guides/use-case/images/wiremock-arch.webp | Bin 0 -> 22448 bytes .../images/wiremock-logs-docker-desktop.webp | Bin 0 -> 50248 bytes .../images/wiremock-using-docker.webp | Bin 0 -> 19764 bytes content/guides/use-case/pre-seeding.md | 339 ++++++++++++++++++ content/guides/use-case/wiremock.md | 292 +++++++++++++++ 6 files changed, 631 insertions(+) create mode 100644 content/guides/use-case/images/wiremock-accuweatherapi.webp create mode 100644 content/guides/use-case/images/wiremock-arch.webp create mode 100644 content/guides/use-case/images/wiremock-logs-docker-desktop.webp create mode 100644 content/guides/use-case/images/wiremock-using-docker.webp create mode 100644 content/guides/use-case/pre-seeding.md create mode 100644 content/guides/use-case/wiremock.md diff --git a/content/guides/use-case/images/wiremock-accuweatherapi.webp b/content/guides/use-case/images/wiremock-accuweatherapi.webp new file mode 100644 index 0000000000000000000000000000000000000000..3939de602066bf8791e23ed137b5c451b84ba220 GIT binary patch literal 15368 zcmbulQ;=@Wwk`UVX4zG 1%qypP>}yw=>TypBDHKdrvYU%Af>KR;C` zhrKu1)j!UkP2YECxd%Ud-*g|nSD~-5wwv`&TR(L9JL5bH-<}_(*DtTN8M jo%j^ zmM5~KwwJ#2KmDIUKH{H~UwALETR%6Of}O6P@T)g^bk;qCKc=6o(Xt=9hut#oUq5J{ zynXQZKWDyIye%Jr-v@&W_qq>X{=AvKzCXj?RG&A4rZ2vqzRTa{AIa~fKfWKl{&c6l zTfH|fOpmT`S;=5B)~*0YyU8swEsp9=KlV1`>%9T{s&I&!US^ z ;+=is?q;uePQ?_-v+)z%gchWKfBn!W=HhB8WHu{u1JfK)0Wt(+axcW zE1h+b3!P+x-IxubBv|9tUbl-Tnyc+5=wHJ38(QAmjgcgclg2EE?OXxM1o{OPwEHp~ zm{75DE;D39wd{PgEr;z|dM2ge3Xa|}G*61aZX$>s=WIRIbRw7zV17`J#z{jIx3axn z^PV0<;p#RB6O@C^!V7qPaTe(RXGqV@1r-aKq0q4>QaGq7*65EitJWsHe3bnFyXA3j zEHKuMl?=7<>fKp94E@usT50H~?s`5hAlou2!O>u_2{YA(f)1X>=N-IP_a78}CyU() zqwa`D_D5%jG%#HG`^H+*g4kV9&-v{6gv+B$h1c>tHAZqc?ReN5{SCsKujOP^a$jyH z4*{v#^ipJm_tAA~S#DNvT?jF*h4cD{#`dz-ch?ko;9z7CrtY;t9Phglnq02`=V_ZE zm5Kmgcf(z6e2jh!S2}~2Z{<*w5Ts`-JT0JvyI1IG(0xF+x)1=YCyd%M%s_TI+jHAq zZzoXv(j(zdrkn`Y>gswZKLR>vEJ-J~r2O0vCpv{u>rUy#2w)H~Xxj44My6E0*DyS~ z#-#sSz8!85$-YuCWrk$K%l&5Yq^n~rELxd?u%O(0`shhk;wjmfd2$XW`G=+gQ2!k{ z0f#j(GfXI;A)Ezoc66HM0SBve8%-pX^3KVHa+8#K91bqHMWJ3sFs%ZUp~^M!Ko;n@ zxTL^a2}p+N#5C}G=v)7u<;7XQ^Vta7%}V|^i6M5^Zo{NQH98{CAb_Odkzz0VE7j?> zwxlW%_29-I-@aSSZ@4WVk{Y&Fdiq8?!hq~1zC9bMSf@TxZpl}_EJ>Y{H{ne1qQNMn zh>u;rR#hH_p@DlxBvCWdNa&`}C?f-+t{78JSbILh#*e3Fp{GnrE~v&oNA !i4?_mLgPyetCcoPsx#_=Oy_CbH( za1O%XQ!^cdl}tKkpcN?53b~XE_4LaiNlUmcD^N{42bDRH@vH$_V;4~F ?8E0NwkT5Rw&i*%o9GpM)%mts7_+U;?ZTSL2kII@LGK$B)^Ol2LvvkAsd74W%T( z|LQ07ifD_qZ ySp)0OVSDdgfJ7T1q4dyGUv>xr!F z)^`DOz!~R@!%Ul(tw%~*Of|e|Uq9@kIfw WtRX>I7A~taWp}_kzT&{BpeGll6yX;QHUJSRRgSh+uU%-P} z{MSP~s6qSNDpow0f6Wav-4EtCs*o?78?=dp?71StkU@6DwPlO6LS|-rrlDI)RnhO7 zMO>0ME_pjXUs?E}>hlx)$I|XYsptr_zZE$M^336;ZRD#S(&BwoXWK~JxqNvD&ZDS? zJ)Y}N>N|&qkkuDMFxnyhm+-Y8hiuwvv0pJ$``^oi+mx|{B7`E#++(nvp$6{%pe^lm zam*sM7HSlF#Q`Z$|05*7XGKu|{}(7W4tOoSwtoA71F!%d)&Hn e!wnJY+`wyEZqDubf{T~j6hc0-(^bUx2_iWa zrf`v?w2C`Jy22uuG-;d=_2}(C3o<;e?`t+R1iqi+(SH_Sn!H@v4$qA9i%J8FiXEmA zN6Y_(a4+UtJf|2H_5Htl5Dl~d2y;GeCby9N8;dYsR+lcVTnq^82O*$H5Dy$`wAek& zy`vhQokgg6#oL^CC$qZ)CMyOOK@Po=KO~toUXoVt6kUndBhu^q3aYnlITC=s7_wuZ z^wo^FCuT|{^N2CGwETjgQ#=eQS97=Jf-lEOXKnpBx{WPzxohJLl^1?~iEv(lcGY$3 zj~#8*D(K=KjDF6b%PpWEJltKTet}y`dS)c5$yXMCW@IabX4wFX{Wr!%iNCV}WO+%m zz4WaSQmQt}-pL3FHjc`Bcdq+Vl;>D@viy1lXDa}*Kb i0n}#A$nm@enjk5KMqbb@84`^=(I8Kw##BSP$^cq^*ECN(a{Irx zQK!#-htOcu@ZJh-FAF=ebv%6^VALpe3jLD*4OlRE1k^VyNh;GQH7oqjAWywcXSm#M zm|T%kp;2y8{67LSS0`RlO)^ZPu^H%cp*(obA+g#pIuN{LH#tb!LtnNC;2mUOzV+XP z^Itx&BG0(BNg63t#G*d?QcakynJoVRdtnQwqH gucYd1u4d z`ai)&H@TSqs+V| +!`tY+@eknm`+rv_{#8n}{#!Hff8|t-0D$kGIy1n3 z4UpCWaW(<9>t6yR5aUez59!4p&47b9QOLF5W(f#M{%#qglVN`v%OW$z0gY;}=c9nR zFxqB$4`r HG8imLoi9 zmYZdsLKdireoA6@ko3URZrq}ld_H+5ZsNH}=(J?>_k!IvWI+=bFh#f8ILN_fw@ -T{+MnEzVI|SqrE7dsBI_ z&SMhenFe=~_*j_U^LuUa(?vO26;>a>$!3#ARyHiEwR+Nt2eldcjpysW&yL|^6(GNl z%nc+m4{j=hyd)jhKN?z~3oLPUNHjfDI4Q>y*%oKTOcl*N9iq(MVq7-}3vb8Ni8|6e zILi2qFWQ0IkGSQNr}(Jm&Z=tye&@sAD*3+ZTbYSMI;7)|G`PY2{Tx@5M2(bN4J|&G zqe~$dkiaBE67WF%JA^bt<34xGVgDH~Z3nhjBB~Ij%}9}^?woSrZ=dxO2j*{H&;!S& zC^ke*T@)~8xD_t1I55EPLS>t{%5%xjGm#?nQ+aH708_-ah!%HGt<(;wzoFMpus^tJ z n0P^C45v zFQlEfu!SLnXed47$rqr^ z2+p<=o?`7ruZah4Keys1qQRqUp`v~cT#Sbyf>&Z@Y^@GZ>k(IDn6;Hc;aOpx$|+AU zYpd-9$WL(@w^RK3&Go)BTXhi*C;For@bh!~Ug{<7SXbo8s66n_an+3NjF zxBYR?BMS