Если принять во внимание количество статей, встреч, выступлений на разных конференциях, твиты и другие показатели, то похоже, что Докер собирается решить проблему голода в мире. Было бы неплохо, если бы это было, но, видимо, нет. Но это действительно решает одну проблему!
Давайте послушаем это от @solomonstre — создателя проекта Docker!
Короче говоря, Docker упрощает доставку программного обеспечения, позволяя легко создавать и обмениваться изображениями, которые содержат всю среду вашего приложения или операционную систему приложения .
Что это означает под операционной системой приложения?
Вашему приложению обычно требуется определенная версия операционной системы, сервера приложений, JDK, сервера базы данных, может потребоваться настройка файлов конфигурации и аналогично множеству других зависимостей. Приложению может потребоваться привязка к определенным портам и определенному объему памяти. Компоненты и конфигурация, необходимые для запуска приложения, называются операционной системой приложения.
Вы, конечно, можете предоставить скрипт установки, который будет загружать и устанавливать эти компоненты. Docker упрощает этот процесс, позволяя создать образ, содержащий ваше приложение и инфраструктуру вместе, управляемые как один компонент. Эти образы затем используются для создания контейнеров Docker, которые работают на платформе виртуализации контейнеров , предоставленной Docker.
Каковы основные компоненты Docker?
Докер состоит из двух основных компонентов:
- Docker: платформа виртуализации контейнера с открытым исходным кодом
- Docker Hub : платформа SaaS для обмена и управления образами Docker
Docker использует Linux Containers для обеспечения изоляции, изолированности, воспроизводимости, ограничения ресурсов, создания снимков и ряда других преимуществ. Прочитайте эту прекрасную статью на InfoQ на Docker Containers для более подробной информации.
Изображения являются «компонентом сборки» Docker и доступным только для чтения шаблоном операционной системы приложения. Контейнеры представляют собой представление во время выполнения и создаются из изображений. Они являются «компонентом запуска» Docker. Контейнеры можно запускать, запускать, останавливать, перемещать и удалять. Изображения хранятся в реестре, «компоненте распространения» Docker.
Докер в свою очередь содержит два компонента:
- Демон работает на хост-машине и выполняет тяжелую работу по сборке, запуску и распределению контейнеров Docker.
- Клиент — это двоичный файл Docker, который принимает команды от пользователя и обменивается данными с демоном
Как они работают вместе?
Клиент связывается с Daemon либо на одном хосте, либо на другом хосте. Он просит Daemon извлечь изображение из хранилища, используя команду pull . Затем Daemon загружает образ из Docker Hub или любого другого настроенного реестра. Несколько изображений можно загрузить из реестра и установить на хосте Daemon.
Затем клиент может запустить контейнер с помощью команды запуска . Полный список клиентских команд можно посмотреть здесь .
Клиент связывается с Daemon с помощью сокетов или REST API.
Поскольку Docker использует функции ядра Linux, означает ли это, что я могу использовать его только на компьютерах под управлением Linux?
Демон и клиент Docker для разных операционных систем можно установить по адресу docs.docker.com/installation/ . Как видите, его можно установить на самых разных платформах, включая Mac и Windows.
Для машин, отличных от Linux, должна быть установлена легкая виртуальная машина, и в ней установлен Daemon. Затем на компьютере устанавливается собственный клиент, который взаимодействует с демоном. Вот журнал загрузки демона Docker на Mac:
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
28
|
bash unset DYLD_LIBRARY_PATH ; unset LD_LIBRARY_PATH mkdir -p ~/.boot2docker if [ ! -f ~/.boot2docker/boot2docker.iso ]; then cp /usr/local/share/boot2docker/boot2docker.iso ~/.boot2docker/ ; fi /usr/local/bin/boot2docker init /usr/local/bin/boot2docker up && export DOCKER_HOST=tcp: //$(/usr/local/bin/boot2docker ip 2>/dev/null):2375 docker version ~> bash ~> unset DYLD_LIBRARY_PATH ; unset LD_LIBRARY_PATH ~> mkdir -p ~/.boot2docker ~> if [ ! -f ~/.boot2docker/boot2docker.iso ]; then cp /usr/local/share/boot2docker/boot2docker.iso ~/.boot2docker/ ; fi ~> /usr/local/bin/boot2docker init 2014 / 07 / 16 09 : 57 : 13 Virtual machine boot2docker-vm already exists ~> /usr/local/bin/boot2docker up && export DOCKER_HOST=tcp: //$(/usr/local/bin/boot2docker ip 2>/dev/null):2375 2014 / 07 / 16 09 : 57 : 13 Waiting for VM to be started... ....... 2014 / 07 / 16 09 : 57 : 35 Started. 2014 / 07 / 16 09 : 57 : 35 To connect the Docker client to the Docker daemon, please set: 2014 / 07 / 16 09 : 57 : 35 export DOCKER_HOST=tcp: //192.168.59.103:2375 ~> docker version Client version: 1.1 . 1 Client API version: 1.13 Go version (client): go1. 2.1 Git commit (client): bd609d2 Server version: 1.1 . 1 Server API version: 1.13 Go version (server): go1. 2.1 Git commit (server): bd609d2 |
Например, Docker Daemon и Client могут быть установлены на Mac, следуя инструкциям на docs.docker.com/installation/mac .
VM может быть остановлена из CLI как:
1
|
boot2docker stop |
И затем перезапустил снова как:
1
|
boot2docker boot |
И вошли как:
1
|
boot2docker ssh |
Полный список команд boot2docker доступен в справке:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
~> boot2docker help Usage: boot2docker [] [] boot2docker management utility. Commands: init Create a new boot2docker VM. up|start|boot Start VM from any states. ssh [ssh-command] Login to VM via SSH. save|suspend Suspend VM and save state to disk. down|stop|halt Gracefully shutdown the VM. restart Gracefully reboot the VM. poweroff Forcefully power off the VM (might corrupt disk image). reset Forcefully power cycle the VM (might corrupt disk image). delete|destroy Delete boot2docker VM and its disk image. config|cfg Show selected profile file settings. info Display detailed information of VM. ip Display the IP address of the VM's Host-only network. status Display current state of VM. download Download boot2docker ISO image. version Display version information. |
Хватит говорить, покажи мне пример?
Некоторые из проектов JBoss доступны в виде образов Docker на сайте www.jboss.org/docker и могут быть установлены с помощью команд, описанных на этой странице. Например, образ WildFly Docker может быть установлен как:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
~> docker pull jboss/wildfly Pulling repository jboss/wildfly 2f170f17c904: Download complete 511136ea3c5a: Download complete c69cab00d6ef: Download complete 88b42ffd1f7c: Download complete fdbe853b54e1: Download complete bc93200c3ba0: Download complete 0daf76299550: Download complete 3a7e1274035d: Download complete e6e970a0db40: Download complete 1e34f7a18753: Download complete b18f179f7be7: Download complete e8833789f581: Download complete 159f5580610a: Download complete 3111b437076c: Download complete |
Изображение можно проверить с помощью команды:
1
2
3
|
~> docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE jboss/wildfly latest 2f170f17c904 8 hours ago 1.048 GB |
Как только изображение загружено, контейнер может быть запущен как:
1
|
docker run jboss/wildfly |
По умолчанию контейнеры Docker не предоставляют интерактивную оболочку и ввод из STDIN. Поэтому, если контейнер WildFly Docker запускается с помощью приведенной выше команды, он не может быть завершен с помощью Ctrl + C. Указание параметра -i
сделает его интерактивным, а параметр -t
выделит псевдо-TTY.
Кроме того, мы также хотели бы сделать порт 8080 доступным вне контейнера, то есть на нашем локальном хосте. Этого можно достичь, указав -p 80:8080
где 80
— порт хоста, а 8080
— порт контейнера.
Итак, мы запустим контейнер как:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
docker run -i -t -p 80 : 8080 jboss/wildfly ========================================================================= JBoss Bootstrap Environment JBOSS_HOME: /opt/wildfly JAVA: java JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack= true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless= true ========================================================================= 22 : 08 : 29 , 943 INFO [org.jboss.modules] (main) JBoss Modules version 1.3 . 3 .Final 22 : 08 : 30 , 200 INFO [org.jboss.msc] (main) JBoss MSC version 1.2 . 2 .Final 22 : 08 : 30 , 297 INFO [org.jboss.as] (MSC service thread 1 - 6 ) JBAS015899: WildFly 8.1 . 0 .Final "Kenny" starting 22 : 08 : 31 , 935 INFO [org.jboss.as.server] (Controller Boot Thread) JBAS015888: Creating http management service using socket-binding (management-http) 22 : 08 : 31 , 961 INFO [org.xnio] (MSC service thread 1 - 7 ) XNIO version 3.2 . 2 .Final 22 : 08 : 31 , 974 INFO [org.xnio.nio] (MSC service thread 1 - 7 ) XNIO NIO Implementation Version 3.2 . 2 .Final 22 : 08 : 32 , 057 INFO [org.wildfly.extension.io] (ServerService Thread Pool -- 31 ) WFLYIO001: Worker 'default' has auto-configured to 16 core threads with 128 task threads based on your 8 available processors 22 : 08 : 32 , 108 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 32 ) JBAS010280: Activating Infinispan subsystem. 22 : 08 : 32 , 110 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 40 ) JBAS011800: Activating Naming Subsystem 22 : 08 : 32 , 133 INFO [org.jboss.as.security] (ServerService Thread Pool -- 45 ) JBAS013171: Activating Security Subsystem 22 : 08 : 32 , 178 INFO [org.jboss.as.jsf] (ServerService Thread Pool -- 38 ) JBAS012615: Activated the following JSF Implementations: [main] 22 : 08 : 32 , 206 WARN [org.jboss.as.txn] (ServerService Thread Pool -- 46 ) JBAS010153: Node identifier property is set to the default value. Please make sure it is unique. 22 : 08 : 32 , 348 INFO [org.jboss.as.security] (MSC service thread 1 - 3 ) JBAS013170: Current PicketBox version= 4.0 . 21 .Beta1 22 : 08 : 32 , 397 INFO [org.jboss.as.webservices] (ServerService Thread Pool -- 48 ) JBAS015537: Activating WebServices Extension 22 : 08 : 32 , 442 INFO [org.jboss.as.connector.logging] (MSC service thread 1 - 13 ) JBAS010408: Starting JCA Subsystem (IronJacamar 1.1 . 5 .Final) 22 : 08 : 32 , 512 INFO [org.wildfly.extension.undertow] (MSC service thread 1 - 9 ) JBAS017502: Undertow 1.0 . 15 .Final starting 22 : 08 : 32 , 512 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 47 ) JBAS017502: Undertow 1.0 . 15 .Final starting 22 : 08 : 32 , 570 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 27 ) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3 ) 22 : 08 : 32 , 660 INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1 - 10 ) JBAS010417: Started Driver service with driver-name = h2 22 : 08 : 32 , 736 INFO [org.jboss.remoting] (MSC service thread 1 - 7 ) JBoss Remoting version 4.0 . 3 .Final 22 : 08 : 32 , 836 INFO [org.jboss.as.naming] (MSC service thread 1 - 15 ) JBAS011802: Starting Naming Service 22 : 08 : 32 , 839 INFO [org.jboss.as.mail.extension] (MSC service thread 1 - 15 ) JBAS015400: Bound mail session 22 : 08 : 33 , 406 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 47 ) JBAS017527: Creating file handler for path /opt/wildfly/welcome-content 22 : 08 : 33 , 540 INFO [org.wildfly.extension.undertow] (MSC service thread 1 - 13 ) JBAS017525: Started server default -server. 22 : 08 : 33 , 603 INFO [org.wildfly.extension.undertow] (MSC service thread 1 - 8 ) JBAS017531: Host default -host starting 22 : 08 : 34 , 072 INFO [org.wildfly.extension.undertow] (MSC service thread 1 - 13 ) JBAS017519: Undertow HTTP listener default listening on / 0.0 . 0.0 : 8080 22 : 08 : 34 , 599 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1 - 11 ) JBAS015012: Started FileSystemDeploymentService for directory /opt/wildfly/standalone/deployments 22 : 08 : 34 , 619 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1 - 9 ) JBAS010400: Bound data 22 : 08 : 34 , 781 INFO [org.jboss.ws.common.management] (MSC service thread 1 - 13 ) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.2 . 4 .Final 22 : 08 : 34 , 843 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http: //0.0.0.0:9990/management 22 : 08 : 34 , 844 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http: //0.0.0.0:9990 22 : 08 : 34 , 845 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.1 . 0 .Final "Kenny" started in 5259ms - Started 184 of 233 services ( 81 services are lazy, passive or on-demand) |
IP-адрес контейнера можно найти как:
1
2
3
|
~> boot2docker ip The VM's Host only interface IP address is: 192.168 . 59.103 |
Запущенный контейнер можно проверить с помощью команды:
1
2
3
|
~> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b2f8001164b0 jboss/wildfly:latest /opt/wildfly/bin/sta 46 minutes ago Up 12 minutes 8080 /tcp, 9990 /tcp sharp_pare |
Теперь к серверу WildFly можно получить доступ на локальном компьютере по адресу http://192.168.59.103, и он выглядит примерно так:
Наконец, контейнер может быть остановлен нажатием Ctrl + C или командой:
1
2
|
~> docker stop b2f8001164b0 b2f8001164b0 |
Идентификатор контейнера, полученный из «docker ps», передается в команду здесь.
Более подробные инструкции по использованию этого образа, такие как загрузка в доменном режиме, развертывание приложений и т. Д., Можно найти по адресу github.com/jboss/dockerfiles/blob/master/wildfly/README.md .
Что еще вы хотели бы видеть на изображении WildFly Docker? Отправьте вопрос по адресу github.com/jboss/dockerfiles/issues .
Другие изображения, которые доступны на jboss.org/docker :
Ссылка: | Начало работы с Docker от нашего партнера по JCG Аруна Гупта в блоге Miles to go 2.0… . |