Читать книгу 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.

Docker w praktyce

Подняться наверх