diff --git a/Docker/Arguments/Mount.vb b/Docker/Arguments/Mount.vb index 584fa4d..314e651 100644 --- a/Docker/Arguments/Mount.vb +++ b/Docker/Arguments/Mount.vb @@ -1,48 +1,49 @@ #Region "Microsoft.VisualBasic::24194316ee9b4b342cef90d3bd03e0ae, Docker\Arguments\Mount.vb" - ' Author: - ' - ' asuka (amethyst.asuka@gcmodeller.org) - ' xie (genetics@smrucc.org) - ' xieguigang (xie.guigang@live.com) - ' - ' Copyright (c) 2018 GPL3 Licensed - ' - ' - ' GNU GENERAL PUBLIC LICENSE (GPL3) - ' - ' - ' This program is free software: you can redistribute it and/or modify - ' it under the terms of the GNU General Public License as published by - ' the Free Software Foundation, either version 3 of the License, or - ' (at your option) any later version. - ' - ' This program is distributed in the hope that it will be useful, - ' but WITHOUT ANY WARRANTY; without even the implied warranty of - ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ' GNU General Public License for more details. - ' - ' You should have received a copy of the GNU General Public License - ' along with this program. If not, see . - - - - ' /********************************************************************************/ - - ' Summaries: - - ' Class Mount - ' - ' Properties: IsValid, local, virtual - ' - ' Function: ToString - ' - ' - ' /********************************************************************************/ +' Author: +' +' asuka (amethyst.asuka@gcmodeller.org) +' xie (genetics@smrucc.org) +' xieguigang (xie.guigang@live.com) +' +' Copyright (c) 2018 GPL3 Licensed +' +' +' GNU GENERAL PUBLIC LICENSE (GPL3) +' +' +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' You should have received a copy of the GNU General Public License +' along with this program. If not, see . + + + +' /********************************************************************************/ + +' Summaries: + +' Class Mount +' +' Properties: IsValid, local, virtual +' +' Function: ToString +' +' +' /********************************************************************************/ #End Region Imports System.Runtime.CompilerServices +Imports Microsoft.VisualBasic.Net Namespace Arguments @@ -80,4 +81,17 @@ Namespace Arguments Return $"{local.GetDirectoryFullPath}:{virtual}" End Function End Class + + ' -p 127.0.0.1:80:8080/tcp + Public Class PortForward + + Public Property virtual As Integer + Public Property local As IPEndPoint + + Public Overrides Function ToString() As String + Return $"{local.IPAddress}:{local.Port}:{virtual}/tcp" + End Function + + End Class + End Namespace diff --git a/Docker/Environment.vb b/Docker/Environment.vb index 4d2a743..b160d5b 100644 --- a/Docker/Environment.vb +++ b/Docker/Environment.vb @@ -1,44 +1,44 @@ #Region "Microsoft.VisualBasic::f5ecc954d263574a6d558fd24cd8933f, Docker\Environment.vb" - ' Author: - ' - ' asuka (amethyst.asuka@gcmodeller.org) - ' xie (genetics@smrucc.org) - ' xieguigang (xie.guigang@live.com) - ' - ' Copyright (c) 2018 GPL3 Licensed - ' - ' - ' GNU GENERAL PUBLIC LICENSE (GPL3) - ' - ' - ' This program is free software: you can redistribute it and/or modify - ' it under the terms of the GNU General Public License as published by - ' the Free Software Foundation, either version 3 of the License, or - ' (at your option) any later version. - ' - ' This program is distributed in the hope that it will be useful, - ' but WITHOUT ANY WARRANTY; without even the implied warranty of - ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ' GNU General Public License for more details. - ' - ' You should have received a copy of the GNU General Public License - ' along with this program. If not, see . - - - - ' /********************************************************************************/ - - ' Summaries: - - ' Class Environment - ' - ' Properties: [Shared], container - ' - ' Constructor: (+1 Overloads) Sub New - ' Function: GetDockerCommand, (+2 Overloads) Mount - ' - ' /********************************************************************************/ +' Author: +' +' asuka (amethyst.asuka@gcmodeller.org) +' xie (genetics@smrucc.org) +' xieguigang (xie.guigang@live.com) +' +' Copyright (c) 2018 GPL3 Licensed +' +' +' GNU GENERAL PUBLIC LICENSE (GPL3) +' +' +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' You should have received a copy of the GNU General Public License +' along with this program. If not, see . + + + +' /********************************************************************************/ + +' Summaries: + +' Class Environment +' +' Properties: [Shared], container +' +' Constructor: (+1 Overloads) Sub New +' Function: GetDockerCommand, (+2 Overloads) Mount +' +' /********************************************************************************/ #End Region @@ -46,10 +46,155 @@ Imports System.Text Imports Darwinism.Docker.Arguments ''' -''' The container environment module +''' The container environment module for ``docker run ...`` ''' Public Class Environment + ' Run a command in a new container + ' + ' Options: + ' --add-host list Add a custom host-to-IP mapping + ' (host:ip) + ' -a, --attach list Attach to STDIN, STDOUT or STDERR + ' --blkio-weight uint16 Block IO (relative weight), + ' between 10 and 1000, or 0 to + ' disable (default 0) + ' --blkio-weight-device list Block IO weight (relative device + ' weight) (default []) + ' --cap-add list Add Linux capabilities + ' --cap-drop list Drop Linux capabilities + ' --cgroup-parent string Optional parent cgroup for the + ' container + ' --cidfile string Write the container ID to the file + ' --cpu-period int Limit CPU CFS (Completely Fair + ' Scheduler) period + ' --cpu-quota int Limit CPU CFS (Completely Fair + ' Scheduler) quota + ' --cpu-rt-period int Limit CPU real-time period in + ' microseconds + ' --cpu-rt-runtime int Limit CPU real-time runtime in + ' microseconds + ' -c, --cpu-shares int CPU shares (relative weight) + ' --cpus decimal Number of CPUs + ' --cpuset-cpus string CPUs in which to allow execution + ' (0-3, 0,1) + ' --cpuset-mems string MEMs in which to allow execution + ' (0-3, 0,1) + ' -d, --detach Run container in background and + ' print container ID + ' --detach-keys string Override the key sequence for + ' detaching a container + ' --device list Add a host device to the container + ' --device-cgroup-rule list Add a rule to the cgroup allowed + ' devices list + ' --device-read-bps list Limit read rate (bytes per second) + ' from a device (default []) + ' --device-read-iops list Limit read rate (IO per second) + ' from a device (default []) + ' --device-write-bps list Limit write rate (bytes per + ' second) to a device (default []) + ' --device-write-iops list Limit write rate (IO per second) + ' to a device (default []) + ' --disable-content-trust Skip image verification (default true) + ' --dns list Set custom DNS servers + ' --dns-option list Set DNS options + ' --dns-search list Set custom DNS search domains + ' --entrypoint string Overwrite the default ENTRYPOINT + ' of the image + ' -e, --env list Set environment variables + ' --env-file list Read in a file of environment variables + ' --expose list Expose a port or a range of ports + ' --group-add list Add additional groups to join + ' --health-cmd string Command to run to check health + ' --health-interval duration Time between running the check + ' (ms|s|m|h) (default 0s) + ' --health-retries int Consecutive failures needed to + ' report unhealthy + ' --health-start-period duration Start period for the container to + ' initialize before starting + ' health-retries countdown + ' (ms|s|m|h) (default 0s) + ' --health-timeout duration Maximum time to allow one check to + ' run (ms|s|m|h) (default 0s) + ' --help Print usage + ' -h, --hostname string Container host name + ' --init Run an init inside the container + ' that forwards signals and reaps + ' processes + ' -i, --interactive Keep STDIN open even if not attached + ' --ip string IPv4 address (e.g., 172.30.100.104) + ' --ip6 string IPv6 address (e.g., 2001:db8::33) + ' --ipc string IPC mode to use + ' --isolation string Container isolation technology + ' --kernel-memory bytes Kernel memory limit + ' -l, --label list Set meta data on a container + ' --label-file list Read in a line delimited file of labels + ' --link list Add link to another container + ' --link-local-ip list Container IPv4/IPv6 link-local + ' addresses + ' --log-driver string Logging driver for the container + ' --log-opt list Log driver options + ' --mac-address string Container MAC address (e.g., + ' 92:d0:c6:0a:29:33) + ' -m, --memory bytes Memory limit + ' --memory-reservation bytes Memory soft limit + ' --memory-swap bytes Swap limit equal to memory plus + ' swap: '-1' to enable unlimited swap + ' --memory-swappiness int Tune container memory swappiness + ' (0 to 100) (default -1) + ' --mount mount Attach a filesystem mount to the + ' container + ' --name string Assign a name to the container + ' --network string Connect a container to a network + ' (default "default") + ' --network-alias list Add network-scoped alias for the + ' container + ' --no-healthcheck Disable any container-specified + ' HEALTHCHECK + ' --oom-kill-disable Disable OOM Killer + ' --oom-score-adj int Tune host's OOM preferences (-1000 + ' to 1000) + ' --pid string PID namespace to use + ' --pids-limit int Tune container pids limit (set -1 + ' for unlimited) + ' --privileged Give extended privileges to this + ' container + ' -p, --publish list Publish a container's port(s) to + ' the host + ' -P, --publish-all Publish all exposed ports to + ' random ports + ' --read-only Mount the container's root + ' filesystem as read only + ' --restart string Restart policy to apply when a + ' container exits (default "no") + ' --rm Automatically remove the container + ' when it exits + ' --runtime string Runtime to use for this container + ' --security-opt list Security Options + ' --shm-size bytes Size of /dev/shm + ' --sig-proxy Proxy received signals to the + ' process (default true) + ' --stop-signal string Signal to stop a container + ' (default "15") + ' --stop-timeout int Timeout (in seconds) to stop a + ' container + ' --storage-opt list Storage driver options for the + ' container + ' --sysctl map Sysctl options (default map[]) + ' --tmpfs list Mount a tmpfs directory + ' -t, --tty Allocate a pseudo-TTY + ' --ulimit ulimit Ulimit options (default []) + ' -u, --user string Username or UID (format: + ' [:]) + ' --userns string User namespace to use + ' --uts string UTS namespace to use + ' -v, --volume list Bind mount a volume + ' --volume-driver string Optional volume driver for the + ' container + ' --volumes-from list Mount volumes from the specified + ' container(s) + ' -w, --workdir string Working directory inside the container + Public ReadOnly Property [Shared] As Mount Public ReadOnly Property container As Image @@ -69,7 +214,14 @@ Public Class Environment Const InvalidMount$ = "Shared Drive argument is presented, but value is invalid, -v option will be ignored!" - Public Function CreateDockerCommand(command As String) As String + ''' + ''' + ''' + ''' + ''' Working directory inside the container + ''' Publish a container's port(s) to the host + ''' + Public Function CreateDockerCommand(command$, Optional workdir$ = Nothing, Optional portForward As PortForward = Nothing) As String Dim options As New StringBuilder If Not [Shared] Is Nothing Then @@ -79,6 +231,12 @@ Public Class Environment Call InvalidMount.Warning End If End If + If Not workdir.StringEmpty Then + Call options.AppendLine($"--workdir=""{workdir}""") + End If + If Not portForward Is Nothing Then + Call options.AppendLine($"-p {portForward}") + End If Return $"docker run {options} {container} {command}" End Function