Как сохранить переменные среды в ash, оболочке Almquist?

tar создает архивы; сжатие - это отдельная функция. Однако tar сам по себе может уменьшить использование пространства при использовании большого количества маленьких файлов, размер которых меньше размера кластера файловой системы. Если файловая система использует кластеры размером 1 кб, то даже файл, содержащий один байт, будет занимать 1 кб (плюс inode). Архив tar не имеет таких накладных расходов.

BTW, ISO-файл на самом деле не является "файлом для хранения файлов" - это образ целой файловой системы (изначально разработанной для использования на компакт-дисках), и поэтому его структура значительно сложнее.

1
28.02.2019, 01:49
1 ответ

Когда вы запускаете контейнер Docker, вы работаете изолированно от вызывающей среды. Переменные не наследуются напрямую.

Мы можем увидеть «чистую» среду, которую мы можем увидеть, создав полностью минимальный контейнер.

напр. программа go:

package main
import "os"
import "fmt"

func main() {
    for _, e := range os.Environ() {
        fmt.Println(e)
    }
}

Мы можем превратить это в крошечный контейнер:

FROM scratch
ADD tester /
ENTRYPOINT ["/tester"]

И если мы запустим это:

$ docker run tst
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=e598bf727a26
HOME=/root

Это переменные, созданные механизмом Docker во время выполнения .

Таким образом, когда вы run.. /bin/shиспользуете не -оболочку входа в систему, которая просто наследует среду, созданную докером. Поскольку это не оболочка входа в систему, /etc/profileне запускается. /bin/shсам создаст некоторые переменные по умолчанию, если они не существуют.

$ docker run -it alpine                              
/ # env
HOSTNAME=51667ed06110
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/

Есть несколько способов сделать это. В голове сразу две идеи:

Вы можете передавать переменные среды в командной строке docker с помощью -e.

$ docker run -e myvariable=testing -it alpine /bin/sh
/ # echo $myvariable
testing

Вы можете создать собственный образ на основе alpine с помощью команд ENV:

$ cat Dockerfile 
FROM alpine
ENV myothervar=anothertest

$ docker build -t myalpine.
...

$ docker run -it myalpine
/ # echo $myothervar
anothertest

По сути, вы видите, что среда выполнения docker предоставляет некоторые переменные, /bin/shпредоставляет другие переменные и изолируется от вызывающей среды.

2
27.01.2020, 23:41

Теги

Похожие вопросы