Читать книгу Docker w praktyce - Ian Miell - Страница 19
1.2.4. Uruchamianie dockerowego kontenera
ОглавлениеZbudowaliśmy i otagowaliśmy nasz dockerowy obraz. Teraz możemy uruchomić go jako kontener:
Listing 1.2. Rezultat docker run dla todoapp
$ docker run -i -t -p 8000:8000 --name example1 todoapp
Podkomenda docker run uruchamia kontener, -p mapuje port 8000 kontenera na port 8000 maszyny hosta, --name nadaje kontenerowi unikalną nazwę, a ostatnim argumentem jest nazwa obrazu
npm install
npm info it worked if it ends with ok
npm info using npm@2.14.4
npm info using node@v4.1.1
npm info prestart todomvc-swarm@0.0.1
> todomvc-swarm@0.0.1 prestart /todo
Dane wyjściowe procesu uruchamiania kontenera są wysyłane na terminal
> make all
npm install
npm info it worked if it ends with ok
npm info using npm@2.14.4
npm info using node@v4.1.1
npm WARN package.json todomvc-swarm@0.0.1 No repository field.
npm WARN package.json todomvc-swarm@0.0.1 license should be a valid SPDX
➥ license expression
npm info preinstall todomvc-swarm@0.0.1
npm info package.json statics@0.1.0 license should be a valid SPDX license
➥ expression
npm info package.json react-tools@0.11.2 No license field.
npm info package.json react@0.11.2 No license field.
npm info package.json node
-jsx@0.11.0 license should be a valid SPDX license expression
npm info package.json ws@0.4.32 No license field.
npm info build/todo
npm info linkStuff todomvc-swarm@0.0.1
npm info install todomvc-swarm@0.0.1
npm info post install todomvc-swarm@0.0.1
npm info prepublish todomvc-swarm@0.0.1
npm info ok
if [ ! -e dist/ ]; then mkdir dist; fi
cp node_modules/react/dist/react.min.js dist/react.min.js
LocalTodo App.js:9: // TODO: default english version
LocalTodoApp.js:84: fwdList = this.host.get('/TodoList#'+listId);
// TODO fn+id sig
TodoApp.js:117: // TODO scroll into view
TodoApp.js:176: if (i>=list.length()) { i=list.length()-1; } // TODO
➥ .length
local.html:30 :<!-- TODO 2-split, 3-split -->
model/TodoList.js:29: // TODO one op - repeated spec? long spec?
view/Footer.jsx:61: // TODO: show the entry's metadata
view/Footer.jsx:80: todoList.addObject(new TodoItem()); // TODO
➥ create default
view/Header.jsx:25: // TODO list some meaningful header (apart from the
➥ id)
npm info start todomvc-swarm@0.0.1
> todo mvc-swarm@0.0.1 start/todo
> node TodoAppServer.js
Swarm server started port 8000
^Cshutting down http-server...
Aby tutaj zakończyć proces i kontener, należy nacisnąć Ctrl-C
closing swarm host...
swarm host closed
npm info lifecycle todomvc-swarm@0.0.1~poststart: todomvc-swarm@0.0.1
npm info ok
$ docker ps -a
Aby zobaczyć kontenery wraz z identyfikatorem i statusem (jak dla procesu), które zostały uruchomione i usunięte, należy uruchomić tę komendę
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9db5ada0461 todoapp "npmstart" 2 minutes ago Exited (0) 2 minutes ago
➥ example1
$ docker start example1
Ponowne uruchomienie kontenera, tym razem w tle
example1
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
➥ PORTS NAMES
b9db5ada0461 todoapp "npm start" 8 minutes ago Up 10 seconds
➥ 0.0.0.0:8000->8000/tcp example1
Ponowne uruchomienie polecenia ps, aby zobaczyć zmieniony status
$ docker diff example1
Podkomenda docker diff pokazuje, jakie pliki zostały zmodyfikowane, od momentu gdy z obrazu został utworzony kontener
C /root
C /root/.npm
C /root/.npm/_locks
C/root/.npm/anonymous-cli-metrics.json
C /todo
Został zmieniony katalog /todo (C – changed)
A /todo/.swarm
Został dodany katalog /todo/.swarm (A – added)
A /todo/.swarm/_log
A /todo/dist
A /todo/dist/LocalTodoApp.app.js
A /todo/dist/TodoApp.app.js
A /todo/dist/react.min.js
C /todo/node_modules
Podkomenda docker run uruchamia kontener. Flaga -p mapuje port 8000 kontenera na port 8000 maszyny hosta, zatem powinniśmy być teraz w stanie za pomocą przeglądarki przejść do adresu http://localhost:8000, aby wyświetlić aplikację. Flaga --name nadaje kontenerowi unikalną nazwę, do której można się później wygodnie odwoływać. Ostatnim argumentem jest nazwa obrazu.
Po uruchomieniu kontenera możemy nacisnąć Ctrl-C, aby zakończyć proces i kontener. Możemy wykonać polecenie ps, aby zobaczyć kontenery, które zostały uruchomione, ale nie są usunięte. Zauważmy, że każdy kontener ma swój własny identyfikator i status, analogicznie jak proces. Jego status to Exited, natomiast możemy go ponownie uruchomić. Po wykonaniu tej czynności zwróćmy uwagę, że status zmienił się na Up i teraz wyświetlane jest mapowanie portów kontenera na maszynę hosta.
Podkomenda docker diff pokazuje, które pliki zostały zmodyfikowane, od momentu gdy z obrazu został utworzony kontener. W tym przypadku zmieniono katalog todo (C) oraz zostały dodane pozostałe wylistowane pliki (A). Żadne pliki nie zostały usunięte (D), co jest ostatnią możliwością.
Jak widzimy, fakt, że Docker „zawiera” nasze środowisko, oznacza, że możemy traktować go jako jednostkę, na której można przewidywalnie wykonywać działania. To pokazuje moc Dockera – możemy wpływać na cykl życia oprogramowania od etapu projektowania po produkcję i utrzymanie. Te zmiany będą tematem tej książki, pokazując w praktyce, co można zrobić za pomocą Dockera.
Teraz dowiemy się o warstwach, kolejnej kluczowej koncepcji Dockera.