prjemian / epics-docker

Provide EPICS IOCs in docker images
9 stars 4 forks source link

how to start multiple IOCs in one container #65

Closed LeeYangLBLBCS closed 1 year ago

LeeYangLBLBCS commented 1 year ago

Is it possible to start multiple IOCs in one docker container? I can start one IOC per container, but that's too resource demanding. thanks.

prjemian commented 1 year ago

Yes, this is possible. The starter scripts are not written for this but it is possible. You might have to make them yourself. The image contains all the software to compile EPICS in a container. You should also consider mounting a volume or volumes for any custom IOC configurations.

LeeYangLBLBCS commented 1 year ago

Could you point me to a resource for building such a script?

It sounds simple but I couldn’t figure it out after trying for several hours. This is not a docker specific question, though I thought a docker user will more likely to know the answer.

On Sat, May 6, 2023 at 6:54 PM Pete R Jemian @.***> wrote:

Yes, this is possible. The starter scripts are not written for this but it is possible. You might have to make them yourself. The image contains all the software to compile EPICS in a container. You should also consider mounting a volume or volumes for any custom IOC configurations.

— Reply to this email directly, view it on GitHub https://github.com/prjemian/epics-docker/issues/65#issuecomment-1537266196, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADSYGNB2MTVNYKA2EFORQPDXE36GBANCNFSM6AAAAAAXYQDQFY . You are receiving this because you authored the thread.Message ID: @.***>

-- Lee Yang Lawrence Berkeley National Lab 1 Cyclotron Road, M/S 15R0217 Berkeley, California 97320 office:(510)486-7320

prjemian commented 1 year ago

There is a script in the image, in /root/bin/gp.sh or such. When i get to a real keyboard, i can give you better details. Using my phone now.

On Sat, May 6, 2023, 9:13 PM Lee Yang @.***> wrote:

Could you point me to a resource for building such a script?

It sounds simple but I couldn’t figure it out after trying for several hours. This is not a docker specific question, though I thought a docker user will more likely to know the answer.

On Sat, May 6, 2023 at 6:54 PM Pete R Jemian @.***> wrote:

Yes, this is possible. The starter scripts are not written for this but it is possible. You might have to make them yourself. The image contains all the software to compile EPICS in a container. You should also consider mounting a volume or volumes for any custom IOC configurations.

— Reply to this email directly, view it on GitHub < https://github.com/prjemian/epics-docker/issues/65#issuecomment-1537266196 , or unsubscribe < https://github.com/notifications/unsubscribe-auth/ADSYGNB2MTVNYKA2EFORQPDXE36GBANCNFSM6AAAAAAXYQDQFY

. You are receiving this because you authored the thread.Message ID: @.***>

-- Lee Yang Lawrence Berkeley National Lab 1 Cyclotron Road, M/S 15R0217 Berkeley, California 97320 office:(510)486-7320

— Reply to this email directly, view it on GitHub https://github.com/prjemian/epics-docker/issues/65#issuecomment-1537269998, or unsubscribe https://github.com/notifications/unsubscribe-auth/AARMUMAOFYRXQCI6INNUJRDXE4AMJANCNFSM6AAAAAAXYQDQFY . You are receiving this because you commented.Message ID: @.***>

prjemian commented 1 year ago

The docker image is prepared as a workstation with software to perform a complete EPICS server role. Compilers are installed to make a complete compile of all EPICS modules it contains (base, synApps, & area detector). It also has minimal EPICS client software (command line tools from EPICS base, includes cainfo, caget, caput, camonitor, pvget, pvput, pvlist, pvinfo, pvmonitor). A running container, like any workstation, is capable of running one or more of these IOCs at the same time, within the limit of the container's resources.

This (bash) command is the core part:

../../bin/${EPICS_HOST_ARCH}/xxx st.cmd.Linux

The synApps XXX module is a:

template to use when creating an EPICS IOC that provides beam line support.

The XXX module provides starter scripts to enable running the IOC directly from the command line or in a background wrapper process (either procserv or screen). The run script is part of this support. Its purpose is to ensure the same IOC is not run more than once at a time.

To run in a screen background process, the in-screen.sh script was built.

The [xxx.sh script]() includes this capability and adds an extendable system of plugins (in the commands/ subdirectory) that support many command-line options to start the IOC. The point of the xxx.sh is to provide a single script which ensures all environment variables are defined before starting this IOC.

Often, controls support staff will create a connection to xxx.sh from the beamline's operating account, typically in the ~/bin directory as a soft link, a wrapper script, or a bash alias. The docker image creates a wrapper script called gp.sh. Additional issues are to create wrappers to make it easy to start pvaDriver and ADURL IOCs.

Many of the modules in the docker image contain a variety of IOC boot directories. The $XXX/iocBoot/iocxxx is one of them. The image also contains customized versions of XXX and ADSimDetector to provide general purpose beam line components. Each has its own wrapper script to make it easy to start IOCs from a running container:

wrapper IOC description
/root/adsim.sh ADSIM Custom ADSimDetector area detector IOC
/root/gp.sh GP Custom XXX IOC
LeeYangLBLBCS commented 1 year ago

thank you very much for the explanation. It's very helpful.