Как создать файл docker -compose.yml - PullRequest
1 голос
/ 02 апреля 2020

Я новичок в docker, поэтому у меня нет хороших знаний, но я хочу узнать больше. Поэтому я надеюсь, что это сообщество поможет мне. Теперь у меня есть Dockerfile.

# getting base image debian
 FROM debian
 RUN apt-get update && apt-get install -y sudo
 RUN apt-get update && apt-get install -y vsftpd
 RUN apt-get update && apt-get install -y ftp
 RUN apt-get install nano
 RUN sudo sed -i.$(date +%F) '/^#/d;/^$/d' /etc/vsftpd.conf

# Add configuration in /etc/vsftpd.conf
 RUN echo "write_enable=YES" >> /etc/vsftpd.conf
 RUN echo "chroot_local_user=YES" >> /etc/vsftpd.conf
 RUN echo "user_sub_token=\$USER" >> /etc/vsftpd.conf
 RUN echo "local_root=/home/\$USER/ftp" >> /etc/vsftpd.conf
 RUN echo "userlist_enable=YES" >> /etc/vsftpd.conf
 RUN echo "pasv_min_port=40000" >> /etc/vsftpd.conf
 RUN echo "pasv_max_port=50000" >> /etc/vsftpd.conf
 RUN echo "userlist_file=/etc/vsftpd.userlist" >> /etc/vsftpd.conf
 RUN echo "userlist_deny=NO" >> /etc/vsftpd.conf

# create new group "zanui"  
RUN groupadd zanui
#user "lal" with group lal
RUN useradd -G zanui --system --create-home --no-log-init lal
RUN echo "lal:123456" | chpasswd

RUN useradd -G zanui --system --create-home --no-log-init mausam
RUN echo "mausam:123456" | chpasswd

RUN echo "lal" | sudo tee -a /etc/vsftpd.userlist
RUN echo "mausam" | sudo tee -a /etc/vsftpd.userlist

RUN mkdir /home/lal/ftp
RUN chown nobody:nogroup /home/lal/ftp
RUN chmod a-w /home/lal/ftp

RUN mkdir /home/lal/ftp/files
RUN sudo chown lal:lal /home/lal/ftp/files

RUN mkdir /home/mausam/ftp
RUN chown nobody:nogroup /home/mausam/ftp
RUN chmod a-w /home/mausam/ftp

RUN mkdir /home/mausam/ftp/files
RUN sudo chown mausam:mausam /home/mausam/ftp/files

RUN apt-get update && apt-get install -y build-essential git libfuse-dev libcurl4-openssl-dev libxml2-dev mime-support automake libtool pkg-config libssl-dev
RUN git clone https://github.com/s3fs-fuse/s3fs-fuse
WORKDIR /s3fs-fuse
RUN ./autogen.sh && ./configure --prefix=/usr --with-openssl && make && make install
WORKDIR /../
ADD /conf/passwd-s3fs /etc/passwd-s3fs
RUN chmod 600 /etc/passwd-s3fs

# RUN s3fs bucket-name /home/lal/ftp/files

Сначала я строю образ из Dockerfile с помощью команды:

docker build -t mydebiantest1:1.0 .

Затем я запускаю контейнер, используя это изображение, используя следующую команду:

docker run --privileged -it mydebiantest1:1.0 bash

Тогда я буду внутри Debian Linux bash instance

root@c875e352e4e7:/# 

Итак, теперь я хочу, чтобы как эти шаги выполнялись при запуске команды:

docker-compose up

Каким-то образом мне удалось создать файл docker -compose.yml, который, кажется, не работает, как я хочу.

version: '3'
services:
  # The Application
  s3bucketftp:
    container_name: s3bucketftp
    image: s3bucketftp:1.0
    build:
      context: ./
      dockerfile: Dockerfile
      args:
        environment: development

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Ваш Dockerfile не имеет ни CMD, ни ENTRYPOINT. Если вы запускаете контейнер для интерактивного использования в качестве цели, то добавьте

CMD /bin/bash

. Вам не нужно предоставлять контексты image и build для вашей службы. Предварительно созданное изображение с тегами необходимо либо локально, либо в репозитории docker, если указан атрибут image.

Вместо этого позвольте docker - build новому изображению на основе предоставленного context.

Обновленный docker-compose.yaml будет выглядеть так:

version: '3'
services:
  s3bucketftp:
    container_name: s3bucketftp
    privileged: true
    tty: true
    build:
      context: ./
      args:
        environment: development

С помощью этого файла compose вы можете создать образ и запустить контейнер (обратите внимание, что вы выполнили команды compose из того же места, что и ваш файл compose).

Также обратите внимание, что этот сервис не может быть масштабирован как container_name указано.

docker-compose up -d

-d - запуск контейнера в качестве фонового процесса

и проверка работающего контейнера,

docker-compose ps

После запуска контейнера контейнер можно получить прямой доступ без необходимости повторного выполнения каких-либо настроек.

docker exec -it s3bucketftp /bin/bash
1 голос
/ 02 апреля 2020

Если вы хотите настроить много контейнеров за один раз, вам нужно настроить docker -compose файл и все. Вам не нужно собирать контейнер из изображения вручную. Он docker -compose выполняет при первой сборке и запуске контейнеров.

Создайте пустую папку с именем 'docker', а внутри каталога docker 'создайте каталог с именем' s3 ', поместите там ваш файл docker. Переместитесь туда и сюда в терминале типа:

touch docker-compose.yml
vim docker-compose.yml

Поместите туда это содержимое

version: '2'

services:
  # The Application
  s3bucketftp:
    container_name: s3bucketftp
    build:
      context: ./
      dockerfile: ./s3/Dockerfile
      args:
        environment: development

Если вы хотите открыть терминал в каком-либо конкретном c контейнере, вам следует использовать команду:

docker exec -it {containerName} /bin/bash

Если это не сработает, попробуйте указать в качестве второго аргумента исполняемый терминал, поэтому в конце ваша команда для go внутри контейнера будет

docker exec -it {containerName} {pathToExecutableInContainer}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...