docker container - aleksei-khitev/knowledge_base GitHub Wiki

Docker Container

Запуск контейнера

Запуск контейнера jboss/wildfly к примеру (его локально нет).
Если образа нет (как сейчас), docker загрузит последнюю версию

~$ sudo docker container run jboss/wildfly
[sudo] пароль для aleksei_khitev: 
Unable to find image 'jboss/wildfly:latest' locally
latest: Pulling from jboss/wildfly
75f829a71a1c: Pull complete 
7b11f246b3d3: Pull complete 
b765648c2a58: Pull complete 
506aff4a9c5a: Pull complete 
7b9c6d08c8d3: Pull complete 
Digest: sha256:1f39dbbe874367e008c6d70fa687f1afec00a0304a53a8cf7d832b77221f6922
Status: Downloaded newer image for jboss/wildfly:latest
=========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /opt/jboss/wildfly

  JAVA: /usr/lib/jvm/java/bin/java
...
11:42:10,052 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 24.0.0.Final (WildFly Core 16.0.0.Final) started in 3117ms - Started 319 of 558 services (344 services are lazy, passive or on-demand)
11:42:10,053 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
11:42:10,053 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990

Курс Docker for Java Developers

Интерактивный режим

Для запуска контейнера в интерактивном режиме, нужно добавить аттрибут -it
Курс Docker for Java Developers

Режим detached

~$ sudo docker container run -d jboss/wildfly
3cea55172ee896659df19c20c5aa7037f91deff82109f84138bf48ee0a45588a
~$ sudo docker container list
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS         PORTS      NAMES
3cea55172ee8   jboss/wildfly   "/opt/jboss/wildfly/…"   10 seconds ago   Up 9 seconds   8080/tcp   great_tu

Курс Docker for Java Developers

Список контейнеров

Список работающих контейнеров

~$ sudo docker container list
[sudo] пароль для aleksei_khitev: 
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS      NAMES
ebe2f919f1b3   jboss/wildfly   "/opt/jboss/wildfly/…"   20 seconds ago   Up 20 seconds   8080/tcp   agitated_poincare

Список всех контейнеров

$ sudo docker container list -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS                      PORTS     NAMES
ebe2f919f1b3   jboss/wildfly   "/opt/jboss/wildfly/…"   8 minutes ago    Exited (0) 7 minutes ago              agitated_poincare
f015ee8c9e35   jboss/wildfly   "/opt/jboss/wildfly/…"   9 minutes ago    Exited (0) 8 minutes ago              zen_lamport
1b84c3d0beb8   jboss/wildfly   "/opt/jboss/wildfly/…"   14 minutes ago   Exited (0) 10 minutes ago             hopeful_sinoussi
79fd095a4a99   27ed921be277    "/bin/sh -c 'cd /u01…"   11 months ago    Exited (2) 11 months ago              focused_kalam
e0aec28b03cf   5c12d483d60e    "/bin/sh -c 'cd /u01…"   11 months ago    Exited (2) 11 months ago              vigilant_diffie
22ad500c5140   760dce04e891    "/bin/sh -c 'mkdir u…"   11 months ago    Exited (1) 11 months ago              condescending_antonelli
fbdc617d3b56   7f041ad9ac51    "/bin/sh -c 'mkdir -…"   11 months ago    Exited (1) 11 months ago              xenodochial_bose
19cd6557c723   hello-world     "/hello"                 12 months ago    Exited (0) 12 months ago              pedantic_khayyam

Курс Docker for Java Developers

Остановка контейнера через команду

Для остановки можно использовать как id контейнера, так и имя

~$ sudo docker container list
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS         PORTS      NAMES
3cea55172ee8   jboss/wildfly   "/opt/jboss/wildfly/…"   10 seconds ago   Up 9 seconds   8080/tcp   great_tu
~$ sudo docker container stop 3cea55172ee8
3cea55172ee8
~$ sudo docker container list
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Курс Docker for Java Developers

Удаление остановленного контейнера

~$ sudo docker container rm great_tu
great_tu

Курс Docker for Java Developers

Удаление контейнера с принудительной остановкой

~$ sudo docker container list
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS      NAMES
2acbcdf27bab   jboss/wildfly   "/opt/jboss/wildfly/…"   4 seconds ago   Up 3 seconds   8080/tcp   test_app_server
~$ sudo docker container rm -f test_app_server
test_app_server
aleksei_khitev@aleksei-PC:~$ sudo docker container list
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Курс Docker for Java Developers

Запуск контейнера со своим заданны именем, а не автосгенерированным

~$ sudo docker container run -d --name test_app_server jboss/wildfly
2acbcdf27bab341ed3025028261d3e367172fc18fb7fee5b8184154dc8de43f8
~$ sudo docker container list
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS      NAMES
2acbcdf27bab   jboss/wildfly   "/opt/jboss/wildfly/…"   4 seconds ago   Up 3 seconds   8080/tcp   test_app_server

