Bladeren bron

does readme have to be all CAPS?

Blaine Story 3 jaren geleden
bovenliggende
commit
7a69bc9aac
1 gewijzigde bestanden met toevoegingen van 139 en 0 verwijderingen
  1. 139 0
      roles/docker/readme.md

+ 139 - 0
roles/docker/readme.md

@@ -0,0 +1,139 @@
+docker
+======
+
+This role will install Docker and given a list of containers to deploy, will do the following:
+
+1. Create needed docker networks
+2. Open up necessary firewall ports
+3. Generate docker-compose files (1 per container)
+4. Ensure container user/group exists
+5. Ensure container persistent directories exist with correct perms and SELinux contexts
+6. Generate a systemd service file per container
+7. Setup systemd timers to automatically pull new and purge old container images
+
+Requirements
+------------
+
+This role is only tested on Fedora/CentOS machines.
+
+Variables
+---------
+
+`container_user`: user name to run containers as (will be generated if not exists)<br>
+`container_uid`: uid of above user name<br>
+`container_group`: group name of container_user<br>
+`container_gid`: gid of above group name<br>
+
+Automated pulls and purges are handled by systemd timers. Any valid [systemd timer calendar event expression](https://www.freedesktop.org/software/systemd/man/systemd.timer.html#OnCalendar=) may be passed to them:
+
+`docker_pull_timer`: weekly<br>
+`docker_purge_timer`: monthly
+
+    global_env_vars: # will be set on any container which has include_global_env_vars: true
+      - PUID={{ container_uid }}
+      - PGID={{ container_gid }}
+      - TZ=America/Los_Angeles
+
+    firewall_ports: # list of ports to open up on the host
+      - 80/tcp
+      - 443/tcp
+
+Since this role sets up each container individually, if multiple containers need to talk directly to each other container networks must be outlined:
+
+This role sets up each container as an individual docker-compose.yml file with a 1-to-1 relationship with it's systemd service. This means we can not rely on docker-compose's built-in networking feature for connecting multiple containers together.
+
+Outline any networks you need via container_networks:
+
+    container_networks:
+      - name: nginx-proxy
+        driver: bridge
+        subnet: 172.21.10.0/24
+        ip_range: 172.21.10.0/24
+        gateway: 172.21.10.1
+
+And specify those networks in the corresponding container's dictionary:
+
+    containers:
+      - name: swag
+        active: true
+        image: linuxserver/swag
+        ports:
+          - 80:80
+          - 443:443
+        volumes:
+          - /opt/swag:/config
+        include_global_env_vars: true
+        environment:
+          - URL=myexamplesite.biz
+          - VALIDATION=http
+          - SUBDOMAINS=www,git,
+          - EMAIL=admin@myexamplesite.biz
+        restart: unless-stopped
+        memlimit: 300m
+        networks:
+          - nginx-proxy
+
+        - name: gogs
+          active: true
+          image: gogs/gogs
+          ports:
+            - "10022:22" # https://github.com/go-yaml/yaml/issues/34#issuecomment-55772666
+          volumes:
+            - /opt/gogs:/data
+          include_global_env_vars: false
+          restart: unless-stopped
+          memlimit: 500m
+          networks:
+            - nginx-proxy
+
+
+Usage
+-----
+
+This role creates docker-compose.yml files for each entry in the list of containers under the filename:<br>
+`/root/docker/<name>/docker-compose.yml`
+
+It also generates systemd services files of the name:<br>
+`/etc/systemd/system/<name>.service`
+
+This file is a simple wrapper around docker-compose:
+
+    [root@shareunderware ~]# systemctl cat swag.service
+    # /etc/systemd/system/swag.service
+    # This file is managed by Ansible. Any local changes may be wiped out!
+    [Unit]
+    Description=systemd wrapper around docker swag service
+    Requires=docker.service
+    After=docker.service
+
+    [Service]
+    Restart=always
+    User=root
+    Group=docker
+
+    ExecStartPre=/usr/bin/docker-compose -f /root/docker/swag/docker-compose.yml down -v
+    ExecStart=/usr/bin/docker-compose -f /root/docker/swag/docker-compose.yml up
+    ExecStop=/usr/bin/docker-compose -f /root/docker/swag/docker-compose.yml down -v
+
+    [Install]
+    WantedBy=multi-user.target
+
+This method allows the logs to be captured via journald and can be queried just like any other service:
+
+    [root@shareunderware ~]# journalctl -fu swag.service 
+    Apr 25 04:20:59 shareunderware docker-compose[1956]: swag    | [cont-init.d] 70-templates: exited 0.
+    Apr 25 04:20:59 shareunderware docker-compose[1956]: swag    | [cont-init.d] 90-custom-folders: executing...
+    Apr 25 04:20:59 shareunderware docker-compose[1956]: swag    | [cont-init.d] 90-custom-folders: exited 0.
+    Apr 25 04:20:59 shareunderware docker-compose[1956]: swag    | [cont-init.d] 99-custom-files: executing...
+    Apr 25 04:20:59 shareunderware docker-compose[1956]: swag    | [custom-init] no custom files found exiting...
+    Apr 25 04:20:59 shareunderware docker-compose[1956]: swag    | [cont-init.d] 99-custom-files: exited 0.
+    Apr 25 04:20:59 shareunderware docker-compose[1956]: swag    | [cont-init.d] done.
+    Apr 25 04:20:59 shareunderware docker-compose[1956]: swag    | [services.d] starting services
+    Apr 25 04:20:59 shareunderware docker-compose[1956]: swag    | [services.d] done.
+    Apr 25 04:21:03 shareunderware docker-compose[1956]: swag    | Server ready
+
+
+License
+-------
+
+GPLv3