我是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实例
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
答案 0 :(得分:1)
如果您想一次设置多个容器,则需要配置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
如果要在某个特定容器中打开终端,则应使用以下命令:
docker exec -it {containerName} /bin/bash
如果它不起作用,则应尝试将可执行终端作为第二个参数,因此最终进入容器的命令将是
docker exec -it {containerName} {pathToExecutableInContainer}
答案 1 :(得分:1)
您的Dockerfile
没有CMD
或ENTRYPOINT
。如果启动容器以交互方式用作目标,则添加
CMD /bin/bash
您无需同时为服务提供image
和build
上下文。如果指定了image
属性,则需要在本地或在docker存储库中预先构建的标记图像。
相反,让泊坞窗根据提供的build
context
新建一个图像。
更新后的docker-compose.yaml
看起来像
version: '3'
services:
s3bucketftp:
container_name: s3bucketftp
privileged: true
tty: true
build:
context: ./
args:
environment: development
使用此撰写文件,您可以构建映像并启动容器(请注意,您已从与撰写文件相同的位置运行了撰写命令)。
还请注意,由于指定了container_name
,因此无法扩展此服务。
docker-compose up -d
-d
将容器作为后台进程运行
并检查运行中的容器
docker-compose ps
容器运行后,可以直接访问该容器,而无需重做任何设置。
docker exec -it s3bucketftp /bin/bash