Dlaczego Docker
Od jakiegoś czasu uważnie przyglądam się technologii kontenerów w różnych systemach operacyjnych. Zaczęlo się prawie 20 lat temu z Workload Managerem w AIXie, który potem przeszedł w WPARy. Gdzie po drodze obiły mi się jeszcze o uszy subsystemy w OS/400, kilka podejść w Linuxie (pierwsze w 2002 robione w... Polsce). W końcu technologia dojrzała, a świat dojrzał do niej: powszechna, wręcz chorobliwa wirtualizacja i aplikacje oparte o mikroserwisy.Ja do tematu dojrzałem dziś, bo mnie do tego zmusiła jednym, prostym ruchem Matka Korporacja: Wraz z wprowadzeniem klienta TSM/Spectrum Protect w wersji 8.1.2 (i 7.8) praktycznie zerwano z kompatybilnością w dół. A póki co, 100% systemów klikeckich z którymi pracuję to 7.1.7.XXX i niższe. A ficzury z 8.1.3 i 4 nęcą i potestować by się chciało.
Sęk jednak w tym, że serwer 8.1.4 nie gada z klientem niższym niż 7.8. Teoretycznie, klient 7.8 i 8.1.X, gdzie X >=2 gada z niższymi serwerami, ale jak raz zobaczy się z "wyższym" to już z niczym innym gadać nie będzie. Czyli muszę mieć dwóch klinetów BA w systemie - 8.1.1 do pracy i 8.1.4 do zabawy. A tego producent nie przewidział.
Zwykle w takiej sytuacji klonuję moją roboczą Fedorę, instaluję co trzeba i tyle. Tym razem postawiłem na Dockera.
Jak zacząć?
- Mieć jakiegoś w miarę nowoczesnego linuxa na hoście. Ja mam Fedorkę 27.
- Nie czytać https://docs.docker.com/get-started/.
- Przeczytać tę dokumentację, przynajmniej do ustępu o pomijaniu sudo.
- Rozpocząć zabawę z kontenerami.
A może jednak coś warto wiedzieć?
Mi wystarczyło mieć śwadomość następujących faktów, choć niektóre z nich uświadomiłem sobie "w boju":
- Kontener po zgaszeniu WRACA do oryginalnego stanu. Czyli nie ma tak, że odpalam sobie jakiś generyczny kontenerek z Fedorą (bardzo generyczny: bash, ls i dnf i kilka, w sumie 86MB innych programów), doinstalowuję co trzeba, gaszę i jak potrzebuję to odpalam.
- Kontener buduje się... na bazie innego kontenera. Ja postanowiłem użyć docker.io/fedora, który jest oficjalnym buildem fedory na Dockera.
- Kontener buduje się na podstawie Dockerfile. Tu jest dokumentacja z przykładowym plikiem.
Tworzenie kontenera
Sciągam podstawkę:$ docker pull docker.io/fedora
Using default tag: latest
Trying to pull repository docker.io/library/fedora ...
sha256:25f7dac76b2c88d8b7e0b1d6213d3406e77c7f230bfa1e66bd1cbb81a944eaaf: Pulling from docker.io/library/fedora
a8ee583972c2: Pull complete
Digest: sha256:25f7dac76b2c88d8b7e0b1d6213d3406e77c7f230bfa1e66bd1cbb81a944eaaf
Status: Downloaded newer image for docker.io/fedora:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/hello-world latest f2a91732366c 6 weeks ago 1.85 kB
docker.io/fedora latest 422dc563ca32 7 weeks ago 252 MB
Zakładam pusty katalog na mój projekt:
$ mkdir -p /home/marcinek/containers/SPCliV8.1.4
$ cd /home/marcinek/containers/SPCliV8.1.4
$
Na początek trzeba przygotować pliki jakie będą używane do budowy kontenera. Chcę zainstalować klienta Backup Archive (BA) w wersji 8.1.4. Mozna go sobie pobrać np stąd. Ja sobie stworzyłem katalog install gdzie wrzuciłem następujące pliki:
$ pwd
/home/marcinek/containers/SPCliV8.1.4
/home/marcinek/containers/SPCliV8.1.4
$ ls install/
8.1.4.0-TIV-TSMBAC-LinuxX86.tar gskssl64-8.0.50.78.linux.x86_64.rpm README.htm TIVsm-APIcit.x86_64.rpm TIVsm-BAhdw.x86_64.rpm TIVsm-filepath-source.tar.gz
gskcrypt64-8.0.50.78.linux.x86_64.rpm README_api.htm TIVsm-API64.x86_64.rpm TIVsm-BAcit.x86_64.rpm TIVsm-BA.x86_64.rpm TIVsm-JBB.x86_64.rpm
No i tworzę plik Dockerfile: (na razie z błędem!)
FROM fedora
run mkdir -p /opt/tivoli/tsm/client/ba/bin
add install/ /install
add dsm.sys /opt/tivoli/tsm/client/ba/bin
add dsm.opt /opt/tivoli/tsm/client/ba/bin
#run echo "proxy=http://192.168.1.12:3128" >> /etc/dnf/dnf.conf
run echo "53.46.173.120 tsmservice" >> /etc/hosts
run dnf -y install iproute nfs-utils fuse-sshfs.x86_64 iputils
run dnf -y install /install/gsk* /install/TIVsm-API64.x86_64.rpm /install/TIVsm-BA.x86_64.rpm
run rm -rf /install
CMD /opt/tivoli/tsm/client/ba/bin/dsmadmc
A teraz budowanie:
$ docker build -t marcinek/ispcli_v814 .
No i odpalam:
$ docker run -it marcinek/ispcli_v814 /bin/bash
[root@ae505b4dd377 /]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 ae505b4dd377
Czyli qpa. Nie opisała się zmiana pliku /etc/hosts. Docker najwyraźniej tak ma, rozwiązań jest kilka. Można np uruchamiać contener z opcją --add-host=[].
No to spróbujmy:
$ docker run --add-host tsmservice:53.46.173.120 -it marcinek/ispcli_v814 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
53.46.173.120 tsmservice
172.17.0.2 75fa3c6d2bce
Fantastik. To teraz jak zrobić, żeby się taka zmiana zapisała na poziomie budowania kontenera?
O tym napiszę poźniej, jak znajdę jakieś w miarę eleganckie rozwiązanie bo to co znajduje google nie jest ładne :-P
Brudne jest tu: http://jasonincode.com/customizing-hosts-file-in-docker/
$ docker build -t marcinek/ispcli_v814 .
No i odpalam:
$ docker run -it marcinek/ispcli_v814 /bin/bash
[root@ae505b4dd377 /]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 ae505b4dd377
Czyli qpa. Nie opisała się zmiana pliku /etc/hosts. Docker najwyraźniej tak ma, rozwiązań jest kilka. Można np uruchamiać contener z opcją --add-host=[].
No to spróbujmy:
$ docker run --add-host tsmservice:53.46.173.120 -it marcinek/ispcli_v814 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
53.46.173.120 tsmservice
172.17.0.2 75fa3c6d2bce
Fantastik. To teraz jak zrobić, żeby się taka zmiana zapisała na poziomie budowania kontenera?
O tym napiszę poźniej, jak znajdę jakieś w miarę eleganckie rozwiązanie bo to co znajduje google nie jest ładne :-P
Brudne jest tu: http://jasonincode.com/customizing-hosts-file-in-docker/
I jeszcze poprawka
Kończyłem ten artykuł mając pod ręką serwer 7.1.7.300. Jak wróciłem do mojego 8.1.4 , okazało się... że nie działa:
dsmadmc -se=tasiemiec
IBM Spectrum Protect
Command Line Administrative Interface - Version 8, Release 1, Level 4.0
(c) Copyright by IBM Corporation and other(s) 1990, 2017. All Rights Reserved.
Enter your user id: admin
Enter your password:
ANS1592E Failed to initialize SSL protocol.
ANS8023E Unable to establish session with server.
ANS8002I Highest return code was -362.
Zła informacja jest taka, że w dsmerror.log'u znajdują się dokładnie te dwa wpisy z ekranu i nic więcej. Pierwsza myśl. no to sobie włączę trace. Konia z rzędem temu, kto znajdzie w internecie kompletną listę flag tracingu do klienta BA. Klasy i owszem, pojedynczych flag, nie. Ponieważ wybieram się pobiegać, to szybkie rozwiązanie, w stylu żeby pozbyć się gorączki należy wyrzucić termometr. Zmienić session security dla admina na którego chcę wejść moim kontenerem ze STRICT na TRANSACTIONAL:
IBM Spectrum Protect
Command Line Administrative Interface - Version 8, Release 1, Level 4.0
(c) Copyright by IBM Corporation and other(s) 1990, 2017. All Rights Reserved.
Enter your user id: admin
Enter your password:
ANS1592E Failed to initialize SSL protocol.
ANS8023E Unable to establish session with server.
ANS8002I Highest return code was -362.
Zła informacja jest taka, że w dsmerror.log'u znajdują się dokładnie te dwa wpisy z ekranu i nic więcej. Pierwsza myśl. no to sobie włączę trace. Konia z rzędem temu, kto znajdzie w internecie kompletną listę flag tracingu do klienta BA. Klasy i owszem, pojedynczych flag, nie. Ponieważ wybieram się pobiegać, to szybkie rozwiązanie, w stylu żeby pozbyć się gorączki należy wyrzucić termometr. Zmienić session security dla admina na którego chcę wejść moim kontenerem ze STRICT na TRANSACTIONAL:
I teraz można już wchodzić na admina z kontenera.
$ dsmadmc -se=tasiemiec
IBM Spectrum Protect
Command Line Administrative Interface - Version 8, Release 1, Level 4.0
(c) Copyright by IBM Corporation and other(s) 1990, 2017. All Rights Reserved.
Enter your user id: admin
Enter your password:
Session established with server TASIEMIEC: Linux/x86_64
Server Version 8, Release 1, Level 4.000
Server date/time: 01/13/18 10:28:38 Last access: 01/13/18 10:26:43
Protect: TASIEMIEC>q pr
Process Process Description Process Status
Number
-------- -------------------- -------------------------------------------------
3 Local to Cloud Cancelling Move Container of OVH. Elapsed time:
Transfer 0 Days, 12 Hours, 54 Minutes.
Protect: TASIEMIEC>q stg
Storage Device Storage Estimated Pct Pct Hig- Lo- Next Stora-
Pool Name Class Name Type Capacity Util Migr h M- w ge Pool
ig Mi-
Pct g
Pct
----------- ---------- --------- ---------- ----- ----- ---- --- -----------
BMIX CLOUD 400 G 0.0
DIR_LOCAL DIRECTORY 400 G 20.1
IBM_DEPLOY- IBM_DEPLO- DEVCLASS 0.0 M 0.0 0.0 90 70
_CLIENT_P- Y_CLIENT-
OOL _IMPORT
OVH CLOUD 1,238 G 8.5
IBM Spectrum Protect
Command Line Administrative Interface - Version 8, Release 1, Level 4.0
(c) Copyright by IBM Corporation and other(s) 1990, 2017. All Rights Reserved.
Enter your user id: admin
Enter your password:
Session established with server TASIEMIEC: Linux/x86_64
Server Version 8, Release 1, Level 4.000
Server date/time: 01/13/18 10:28:38 Last access: 01/13/18 10:26:43
Protect: TASIEMIEC>q pr
Process Process Description Process Status
Number
-------- -------------------- -------------------------------------------------
3 Local to Cloud Cancelling Move Container of OVH. Elapsed time:
Transfer 0 Days, 12 Hours, 54 Minutes.
Protect: TASIEMIEC>q stg
Storage Device Storage Estimated Pct Pct Hig- Lo- Next Stora-
Pool Name Class Name Type Capacity Util Migr h M- w ge Pool
ig Mi-
Pct g
Pct
----------- ---------- --------- ---------- ----- ----- ---- --- -----------
BMIX CLOUD 400 G 0.0
DIR_LOCAL DIRECTORY 400 G 20.1
IBM_DEPLOY- IBM_DEPLO- DEVCLASS 0.0 M 0.0 0.0 90 70
_CLIENT_P- Y_CLIENT-
OOL _IMPORT
OVH CLOUD 1,238 G 8.5
A wracając do SSLa - spróbuję to rozkminić tak, żeby działało na domyślnym ustawieniu STRICT. Pewnie zacznę od tracingu serwera, bo tam jest bardzo obiecująca flaga SSLINFO...