Статьи

Докер сочиняет для организации контейнеров

В Docker Orchestration с использованием Fig было показано, как определить и управлять мультиконтейнерной службой с помощью Fig. С тех пор Fig был переименован в Docker Compose или Compose для краткости.

Первый релиз Compose был анонсирован недавно:

С github.com/docker/compose :

Compose — это инструмент для определения и запуска сложных приложений с помощью Docker. С помощью Compose вы определяете мультиконтейнерное приложение в одном файле, а затем раскручиваете свое приложение одной командой, которая делает все, что нужно, чтобы запустить его.

Docker Compose использует тот же API, который используется другими командами и инструментами Docker.

techtip77-докер-Compose

Этот технический совет перепишет Docker Orchestration, используя блог Fig для использования Docker Compose. Другими словами, он покажет, как запустить приложение Java EE 7, которое развернуто с использованием MySQL и WildFly.

Давайте начнем!

Установить Docker Compose

Установите Compose as:

1
2
curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Файл конфигурации Docker Compose

Точкой входа в Compose является docker-compose.yml . Для начала, инструмент docker-compose также распознает fig.yml файла fig.yml но показывает следующее сообщение:

1
fig.yml is deprecated and will not be supported in future. Please rename your config file to docker-compose.yml

И если в fig.yml и fig.yml и docker-compose.yml отображается следующее сообщение:

1
2
Found multiple config files with supported names: docker-compose.yml, fig.yml
Using docker-compose.yml

Используйте тот же файл конфигурации из предыдущего блога и переименуйте в docker-compose.yml :

01
02
03
04
05
06
07
08
09
10
11
12
13
mysqldb:
  image: mysql:latest
  environment:
    MYSQL_DATABASE: sample
    MYSQL_USER: mysql
    MYSQL_PASSWORD: mysql
    MYSQL_ROOT_PASSWORD: supersecret
mywildfly:
  image: arungupta/wildfly-mysql-javaee7
  links:
    - mysqldb:db
  ports:
    - 8080:8080

Этот файл конфигурации на основе YML имеет:

  1. Два контейнера, определенные именами «mysqldb» и «mywildfly»
  2. Имена изображений определяются с помощью «изображения»
  3. Переменные среды для контейнера MySQL определены в «среде»
  4. Контейнер MySQL связан с контейнером WildFly с помощью «ссылок»
  5. Переадресация портов осуществляется с помощью «портов»

