Dockerfileに次のRUNコマンドを書きたいです。ただし、Dockerは新しい行を保持していません。
RUN echo "[repo] \
name = YUM Repository \
baseurl = https://example.com/packages/ \
enabled = 1 \
gpgcheck = 0" > /etc/yum.repos.d/Repo.repoxyz
そんなこと知ってる \
は、各行の末尾にある新しい行をエスケープします。しかし、新しい行を保存しながら複数の行を書く方法はありますか?
$'
でコマンドを開始し、'
で終了し、次のように改行に\n\
を使用します。
RUN echo $'[repo] \n\
name = YUM Repository \n\
baseurl = https://example.com/packages/ \n\
enabled = 1 \n\
gpgcheck = 0' > /etc/yum.repos.d/Repo.repoxyz
printf
を使用しました。 「\ n」を使用してすべてのテキストを1行で記述します。
実行中:
RUN printf 'example \ntext \nhere' >> example.txt
挿入物:
example
text
here
example.txtに
次を使用できます。
RUN echo -e "\
[repo] \n\
name = YUM Repository \n\
baseurl = https://example.com/packages/ \n\
enabled = 1 \n\
gpgcheck = 0\
" > /etc/yum.repos.d/Repo.repoxyz
これにより、ファイルの内容を簡単に確認できます。すべての行を\
で終了し、必要に応じて\n
を挿入する必要があることに注意する必要があります。
役立つかもしれません( https://github.com/jen-soft/pydocker )
[Dockerfile.py]
from pydocker import DockerFile # Sudo pip install -U pydocker
d = DockerFile(base_img='debian:8.2', name='jen-soft/custom-debian:8.2')
d.RUN_bash_script('/opt/set_repo.sh', r'''
cat >/etc/apt/sources.list <<EOL
deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main
EOL
apt-get clean && apt-get update
''')
d.EXPOSE = 80
d.WORKDIR = '/opt'
d.CMD = ["python", "--version"]
# d.generate_files()
d.build_img()
# Sudo wget -qO- https://get.docker.com/ | sh
python Dockerfile.py
docker images