Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker...

80
Dyalog's [Public] Docker Containers Morten Kromberg CTO, Dyalog Ltd.

Transcript of Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker...

Page 1: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

Dyalog's [Public]Docker ContainersMorten KrombergCTO, Dyalog Ltd.

Page 2: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

1

Dyalog's Docker Containers#dyalog20

Agenda What is a Container

Why should you want one?

Dyalog's Public Docker Containers Starting, Using, Stopping, Debugging

Extending Dyalog's Containers Combining Containers using

docker-compose

Page 3: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

2

Dyalog's Docker Containers#dyalog20

Agenda What is a Container

Why should you want one?

Dyalog's Public Docker Containers Starting, Using, Stopping, Debugging

Extending Dyalog's Containers Combining Containers using

docker-compose

Page 4: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

3

Dyalog's Docker Containers#dyalog20

What is a "Container"?Containers are a mechanism for partitioning a host computer so multiple applications believe they are running alone on the machine.

The effect is similar, but much more efficient than running a Virtual Machine.

Page 5: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

4

Dyalog's Docker Containers#dyalog20

Containers & Docker

http://www.zdnet.com/article/what-is-docker-and-why-is-it-so-darn-popular/

The most widely usedcontainer technologyare "docker" containers

Page 6: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

5

Dyalog's Docker Containers#dyalog20

Containers & Docker

http://www.zdnet.com/article/what-is-docker-and-why-is-it-so-darn-popular/

The most widely usedcontainer technologyare "docker" containers

Page 7: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

6

Dyalog's Docker Containers#dyalog20

FROM ubuntu:20.04

ADD ./dyalog-unicode_18.0.39491_amd64.deb /

RUN dpkg -i /dyalog*.debRUN git clone https://github.com/dyalog/jarvis /jarvis

ENV CodeLocation="/code"

CMD dyalog /jarvis/distribution/jarvis.dws

"Dockerfile" (text) describes the Container

(Imaginary dyalog/jarvis image)

Page 8: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

7

Dyalog's Docker Containers#dyalog20

FROM ubuntu:20.04

ADD ./dyalog-unicode_18.0.39491_amd64.deb /

RUN dpkg -i /dyalog*.debRUN git clone https://github.com/dyalog/jarvis /jarvis

ENV CodeLocation="/code"

CMD dyalog /jarvis/distribution/jarvis.dws

"Dockerfile" (text) describes the Container

Base Image

Files to Add

Run during Build

Environment Vars

Run at Startup

(Imaginary dyalog/jarvis image)

Page 9: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

8

Dyalog's Docker Containers#dyalog20

docker run ... Starts the Containerdocker run –it –p 8080:8080 dyalog/jarvis

Page 10: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

9

Dyalog's Docker Containers#dyalog20

docker run ... Starts the Containerdocker run –it –p 8080:8080 dyalog/jarvis

(don't ask …but also … don't forget!)

Switch Description

-p hhhh:cccc Map TCP port cccc in container to hhhh on host-e name=value Set environment variable inside the container-v /hfolder:/cfolder Mount hosts /hfolder as containers /cfolder-t Allocate a pseudo-TTY-i Keep stdin open even if not attached--rm Discard changes when container terminates

docker run cheat sheet

Page 11: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

10

Dyalog's Docker Containers#dyalog20

docker run ... map TCP portsdocker run -it –p 8080:8080 dyalog/jarvis

Maps port 8080 in containerto 8080 in the host

By default, the containernetwork is completely isolated

Switch Description

-p hhhh:cccc Map TCP port cccc in container to hhhh on host-e name=value Set environment variable inside the container-v /hfolder:/cfolder Mount hosts /hfolder as containers /cfolder-t Allocate a pseudo-TTY-i Keep stdin open even if not attached--rm Discard changes when container terminates

docker run cheat sheet

Page 12: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

11

Dyalog's Docker Containers#dyalog20

docker run ... mount volumesdocker run -it -v /my/app/folder:/code –p 8080:8080 dyalog/jarvis

Mount the host folder/my/app/folder to /codeinside the container.

Switch Description

-p hhhh:cccc Map TCP port cccc in container to hhhh on host-e name=value Set environment variable inside the container-v /hfolder:/cfolder Mount hosts /hfolder as containers /cfolder-t Allocate a pseudo-TTY-i Keep stdin open even if not attached--rm Discard changes when container terminates

docker run cheat sheet

Page 13: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

12

Dyalog's Docker Containers#dyalog20

docker run ... set environment varsdocker run -it -v /my/app/folder:/code –p 8080:8080 -e RIDE_INIT=SERVE:*:4502 –p 4502:4502 dyalog/jarvis

Set environment variableRIDE_INIT inside the container

NB: Don't forget to openthe additional port

Switch Description

