1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+ < head >
4+ < meta charset ="UTF-8 ">
5+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0 ">
6+ < title > docker-socket-manager – Social Preview</ title >
7+ < link href ="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Space+Grotesk:wght@300;400;600&display=swap " rel ="stylesheet ">
8+ < style >
9+ * { margin : 0 ; padding : 0 ; box-sizing : border-box; }
10+
11+ body {
12+ width : 1280px ;
13+ height : 640px ;
14+ overflow : hidden;
15+ background : # 0a0e17 ;
16+ font-family : 'Space Grotesk' , sans-serif;
17+ display : flex;
18+ align-items : center;
19+ justify-content : center;
20+ }
21+
22+ .bg {
23+ position : absolute;
24+ inset : 0 ;
25+ background :
26+ radial-gradient (ellipse 60% 50% at 70% 50% , rgba (0 , 180 , 255 , 0.06 ) 0% , transparent 70% ),
27+ radial-gradient (ellipse 40% 60% at 10% 80% , rgba (0 , 100 , 200 , 0.07 ) 0% , transparent 60% );
28+ }
29+
30+ /* subtle grid */
31+ .grid {
32+ position : absolute;
33+ inset : 0 ;
34+ background-image :
35+ linear-gradient (rgba (255 , 255 , 255 , 0.025 ) 1px , transparent 1px ),
36+ linear-gradient (90deg , rgba (255 , 255 , 255 , 0.025 ) 1px , transparent 1px );
37+ background-size : 48px 48px ;
38+ mask-image : radial-gradient (ellipse 80% 80% at 50% 50% , black 30% , transparent 100% );
39+ }
40+
41+ .container {
42+ position : relative;
43+ display : flex;
44+ align-items : center;
45+ gap : 80px ;
46+ padding : 0 80px ;
47+ width : 100% ;
48+ }
49+
50+ /* LEFT */
51+ .left {
52+ flex : 1 ;
53+ display : flex;
54+ flex-direction : column;
55+ gap : 20px ;
56+ }
57+
58+ .badge {
59+ display : inline-flex;
60+ align-items : center;
61+ gap : 8px ;
62+ border : 1px solid rgba (0 , 180 , 255 , 0.3 );
63+ border-radius : 4px ;
64+ padding : 4px 12px ;
65+ width : fit-content;
66+ font-family : 'JetBrains Mono' , monospace;
67+ font-size : 11px ;
68+ color : rgba (0 , 180 , 255 , 0.8 );
69+ letter-spacing : 0.05em ;
70+ background : rgba (0 , 180 , 255 , 0.05 );
71+ }
72+
73+ .badge ::before {
74+ content : '' ;
75+ width : 6px ;
76+ height : 6px ;
77+ border-radius : 50% ;
78+ background : # 00b4ff ;
79+ box-shadow : 0 0 6px # 00b4ff ;
80+ }
81+
82+ .title {
83+ font-family : 'JetBrains Mono' , monospace;
84+ font-size : 52px ;
85+ font-weight : 700 ;
86+ line-height : 1.05 ;
87+ color : # e8edf5 ;
88+ letter-spacing : -0.02em ;
89+ }
90+
91+ .title .accent { color : # 00b4ff ; }
92+
93+ .subtitle {
94+ font-size : 15px ;
95+ color : rgba (200 , 210 , 230 , 0.55 );
96+ line-height : 1.6 ;
97+ font-weight : 300 ;
98+ max-width : 360px ;
99+ }
100+
101+ .tags {
102+ display : flex;
103+ flex-wrap : wrap;
104+ gap : 8px ;
105+ margin-top : 4px ;
106+ }
107+
108+ .tag {
109+ font-family : 'JetBrains Mono' , monospace;
110+ font-size : 11px ;
111+ color : rgba (200 , 220 , 255 , 0.5 );
112+ border : 1px solid rgba (200 , 220 , 255 , 0.12 );
113+ border-radius : 3px ;
114+ padding : 3px 10px ;
115+ background : rgba (255 , 255 , 255 , 0.02 );
116+ }
117+
118+ .github {
119+ font-family : 'JetBrains Mono' , monospace;
120+ font-size : 11px ;
121+ color : rgba (120 , 140 , 170 , 0.6 );
122+ margin-top : 8px ;
123+ }
124+
125+ /* RIGHT — code card */
126+ .card {
127+ width : 460px ;
128+ flex-shrink : 0 ;
129+ background : # 111720 ;
130+ border : 1px solid rgba (255 , 255 , 255 , 0.07 );
131+ border-radius : 10px ;
132+ overflow : hidden;
133+ box-shadow :
134+ 0 0 0 1px rgba (0 , 180 , 255 , 0.08 ),
135+ 0 24px 64px rgba (0 , 0 , 0 , 0.6 ),
136+ 0 0 80px rgba (0 , 180 , 255 , 0.04 );
137+ }
138+
139+ .card-header {
140+ background : # 0d131d ;
141+ padding : 10px 14px ;
142+ display : flex;
143+ align-items : center;
144+ gap : 8px ;
145+ border-bottom : 1px solid rgba (255 , 255 , 255 , 0.05 );
146+ }
147+
148+ .dot { width : 10px ; height : 10px ; border-radius : 50% ; }
149+ .dot .r { background : # ff5f57 ; }
150+ .dot .y { background : # febc2e ; }
151+ .dot .g { background : # 28c840 ; }
152+
153+ .card-filename {
154+ font-family : 'JetBrains Mono' , monospace;
155+ font-size : 11px ;
156+ color : rgba (180 , 200 , 230 , 0.4 );
157+ margin-left : 4px ;
158+ }
159+
160+ .card-body {
161+ padding : 20px 22px ;
162+ font-family : 'JetBrains Mono' , monospace;
163+ font-size : 12.5px ;
164+ line-height : 1.75 ;
165+ color : # 8899bb ;
166+ }
167+
168+ .line { display : block; }
169+ .kw { color : # 569cd6 ; }
170+ .cl { color : # 4ec9b0 ; }
171+ .fn { color : # dcdcaa ; }
172+ .str { color : # ce9178 ; }
173+ .num { color : # b5cea8 ; }
174+ .cm { color : # 4a5568 ; }
175+ .ch { color : # e8edf5 ; }
176+ .op { color : # 9cdcfe ; }
177+ .ind { padding-left : 18px ; }
178+ .ind2 { padding-left : 36px ; }
179+ .ind3 { padding-left : 54px ; }
180+ </ style >
181+ </ head >
182+ < body >
183+ < div class ="bg "> </ div >
184+ < div class ="grid "> </ div >
185+
186+ < div class ="container ">
187+ < div class ="left ">
188+ < div class ="badge "> @Java Library · v0.1.0</ div >
189+
190+ < div class ="title ">
191+ docker< span class ="accent "> -socket</ span > < br > manager
192+ </ div >
193+
194+ < div class ="subtitle ">
195+ Connect to Docker daemons over local Unix sockets or remote SSH tunnels.< br >
196+ Automatic socat relay · connection pooling · Spring Boot ready.
197+ </ div >
198+
199+ < div class ="tags ">
200+ < span class ="tag "> SSH Tunnel</ span >
201+ < span class ="tag "> socat</ span >
202+ < span class ="tag "> docker-java</ span >
203+ < span class ="tag "> Connection Pool</ span >
204+ < span class ="tag "> Maven Package</ span >
205+ </ div >
206+
207+ < div class ="github "> github.com/nomad4tech/docker-socket-manager</ div >
208+ </ div >
209+
210+ < div class ="card ">
211+ < div class ="card-header ">
212+ < div class ="dot r "> </ div >
213+ < div class ="dot y "> </ div >
214+ < div class ="dot g "> </ div >
215+ < span class ="card-filename "> DockerBackupJob.java</ span >
216+ </ div >
217+ < div class ="card-body ">
218+ < span class ="line cm "> // connect to remote Docker via SSH</ span >
219+ < span class ="line "> < span class ="cl "> DockerSocketConfig</ span > < span class ="op "> config</ span > < span class ="ch "> =</ span > < span class ="cl "> DockerSocketConfig</ span > </ span >
220+ < span class ="line ind "> < span class ="ch "> .</ span > < span class ="fn "> builder</ span > < span class ="ch "> ()</ span > </ span >
221+ < span class ="line ind "> < span class ="ch "> .</ span > < span class ="fn "> id</ span > < span class ="ch "> (</ span > < span class ="num "> 1L</ span > < span class ="ch "> )</ span > </ span >
222+ < span class ="line ind "> < span class ="ch "> .</ span > < span class ="fn "> type</ span > < span class ="ch "> (</ span > < span class ="cl "> SocketType</ span > < span class ="ch "> .</ span > < span class ="op "> REMOTE_SSH</ span > < span class ="ch "> )</ span > </ span >
223+ < span class ="line ind "> < span class ="ch "> .</ span > < span class ="fn "> sshHost</ span > < span class ="ch "> (</ span > < span class ="str "> "prod-01.example.com"</ span > < span class ="ch "> )</ span > </ span >
224+ < span class ="line ind "> < span class ="ch "> .</ span > < span class ="fn "> sshPrivateKeyPath</ span > < span class ="ch "> (</ span > < span class ="str "> "~/.ssh/id_rsa"</ span > < span class ="ch "> )</ span > </ span >
225+ < span class ="line ind "> < span class ="ch "> .</ span > < span class ="fn "> remoteSocatPort</ span > < span class ="ch "> (</ span > < span class ="num "> 2375</ span > < span class ="ch "> )</ span > </ span >
226+ < span class ="line ind "> < span class ="ch "> .</ span > < span class ="fn "> build</ span > < span class ="ch "> ();</ span > </ span >
227+ < span class ="line "> </ span >
228+ < span class ="line "> < span class ="cl "> DockerClient</ span > < span class ="op "> client</ span > < span class ="ch "> =</ span > </ span >
229+ < span class ="line ind "> < span class ="op "> service</ span > < span class ="ch "> .</ span > < span class ="fn "> getClient</ span > < span class ="ch "> (</ span > < span class ="num "> 1L</ span > < span class ="ch "> ,</ span > < span class ="op "> config</ span > < span class ="ch "> );</ span > </ span >
230+ < span class ="line "> </ span >
231+ < span class ="line "> < span class ="op "> client</ span > < span class ="ch "> .</ span > < span class ="fn "> execCreateCmd</ span > < span class ="ch "> (</ span > < span class ="op "> containerId</ span > < span class ="ch "> )</ span > </ span >
232+ < span class ="line ind "> < span class ="ch "> .</ span > < span class ="fn "> withCmd</ span > < span class ="ch "> (</ span > < span class ="str "> "pg_dump"</ span > < span class ="ch "> ,</ span > < span class ="str "> "-Fc"</ span > < span class ="ch "> ,</ span > < span class ="str "> "mydb"</ span > < span class ="ch "> )</ span > </ span >
233+ < span class ="line ind "> < span class ="ch "> .</ span > < span class ="fn "> exec</ span > < span class ="ch "> ();</ span > </ span >
234+ </ div >
235+ </ div >
236+ </ div >
237+ </ body >
238+ </ html >
0 commit comments