Запустить, проверить, остановить контейнеры Docker

  1. Все контейнеры могут быть запущены в отдельном режиме с помощью команды:
    1
    docker-compose up -d

    И это показывает результат как:

    1
    2
    Creating wildflymysqljavaee7_mysqldb_1...
    Creating wildflymysqljavaee7_mywildfly_1...
  2. Проверьте контейнеры как:
    1
    2
    3
    4
    5
    docker-compose ps
                 Name                            Command               State                Ports              
    -------------------------------------------------------------------------------------------
    wildflymysqljavaee7_mysqldb_1     /entrypoint.sh mysqld --da ...   Up      3306/tcp                        
    wildflymysqljavaee7_mywildfly_1   /opt/jboss/wildfly/customi ...   Up      0.0.0.0:8080->8080/tcp, 9990/tcp
  3. Журналы для контейнеров можно увидеть как:
    1
    docker-compose logs

    И показывает вывод как:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    mywildfly_1 | => Starting WildFly server
    mywildfly_1 | => Waiting for the server to boot
    mywildfly_1 | =========================================================================
    mywildfly_1 |
    mywildfly_1 |   JBoss Bootstrap Environment
    mywildfly_1 |
    mywildfly_1 |   JBOSS_HOME: /opt/jboss/wildfly
    mywildfly_1 |
    mywildfly_1 |   JAVA: /usr/lib/jvm/java/bin/java
    mywildfly_1 |
    mywildfly_1 |   JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
     
     
    . . .
     
     
    mywildfly_1 | 18:43:38,449 INFO  [stdout] (ServerService Thread Pool -- 50) Hibernate: INSERT INTO EMPLOYEE_SCHEMA(ID, NAME) VALUES (6, 'Raj')
    mywildfly_1 | 18:43:38,452 INFO  [stdout] (ServerService Thread Pool -- 50) Hibernate: INSERT INTO EMPLOYEE_SCHEMA(ID, NAME) VALUES (7, 'Howard')
    mywildfly_1 | 18:43:38,455 INFO  [stdout] (ServerService Thread Pool -- 50) Hibernate: INSERT INTO EMPLOYEE_SCHEMA(ID, NAME) VALUES (8, 'Priya')
    mywildfly_1 | 18:43:39,714 INFO  [org.jboss.resteasy.spi.ResteasyDeployment] (MSC service thread 1-9) Deploying javax.ws.rs.core.Application: class org.javaee7.samples.employees.MyApplication
    mywildfly_1 | 18:43:39,751 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-9) JBAS017534: Registered web context: /employees
    mywildfly_1 | 18:43:39,805 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 28) JBAS018559: Deployed "employees.war" (runtime-name : "employees.war")
    mywildfly_1 | 18:43:39,828 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management
    mywildfly_1 | 18:43:39,828 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990
    mywildfly_1 | 18:43:39,829 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.2.0.Final "Tweek" started in 8393ms - Started 280 of 334 services (92 services are lazy, passive or on-demand)
  4. Найдите IP-адрес хоста как:
    1
    boot2docker ip

    И получить доступ к приложению как:

    1
    curl http://192.168.59.103:8080/employees/resources/employees/

    Чтобы увидеть результат как:

    1
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><collection><employee><id>1</id><name>Penny</name></employee><employee><id>2</id><name>Sheldon</name></employee><employee><id>3</id><name>Amy</name></employee><employee><id>4</id><name>Leonard</name></employee><employee><id>5</id><name>Bernadette</name></employee><employee><id>6</id><name>Raj</name></employee><employee><id>7</id><name>Howard</name></employee><employee><id>8</id><name>Priya</name></employee></collection>

    Или в браузере как:

    techtip77-браузер-выход

  5. Остановите контейнеры как:
    1
    docker-compose stop

    чтобы увидеть результат как:

    1
    2
    Stopping wildflymysqljavaee7_mywildfly_1...
    Stopping wildflymysqljavaee7_mysqldb_1...

Docker Compose Commands

Полный список команд Docker Compose можно увидеть, введя команду docker-compose и отобразить вывод в виде:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
velopment environments using Docker.
 
Usage:
  docker-compose [options] [COMMAND] [ARGS...]
  docker-compose -h|--help
 
Options:
  --verbose                 Show more output
  --version                 Print version and exit
  -f, --file FILE           Specify an alternate compose file (default: docker-compose.yml)
  -p, --project-name NAME   Specify an alternate project name (default: directory name)
 
Commands:
  build     Build or rebuild services
  help      Get help on a command
  kill      Kill containers
  logs      View output from containers
  port      Print the public port for a port binding
  ps        List containers
  pull      Pulls service images
  rm        Remove stopped containers
  run       Run a one-off command
  scale     Set number of containers for a service
  start     Start services
  stop      Stop services
  restart   Restart services
  up        Create and start containers

Последующий блог, скорее всего, будет играть с командой scale .

Справка для каждой команды отображается путем ввода -h после имени команды. Например, справка для команды запуска отображается как:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
docker-compose run -h
Run a one-off command on a service.
 
For example:
 
    $ docker-compose run web python manage.py shell
 
By default, linked services will be started, unless they are already
running. If you do not want to start linked services, use
`docker-compose run --no-deps SERVICE COMMAND [ARGS...]`.
 
Usage: run [options] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
 
Options:
    --allow-insecure-ssl  Allow insecure connections to the docker
                          registry
    -d                    Detached mode: Run container in the background, print
                          new container name.
    --entrypoint CMD      Override the entrypoint of the image.
    -e KEY=VAL            Set an environment variable (can be used multiple times)
    --no-deps             Don't start linked services.
    --rm                  Remove container after run. Ignored in detached mode.
    --service-ports       Run command with the service's ports enabled and mapped
                          to the host.
    -T                    Disable pseudo-tty allocation. By default `docker-compose run`
                          allocates a TTY.

Наслаждайтесь!

Ссылка: Docker планирует организовать контейнеры от нашего партнера JCG Аруна Гупты в блоге Miles to go 2.0… .