Курс Docker for Java Developers

Запуск контейнера со входом в его консоль

Как я понял, при указании команды bash, команда запуска не сработает, а вместо этого будет выполнена команда bash (уточнить)
Запуск консоли не сработает с режимом detached

~$ sudo docker container run -it --name test_app_server jboss/wildfly bash
[jboss@c9047b9f01c3 ~]$ ps -aux | grep java
jboss         21  0.0  0.0   9108   848 pts/0    S+   12:06   0:00 grep --color=auto java
[jboss@c9047b9f01c3 ~]$ exit
exit
aleksei_khitev@aleksei-PC:~$ sudo docker container list
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

При этом, выход из консоли контейнера останавливает контейнер Курс Docker for Java Developers

Запуск контейнера с портом

Аттрибут -P говорит, чтобы докер назначил какие то порты из пула и прокинул его к контейнеру, ко всем expose-ным портам

~$ sudo docker container run -d --name test_app_server -P jboss/wildfly
bdf595726f7980ddb019272052fd0c38bdace6cb4ea8a926dff16ece18d32c54
~$ sudo docker container list
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS                     NAMES
bdf595726f79   jboss/wildfly   "/opt/jboss/wildfly/…"   9 seconds ago   Up 8 seconds   0.0.0.0:49154->8080/tcp   test_app_server
~$ curl -vv http://localhost:49154/
*   Trying 127.0.0.1:49154...
* Connected to localhost (127.0.0.1) port 49154 (#0)
> GET / HTTP/1.1
...
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
...
<!DOCTYPE html>
<html>
<head>
    ...
</head>
<body>
<div class="wrapper">
    <div class="content">
        <div class="logo">
                <img src="wildfly_logo.png" alt="WildFly" border="0" />
        </div>

В docker container list в разделе PORTS можно увидеть порт, по которому приложение в контейнере доступно на реальной машине
Курс Docker for Java Developers

Назначение конкретных портов для контейнера

После аттрибута -p сначала идет порт реальной машины, а дальше порт контейнера

~$ sudo docker container run -d --name test_app_server -p 8080:8080 jboss/wildfly
cfd7adba4bfa9bd2c73f067491f88d0c054b607b2733e901b94b7d898f5f12a9

Курс Docker for Java Developers

Просмотр логов контейнера

~$ sudo docker container logs  test_app_server
=========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /opt/jboss/wildfly

  JAVA: /usr/lib/jvm/java/bin/java
...
11:19:47,202 INFO  [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0212: Resuming server
11:19:47,204 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 24.0.0.Final (WildFly Core 16.0.0.Final) started in 3392ms - Started 319 of 558 services (344 services are lazy, passive or on-demand)
11:19:47,205 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
11:19:47,206 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990

Просмотр логов контейнера в реальном времени

 sudo docker container logs  test_app_server -f

Курс Docker for Java Developers

Монтирование Volume в контейнер

chapter2$ ll
итого 28
drwxrwxr-x 3 aleksei_khitev aleksei_khitev 4096 апр  9  2017 ./
drwxrwxr-x 8 aleksei_khitev aleksei_khitev 4096 апр  9  2017 ../
drwxrwxr-x 3 aleksei_khitev aleksei_khitev 4096 апр  9  2017 myapp/
-rw-rw-r-- 1 aleksei_khitev aleksei_khitev 6490 апр  9  2017 readme.adoc
-rw-rw-r-- 1 aleksei_khitev aleksei_khitev 6599 апр  9  2017 webapp.war
chapter2$ sudo docker container run -d --name test_app_server -p 8080:8080 -v /home/aleksei_khitev/Загрузки/docker-for-java-master/chapter2/webapp.war:/opt/jboss/wildfly/standalone/deployments/webapp.war jboss/wildfly
d5e48c9c426303c1b286ce1a5cbaba76fbcea405b91453346aa9441c3559b044
chapter2$ sudo docker container logs  test_app_server
=========================================================================

  JBoss Bootstrap Environment
...
11:46:34,155 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 80) WFLYUT0021: Registered web context: '/webapp' for server 'default-server'
11:46:34,215 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 45) WFLYSRV0010: Deployed "webapp.war" (runtime-name : "webapp.war")
11:46:34,257 INFO  [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0212: Resuming server
...
chapter2$ curl http://localhost:8080/webapp/resources/persons
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><collection><person><name>Penny</name></person><person><name>Leonard</name></person><person><name>Sheldon</name></person><person><name>Amy</name></person><person><name>Howard</name></person><person><name>Bernadette</name></person><person><name>Raj</name></person><person><name>Priya</name></person></collection>

У меня не сработал с ./webapp.war или webapp.war. Пришлось задать полный путь
Курс Docker for Java Developers

⚠️ **GitHub.com Fallback** ⚠️