docker - aleksei-khitev/knowledge_base GitHub Wiki
- Основная информация и базовые команды
- Контейнер Docker
- Образ Docker
- Docker Compose
- Swarm Mode
- Monitoring
# Имя образа из docker hub
FROM jboss/base-jdk:11
# переменная среды окружение и значение через пробел
ENV WILDFLY_VERSION 20.0.0.Final
ENV JBOSS_HOME /opt/jboss/wildfly
# команда, которую нужно выполнить при сборке. Может быть несколько
RUN cd /opt/jboss && curl https://download.jboss.org/wildfly/$WILDFLY_VERSION/wildfly-$WILDFLY_VERSION.tar.gz | tar zx && mv /opt/jboss/wildfly-$WILDFLY_VERSION /opt/jboss/wildfly
# Какие порты открываем наружу?
EXPOSE 8080
EXPOSE 8787
# Копирование чего либо в образ.
# Файлы должны быть в том же каталоге или подкаталоге, что и конфиг. По абсолютному пути куда то еще не попасть - ошибка
COPY log4j.properties /tmp/some_app_conf/log4j.properties
ENV APP_CONF=/tmp/some_app_conf
version: '2'
services:
# имена сервисов могут быть произвольными
nginx:
# Имя образа из docker hub
image: nginx
# Подключаемые файлы и папки. Можно использовать переменные среды. Имена могут отличаться.
volumes:
- $PROJECT_CONF_ROOT/some_project-conf/local/docker/nginx/nginx_snapshot.conf:/etc/nginx/nginx.conf:ro
# Команда, которая должна быть выполнена по завершении загрузки
command: nginx -g "daemon off;"
container_name: proxy
# Без этого параметра, контейнер не будет доступен по localhost другим контейнерам. К примеру, http://localhost:80
network_mode: host
# Открытые порты. Если не путаю, слева наружный порт, справа- внутренний.
ports:
- "80:80"
bg:
image: openjdk:8-jre-slim
network_mode: host
# Дождаться загрузки другого сервиса
depends_on:
- nginx
# Задание переменной среды.
environment:
- APP_CONF=/tmp/some-another-conf/local
volumes:
# ...
working_dir: # ...
command: # ...
container_name: bg
ports:
- "59669:59669"
workers:
image: openjdk:8-jre-slim
network_mode: host
depends_on:
- nginx
- bg
environment:
# ...
volumes:
# ...
command: # ...
container_name: workers
ports:
- "5005:5005"
gat:
# Так определяется использование образа Docker. Где образ и какой файл
build:
context: .
dockerfile: Dockerfile-j11-wildfly15.0.0.Final
network_mode: host
depends_on:
- nginx
- bg
- workers
environment:
# ...
volumes:
# ...
command: /opt/wildfly/bin/standalone.sh --debug 8787 -b 0.0.0.0 -bmanagement 0.0.0.0
container_name: gat
В Windows network_mode: host
не поддерживается.
Для того, чтобы контейнеры видели друг друга, нужно создать общую сеть.
version: '3.8'
services:
nginx:
...
networks:
- main_network
...
networks:
main_network:
Чтобы хост мог обращаться к контейнерам по имени, нужно добавить их в hosts
Для Windows, он лежит в C:\Windows\System32\drivers\etc
. К примеру
127.0.0.1 it-rganizer-backend
Чтобы контейнер использовал DNS docker-а, а не hosts хоста, нужно использовать резолвер 127.0.0.11
К примеру, в nginx это можно сделать так:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
...
location ~ \.jar$ {
resolver 127.0.0.11;
proxy_pass http://it-organizer-backend:8080;
}
Если использовать EXPOSE
, то порт будет открыт для других контейнеров
Если в docker-config использовать ports
, то порт будет открыт и для хоста
docker ps -a
sudo docker-compose build --no-cache
sudo docker-compose up -d
sudo docker-compose -f docker-compose-snapshot.yml up -d --force-recreate --build
sudo docker-compose down
sudo docker exec -t -i container_name /bin/bash
sudo docker logs gat
Просмотр логов в режиме follow (как tail -f)
sudo docker logs --follow gat