-p hhhh:cccc Map TCP port cccc in container to hhhh on host-e name=value Set environment variable inside the container-v /hfolder:/cfolder Mount hosts /hfolder as containers /cfolder-t Allocate a pseudo-TTY-i Keep stdin open even if not attached--rm Discard changes when container terminates

docker run cheat sheet

Page 14: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

13

Dyalog's Docker Containers#dyalog20

Page 15: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

14

Dyalog's Docker Containers#dyalog20

Page 16: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

15

Dyalog's Docker Containers#dyalog20

Page 17: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

16

Dyalog's Docker Containers#dyalog20

Page 18: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

17

Dyalog's Docker Containers#dyalog20

Page 19: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

18

Dyalog's Docker Containers#dyalog20

Jarvis - Sample JSON ApplicationBy default, Jarvis serves a built-in demo application

Page 20: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

19

Dyalog's Docker Containers#dyalog20

Call Jarvis service from APL

Page 21: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

20

Dyalog's Docker Containers#dyalog20

More details on Docker and APL

Dyalog'18 (Belfast): Cloud Computing with APLhttps://dyalog.tv/Dyalog18/?v=LkXKUm9ffKA

Webinar: Microservices in Dyalog APLhttps://dyalog.tv/Webinar/?v=KKJMeGAWGaE

Page 22: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

21

Dyalog's Docker Containers#dyalog20

Page 23: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

22

Dyalog's Docker Containers#dyalog20

Page 24: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

23

Dyalog's Docker Containers#dyalog20

Dyalog's Public ContainersAt https://hub.docker.com/u/dyalog

Image Name Description

dyalog/dyalog Minimal Linux with Dyalog APL (currently debian:buster-slim)dyalog/jarvis dyalog/dyalog with Jarvis installeddyalog/jsonserver Use dyalog/jarvis instead

dyalog/miserver ... with MiServer installed

dyalog/jupyter For Dyalog-backed Jupyter notebooks

Page 25: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

24

Dyalog's Docker Containers#dyalog20

Page 26: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

25

Dyalog's Docker Containers#dyalog20

Page 27: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

26

Dyalog's Docker Containers#dyalog20

Page 28: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

27

Dyalog's Docker Containers#dyalog20

Page 29: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

28

Dyalog's Docker Containers#dyalog20

Page 30: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

29

Dyalog's Docker Containers#dyalog20

Boot FoldersEach of our public containers has a default folder which it will look for:

Image Name Description Boot Folder

dyalog/dyalog Minimal Linux with Dyalog APL /appdyalog/jarvis dyalog/dyalog with Jarvis installed /codedyalog/jsonserver Use dyalog/jarvis instead /code

dyalog/miserver ... with MiServer installed /misite

dyalog/jupyter For Dyalog-backed Jupyter notebooks /app

docker run -it -v /my/app/folder:/code dyalog/jarvis

Page 31: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

30

Dyalog's Docker Containers#dyalog20

Stopping a Container Implement some kind of ShutDown

method in your service The container will shut down when the

launched process terminates Connect RIDE if you can and type )OFF or ...

Page 32: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

31

Dyalog's Docker Containers#dyalog20

Page 33: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

32

Dyalog's Docker Containers#dyalog20

(hits CTRL+BREAK)

Page 34: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

33

Dyalog's Docker Containers#dyalog20

(hits CTRL+BREAK)

Page 35: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

34

Dyalog's Docker Containers#dyalog20

(hits CTRL+BREAK)

Page 36: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

35

Dyalog's Docker Containers#dyalog20

(hits CTRL+C)

Page 37: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

36

Dyalog's Docker Containers#dyalog20

Tags Containers may have several tags, identifying variants dyalog/dyalog has the following tags

latest 18.0 17.1 dotnetcore

Will probably become 18.0-dotnetcore, 19.0-dotnetcore

docker run –it –e RIDE_INIT=HTTP:*:4502 –p 4502:4502 dyalog/dyalog:17.1

Page 38: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

37

Dyalog's Docker Containers#dyalog20

Page 39: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

38

Dyalog's Docker Containers#dyalog20

Debugging – One More Time To be able to use RIDE for debugging, add

-e RIDE_INIT=SERVE:*:4502 –p 4502:4502

To use "Zero Footprint" RIDE via a browser, use HTTP mode:-e RIDE_INIT=HTTP:*:4502 –p 4502:4502

Live demo time...

Page 40: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

39

Dyalog's Docker Containers#dyalog20

Everything is the same under Linux In fact, Docker Desktop for Windows got

a huge makeover since last year Now uses "WSL"

(WindowsSubsystem forLinux)

Page 41: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

40

Dyalog's Docker Containers#dyalog20

Page 42: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

41

Dyalog's Docker Containers#dyalog20

Page 43: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

42

Dyalog's Docker Containers#dyalog20

Extending Dyalog's ContainersYou can extend Dyalog's containers with Your code Data, except it usually makes more

