Je suis nouveau au docker. J'ai constaté que nous pouvons définir des variables d'environnement à l'aide de l'instruction ENV dans le fichier Docker. Mais comment définir des alias bash pour de longues commandes dans Dockerfile?
Fondamentalement, comme vous le faites toujours, en l'ajoutant à l'utilisateur .bashrc
:
FROM foo
RUN echo 'alias hi="echo hello"' >> ~/.bashrc
Comme d'habitude, cela ne fonctionnera que pour les shells interactifs:
docker build -t test .
docker run -it --rm --entrypoint /bin/bash test hi
/bin/bash: hi: No such file or directory
docker run -it --rm test bash
$ hi
hello
Pour les shells non interactifs, vous devez créer un petit script et le placer sur votre chemin, c'est-à-dire:
RUN echo -e '#!/bin/bash\necho hello' > /usr/bin/hi && \
chmod +x /usr/bin/hi
Si votre alias utilise des paramètres (ie. hi Jim
-> hello Jim
), Ajoutez simplement "$@"
:
RUN echo -e '#!/bin/bash\necho hello "$@"' > /usr/bin/hi && \
chmod +x /usr/bin/hi
Pour créer un alias d'une commande existante, vous pouvez également utiliser ln -s
:
ln -s $(which <existing_command>) /usr/bin/<my_command>
Si vous voulez utiliser des alias uniquement dans Dockerfile, mais pas à l'intérieur d'un conteneur, le plus court chemin est ENV
déclaration:
ENV update='apt-get update -qq'
ENV install='apt-get install -qq'
RUN $update && $install apt-utils \
curl \
gnupg \
python3.6
Et pour une utilisation en conteneur comme décrit précédemment:
RUN printf '#!/bin/bash \n $(which apt-get) install -qq $@' > /usr/bin/install
RUN chmod +x /usr/bin/install
La plupart du temps, j'utilise des alias juste au stade de la construction et n'entre pas dans les conteneurs. Le premier exemple est donc plus rapide, plus clair et plus simple pour une utilisation quotidienne.
Je viens d'ajouter ceci à mon app.dockerfile
# setup aliases
ADD ./bashrc_alias.sh /usr/sbin/bashrc_alias.sh
ADD ./initbash_profile.sh /usr/sbin/initbash_profile
RUN chmod +x /usr/sbin/initbash_profile
RUN /bin/bash -C "/usr/sbin/initbash_profile"
et à l'intérieur du initbash_profile.sh
qui ajoute simplement mes alias personnalisés et ne nécessite pas de créer le fichier .bashrc.
# add the bash aliases
cat /usr/sbin/bashrc_alias.sh >> ~/.bashrc
travaillé un régal!
Une autre option consiste simplement à utiliser la "commande docker exec -it" de l'extérieur du conteneur et à utiliser votre propre fichier .bashrc ou .bash_profile (celui que vous préférez).
par exemple. docker exec -it docker_app_1 bash
vi ~/.bash_aliases
source ~/.bash_aliases
Vous pouvez utiliser entrypoint, mais cela ne fonctionnera pas pour un alias dans votre fichier Docker:
ADD dev/entrypoint.sh /opt/entrypoint.sh
ENTRYPOINT ["/opt/entrypoint.sh"]
Votre entrypoint.sh
#!/bin/bash
set -e
function dev_run()
{
}
export -f dev_run
exec "$@"
(Copier/coller rapide, désolé)