{"id":8,"date":"2023-09-26T14:42:52","date_gmt":"2023-09-26T14:42:52","guid":{"rendered":"https:\/\/blog.200ms.net\/?page_id=8"},"modified":"2025-01-17T19:48:15","modified_gmt":"2025-01-17T19:48:15","slug":"my-projects","status":"publish","type":"page","link":"https:\/\/blog.200ms.net\/my-projects\/","title":{"rendered":"My projects"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><a id=\"docker_images\" href=\"#docker_images\">Docker images<\/a><\/h2>\n\n\n\n<p>Docker is a great tool supporting software development. Possibility to setup different software and networking configurations basing on one configuration file (docker-compose.yaml) greatly automates development tasks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a id=\"dev2\" href=\"#dev2\">Dev<sup>2<\/sup> &#8211; Dev. squared<\/a><\/h3>\n\n\n\n<p>It\u2019s a set of Docker images developed to improve development work on <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/LAMP_%28software_bundle%29\">LAMP<\/a><\/strong> applications.<\/p>\n\n\n\n<p>The main goals are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Eliminate password hassle and boring tasks (e.g. manual account creation)<\/li>\n\n\n\n<li>Provide debugging out-of the box<\/li>\n\n\n\n<li>Add network insight capabilities<\/li>\n<\/ul>\n\n\n\n<p>One of the features of Dev<sup>2<\/sup> is automatic uid:gid remapping. Usually uid of Linux desktop user is 1000, but containerized applications apply standards such as 33 for web servers.<\/p>\n\n\n\n<p>Once when source files are shared with host, web server (web application) run in a container expects uid:gig: 33:33, but mounted files have 1000:1000.<br>To make development work smooth, Dev2 containers run file system that does a simple remapping of uid&#8217;s and gid&#8217;s, so developer can focus on essentials that is a Web app development. This filesystem is <a href=\"https:\/\/github.com\/tools200ms\/dev2fs\">Dev<sup>2<\/sup>FS<\/a>.<\/p>\n\n\n\n<p>Dev2FS requires <a href=\"https:\/\/en.wikipedia.org\/wiki\/Filesystem_in_Userspace\">FUSE<\/a>, thus Docker containers must run on elevated permissions. <br>To do so supplement &#8216;Docker run &#8230;&#8217; with arguments: <br><strong>&#8211;cap-add SYS_ADMIN &#8211;device \/dev\/fuse<\/strong><br>or if you use docker-compose.yaml add: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cap_add: &#91;'SYS_ADMIN']\ndevices: \n  - \/dev\/fuse<\/code><\/pre>\n\n\n\n<p>Note that your host must have fuse module loaded: <strong>modprobe fuse<\/strong><\/p>\n\n\n\n<p><strong>NOTE: <\/strong>Dev<sup>2<\/sup> images has NOT been tested on other OS then Linux. Therefore at this point only this OS is supported.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"256\" height=\"256\" src=\"https:\/\/blog.200ms.net\/wp-content\/uploads\/2023\/10\/dev2_logo.png\" alt=\"\" class=\"wp-image-21\" srcset=\"https:\/\/blog.200ms.net\/wp-content\/uploads\/2023\/10\/dev2_logo.png 256w, https:\/\/blog.200ms.net\/wp-content\/uploads\/2023\/10\/dev2_logo-150x150.png 150w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h4 class=\"wp-block-heading\">phpapache_dev2<\/h4>\n\n\n\n<p>Apache with PHP module featured by XDebug, adminer.php and dev. oriented settings out of the box: <a href=\"https:\/\/bitbucket.org\/200ms\/docker-phpapache_dev2\/\" data-type=\"link\" data-id=\"https:\/\/bitbucket.org\/200ms\/docker-phpapache_dev2\/src\/release\/\">sources<\/a>, <a href=\"https:\/\/hub.docker.com\/r\/200ms\/phpapache_dev2\">Docker image<\/a>.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h4 class=\"wp-block-heading\">mariadb_dev2<\/h4>\n\n\n\n<p>Mariadb database featured by some tuning, such as printing all SQL commands or password auto-generation: <a href=\"https:\/\/bitbucket.org\/200ms\/docker-phpapache_dev2\/\" data-type=\"link\" data-id=\"https:\/\/bitbucket.org\/200ms\/docker-phpapache_dev2\/src\/release\/\">sources<\/a>, <a href=\"https:\/\/hub.docker.com\/r\/200ms\/mariadb_dev2\">Docker image<\/a>.<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h4 class=\"wp-block-heading\">wpapache_dev2<\/h4>\n\n\n\n<p>WordPress at the top of Apache PHP with wp-cli. Container deploys desired WP configuration based on settings, such as plugin list, default theme, etc.. Developed to support theme and plugin development: <a href=\"https:\/\/bitbucket.org\/200ms\/docker-phpapache_dev2\/\" data-type=\"link\" data-id=\"https:\/\/bitbucket.org\/200ms\/docker-phpapache_dev2\/src\/release\/\">sources<\/a>, <a href=\"https:\/\/hub.docker.com\/r\/200ms\/wpapache_dev2\">Docker image<\/a>.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h4 class=\"wp-block-heading\">prestashop_dev2<\/h4>\n\n\n\n<p>Prestashop at the top of Apache PHP. Featured by a set of scripts to automate Presta installation: <a href=\"https:\/\/bitbucket.org\/200ms\/docker-phpapache_dev2\/\" data-type=\"link\" data-id=\"https:\/\/bitbucket.org\/200ms\/docker-phpapache_dev2\/src\/release\/\">sources<\/a>, <a href=\"https:\/\/hub.docker.com\/r\/200ms\/prestashop_dev2\">Docker image<\/a>.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h4 class=\"wp-block-heading\">opencart_dev2<\/h4>\n\n\n\n<p>OpenCart e-commerce solution at the top of Apache PHP. It contains set of scripts to automate OpenCart installation: <a href=\"https:\/\/bitbucket.org\/200ms\/docker-phpapache_dev2\/\" data-type=\"link\" data-id=\"https:\/\/bitbucket.org\/200ms\/docker-phpapache_dev2\/src\/release\/\">sources<\/a>, <a href=\"https:\/\/hub.docker.com\/r\/200ms\/opencart_dev2\">Docker image<\/a>.<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h4 class=\"wp-block-heading\">alpinenet_dev2<\/h4>\n\n\n\n<p>Alpine Linux container featured by networking tools: <a href=\"https:\/\/bitbucket.org\/200ms\/docker-phpapache_dev2\/\" data-type=\"link\" data-id=\"https:\/\/bitbucket.org\/200ms\/docker-phpapache_dev2\/src\/release\/\">sources<\/a>, <a href=\"https:\/\/hub.docker.com\/r\/200ms\/alpinenet_dev2\">Docker image<\/a>.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><a id=\"ah2\" href=\"#ah2\">Ah<sup>2<\/sup> &#8211; Administrator&#8217;s helper squared<\/a><\/h3>\n\n\n\n<p>I developed a set of dockers that improves system administrator&#8217;s tasks.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"256\" height=\"256\" src=\"https:\/\/blog.200ms.net\/wp-content\/uploads\/2023\/10\/ah2_logo.png\" alt=\"\" class=\"wp-image-26\" srcset=\"https:\/\/blog.200ms.net\/wp-content\/uploads\/2023\/10\/ah2_logo.png 256w, https:\/\/blog.200ms.net\/wp-content\/uploads\/2023\/10\/ah2_logo-150x150.png 150w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h4 class=\"wp-block-heading\">imapsync_ah2<\/h4>\n\n\n\n<p>Imapsync is a very useful Perl program to do e-mail migration from one mailbox to another. Here this tool has been containerized to make migration even smoother, <a href=\"https:\/\/bitbucket.org\/200ms\/docker-imapsync_ah2\/src\/release\/\">sources<\/a>, <a href=\"https:\/\/hub.docker.com\/r\/200ms\/imapsync_ah2\">Docker image<\/a>.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><a id=\"devf\" href=\"#devf\">DevF &#8211; Development with Fun (well, it&#8217;s always fun)<\/a><\/h3>\n\n\n\n<p>This project is designed to inspire young&#8217;s, and to preserve IT history.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"256\" height=\"256\" src=\"https:\/\/blog.200ms.net\/wp-content\/uploads\/2023\/10\/devF_logo.png\" alt=\"\" class=\"wp-image-28\" srcset=\"https:\/\/blog.200ms.net\/wp-content\/uploads\/2023\/10\/devF_logo.png 256w, https:\/\/blog.200ms.net\/wp-content\/uploads\/2023\/10\/devF_logo-150x150.png 150w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h4 class=\"wp-block-heading\">fpc_devf<\/h4>\n\n\n\n<p>Free Pascal Compiler &#8211; docker containing Pascal compiler: <a href=\"https:\/\/bitbucket.org\/200ms\/docker-fpc_devf\/\">sources<\/a>, <a href=\"https:\/\/hub.docker.com\/r\/200ms\/fpc_devf\">Docker image<\/a>.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n<\/div>\n\n\n\n<p>Docker images are available here: <a href=\"https:\/\/hub.docker.com\/u\/200ms\">https:\/\/hub.docker.com\/u\/200ms<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C tools, Shell scripts &amp; Python<\/h2>\n\n\n\n<p>I actively develop code in C (GNU C Library), Shell scripts and in Python<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Dev<sup>2<\/sup>FS<\/h3>\n\n\n\n<p>FUSE based filesystem to make Docker LAMP development smooth.<br><a href=\"https:\/\/github.com\/tools200ms\/dev2fs\" data-type=\"link\" data-id=\"https:\/\/github.com\/tools200ms\/dev2fs\">Sources and more description (GitHub)<\/a><br><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading\">NFT List<\/h3>\n\n\n\n<p>NFT complementing tool for blocking\/allowing traffic based on domain names, IP or mac adresses.<br><a href=\"https:\/\/github.com\/tools200ms\/nft-helper\">Sources and more description (GitHub)<\/a><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Site Digest<\/h3>\n\n\n\n<p>Python Tool for website testing and content analysis.<br><a href=\"https:\/\/github.com\/tools200ms\/sitedigest\" data-type=\"link\" data-id=\"https:\/\/github.com\/tools200ms\/sitedigest\">Sources and more description (GitHub)<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docker images Docker is a great tool supporting software development. Possibility to setup different software and networking configurations basing on [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-8","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.200ms.net\/wp-json\/wp\/v2\/pages\/8","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.200ms.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.200ms.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.200ms.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.200ms.net\/wp-json\/wp\/v2\/comments?post=8"}],"version-history":[{"count":2,"href":"https:\/\/blog.200ms.net\/wp-json\/wp\/v2\/pages\/8\/revisions"}],"predecessor-version":[{"id":168,"href":"https:\/\/blog.200ms.net\/wp-json\/wp\/v2\/pages\/8\/revisions\/168"}],"wp:attachment":[{"href":"https:\/\/blog.200ms.net\/wp-json\/wp\/v2\/media?parent=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}