sense to map data in at runtime

Page 44: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

43

Dyalog's Docker Containers#dyalog20

Page 45: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

44

Dyalog's Docker Containers#dyalog20

Page 46: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

45

Dyalog's Docker Containers#dyalog20

Page 47: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

46

Dyalog's Docker Containers#dyalog20

Page 48: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

47

Dyalog's Docker Containers#dyalog20

Page 49: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

48

Dyalog's Docker Containers#dyalog20

Page 50: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

49

Dyalog's Docker Containers#dyalog20

Page 51: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

50

Dyalog's Docker Containers#dyalog20

Page 52: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

51

Dyalog's Docker Containers#dyalog20

Distributing Containers

Page 53: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

52

Dyalog's Docker Containers#dyalog20

Distributing Containers

Page 54: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

53

Dyalog's Docker Containers#dyalog20

Distributing Containers

Page 55: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

54

Dyalog's Docker Containers#dyalog20

Distributing Containers

Page 56: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

55

Dyalog's Docker Containers#dyalog20

Distributing Containers

Page 57: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

56

Dyalog's Docker Containers#dyalog20

Collaborating Containers We will use qWC to put a frontend on the

myzodiac server

Page 58: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

57

Dyalog's Docker Containers#dyalog20

Communicating Containers We will use qWC to put a frontend on

the myzodiac server

Page 59: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

58

Dyalog's Docker Containers#dyalog20

Page 60: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

59

Dyalog's Docker Containers#dyalog20

Page 61: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

60

Dyalog's Docker Containers#dyalog20

Page 62: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

61

Dyalog's Docker Containers#dyalog20

Let's build a qWC Container

docker build . –t mkromberg/qwc

Dyalog APL plus some QWC folders:

Maybe someday this will just be

mjhsoftware/qwc

Page 63: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

62

Dyalog's Docker Containers#dyalog20

To start it Start Jarvis "backend"

docker run –it –p 8080:8080 mkromberg/myzodiac

Page 64: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

63

Dyalog's Docker Containers#dyalog20

To start it Start Jarvis "backend"

docker run –it –p 8080:8080 mkromberg/myzodiac

... or use "docker-compose" ...

Start QWC frontenddocker run –it –v qwcuser:/qwc/User –v qwcconfig:/qwc/Config –p 1234:1234 –p 12345:12345mkromberg/qwc

Page 65: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

64

Dyalog's Docker Containers#dyalog20

Page 66: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

65

Dyalog's Docker Containers#dyalog20

docker-compose up

Page 67: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

66

Dyalog's Docker Containers#dyalog20

Page 68: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

67

Dyalog's Docker Containers#dyalog20

Let's test it ...

Page 69: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

68

Dyalog's Docker Containers#dyalog20

But instead we will use docker-composeContainers restarted if they "fail"

Page 70: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

69

Dyalog's Docker Containers#dyalog20

But instead we will use docker-compose

Page 71: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

70

Dyalog's Docker Containers#dyalog20

But instead we will use docker-compose

Only if myzodiac should beavailable from outside

Page 72: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

71

Dyalog's Docker Containers#dyalog20

Page 73: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

72

Dyalog's Docker Containers#dyalog20

Page 74: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

73

Dyalog's Docker Containers#dyalog20

docker-compose can also do Load balancing by starting multiple

copies of the same image and multiplexing between them

Help with continuous integration by pulling new versions of the images

and much more that I have not learned about yet

Page 75: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

74

Dyalog's Docker Containers#dyalog20

Page 76: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

75

Dyalog's Docker Containers#dyalog20

Page 77: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

76

Dyalog's Docker Containers#dyalog20

Relevant v19.0 Goals Completely rework I/O handling to allow

Support RIDE without -it RIDE improvements in multi-threaded

server environments Documentation for all the public dyalog

containers Open-source demo apps showing how to

build secure, load balanced apps in APL

Page 78: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

77

Dyalog's Docker Containers#dyalog20

We will publish our Dockerfiles on GitHub

Page 79: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

78

Dyalog's Docker Containers#dyalog20

Recap: Dyalog's Public ContainersAt https://hub.docker.com/u/dyalog

Image Name Description Boot Folder

dyalog/dyalog Minimal Linux with Dyalog APL /appdyalog/jarvis dyalog/dyalog with Jarvis installed /codedyalog/jsonserver Use dyalog/jarvis instead /code

dyalog/miserver ... with MiServer installed /misite

dyalog/jupyter For Dyalog-backed Jupyter notebooks /app

Page 80: Dyalog's [Public] Docker Containers · 2020. 11. 11. · #dyalog20 Dyalog'sDocker Containers docker run ... map TCP ports docker run -it –p 8080:8080 dyalog/jarvis Maps port 8080

79

Dyalog's Docker Containers#dyalog20

Should we run a half-day workshop? Write to me if you would attend