Создание docker контейнера в Unix/Linux
Создание докер-контейнеров не особо сложное занятие, но необходимо понимать что и как выполняется. Я до сегодняшнего момента не использовал докер порядка года или даже полтора. За это время, много изменилось, доработалось и улучшилось.
Создание docker контейнера в Unix/Linux
Создание docker контейнеров можно отнести к нескольким группам:
- Создание docker контейнеров из готовых ( уже созданных кем либо).
- Создание docker контейнера своими средствами.
И я расскажу о том как создавать их или брать готовые решения.
Создание docker контейнеров из готовых ( уже созданных кем либо).
Имеется несколько сайтов где можно взять готовое решение и использовать их — github, dockerhub, как примеры.
Имеется дерево:
captain@Macbook$ ~/My works/VM/magento2: tree
.
|-- DATA
| |-- html
| | |-- index.html
| | `-- index.php
| |-- mariadb
| |-- nginx
| | `-- conf.d
| `-- php-fpm
|-- docker-compose.yml
|-- docs.txt
|-- mariadb
| |-- Dockerfile
| `-- docker-entrypoint.sh
|-- nginx
| `-- Dockerfile
`-- php-fpm
|-- Dockerfile
`-- opcache.ini
9 directories, 9 files
captain@Macbook $ ~/My works/VM/magento2 :
Начну рассказывать все по- прядку:
Директория DATA — служит для монтирования данных (Файлов и папок которые необходимы). Папка html, служит для моего будущего сайта. У меня там лежат несколько файлов: index.php и index.html. Они нужны для проверки работы сервисов которые я создам. Содержание их может быть любым, но у меня они имеют следующий контекст.
$ vim DATA/html/index.php <?php phpinfo (); ?>
И:
$ vim DATA/html/index.html <H1> HELLO MAN </H1>
В DATA/mariadb и DATA/php-fpm можно положить my.cnf и php-fpm.conf соответственно. В DATA/nginx/conf.d, лежит конфигурационный файл для моего сайта, его можно взять:
$ cat DATA/nginx/conf.d/site.conf
server {
index index.php index.html;
server_name docker_machine.local;
error_log /var/log/nginx/error-docker_machine.local.log;
access_log /var/log/nginx/access-docker_machine.local.log;
root /var/www/html/;
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_pass 172.10.0.2:9000;
fastcgi_pass lemp_php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Нужно заменить доменное имя — docker_machine.local на свое.
О docker-compose.yml, я расскажу в следующей моей статье. Но скажу одно — он необходим для запуска контейнеров в виде стека ( как у меня LEMP).
DockerFile с nginx.
Пример с Dockerfile:
$ vim nginx/Dockerfile
Его содержание:
# # Nginx Dockerfile # # https://github.com/dockerfile/nginx # # Pull base image. FROM dockerfile/ubuntu # Install Nginx. RUN \ add-apt-repository -y ppa:nginx/stable && \ apt-get update && \ apt-get install -y nginx && \ rm -rf /var/lib/apt/lists/* && \ echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \ chown -R www-data:www-data /var/lib/nginx # Define mountable directories. VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"] # Define working directory. WORKDIR /etc/nginx # Define default command. CMD ["nginx"] # Expose ports. EXPOSE 80 EXPOSE 443
Собираем его:
$ cd nginx && sudo docker build -t nginx:latest .
Для запуска, используйте:
# docker run -d -p 80:80 nginx:latest
Или (Приложить постоянные / общие каталоги):
# docker run -d -p 80:80 -v <sites-enabled-dir>:/etc/nginx/conf.d -v <certs-dir>:/etc/nginx/certs -v <log-dir>:/var/log/nginx -v <html-dir>:/var/www/html dockerfile/nginx
Готово!
DockerFile с mysql.
Пример с Dockerfile:
$ vim mariadb/Dockerfile
Содержание:
# vim:set ft=dockerfile:
FROM debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mysql && useradd -r -g mysql mysql
# add gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true \
&& apt-get purge -y --auto-remove ca-certificates wget
RUN mkdir /docker-entrypoint-initdb.d
# install "pwgen" for randomizing passwords
# install "apt-transport-https" for Percona's repo (switched to https-only)
RUN apt-get update && apt-get install -y --no-install-recommends \
apt-transport-https ca-certificates \
pwgen \
&& rm -rf /var/lib/apt/lists/*
ENV GPG_KEYS \
# Key fingerprint = 1993 69E5 404B D5FC 7D2F E43B CBCB 082A 1BB9 43DB
# MariaDB Package Signing Key <package-signing-key@mariadb.org>
199369E5404BD5FC7D2FE43BCBCB082A1BB943DB \
# pub 1024D/CD2EFD2A 2009-12-15
# Key fingerprint = 430B DF5C 56E7 C94E 848E E60C 1C4C BDCD CD2E FD2A
# uid Percona MySQL Development Team <mysql-dev@percona.com>
# sub 2048g/2D607DAF 2009-12-15
430BDF5C56E7C94E848EE60C1C4CBDCDCD2EFD2A \
# pub 4096R/8507EFA5 2016-06-30
# Key fingerprint = 4D1B B29D 63D9 8E42 2B21 13B1 9334 A25F 8507 EFA5
# uid Percona MySQL Development Team (Packaging key) <mysql-dev@percona.com>
# sub 4096R/4CAC6D72 2016-06-30
4D1BB29D63D98E422B2113B19334A25F8507EFA5
RUN set -ex; \
export GNUPGHOME="$(mktemp -d)"; \
for key in $GPG_KEYS; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done; \
gpg --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mariadb.gpg; \
rm -r "$GNUPGHOME"; \
apt-key list
RUN echo "deb https://repo.percona.com/apt jessie main" > /etc/apt/sources.list.d/percona.list \
&& { \
echo 'Package: *'; \
echo 'Pin: release o=Percona Development Team'; \
echo 'Pin-Priority: 998'; \
} > /etc/apt/preferences.d/percona
ENV MARIADB_MAJOR 10.1
ENV MARIADB_VERSION 10.1.21+maria-1~jessie
RUN echo "deb http://ftp.osuosl.org/pub/mariadb/repo/$MARIADB_MAJOR/debian jessie main" > /etc/apt/sources.list.d/mariadb.list \
&& { \
echo 'Package: *'; \
echo 'Pin: release o=MariaDB'; \
echo 'Pin-Priority: 999'; \
} > /etc/apt/preferences.d/mariadb
# add repository pinning to make sure dependencies from this MariaDB repo are preferred over Debian dependencies
# libmariadbclient18 : Depends: libmysqlclient18 (= 5.5.42+maria-1~wheezy) but 5.5.43-0+deb7u1 is to be installed
# the "/var/lib/mysql" stuff here is because the mysql-server postinst doesn't have an explicit way to disable the mysql_install_db codepath besides having a database already "configured" (ie, stuff in /var/lib/mysql/mysql)
# also, we set debconf keys to make APT a little quieter
RUN { \
echo mariadb-server-$MARIADB_MAJOR mysql-server/root_password password 'unused'; \
echo mariadb-server-$MARIADB_MAJOR mysql-server/root_password_again password 'unused'; \
} | debconf-set-selections \
&& apt-get update \
&& apt-get install -y \
mariadb-server=$MARIADB_VERSION \
# percona-xtrabackup is installed at the same time so that `mysql-common` is only installed once from just mariadb repos
percona-xtrabackup \
socat \
&& rm -rf /var/lib/apt/lists/* \
# comment out any "user" entires in the MySQL config ("docker-entrypoint.sh" or "--user" will handle user switching)
&& sed -ri 's/^user\s/#&/' /etc/mysql/my.cnf /etc/mysql/conf.d/* \
# purge and re-create /var/lib/mysql with appropriate ownership
&& rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld \
&& chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \
# ensure that /var/run/mysqld (used for socket and lock files) is writable regardless of the UID our mysqld instance ends up having at runtime
&& chmod 777 /var/run/mysqld
# comment out a few problematic configuration values
# don't reverse lookup hostnames, they are usually another container
RUN sed -Ei 's/^(bind-address|log)/#&/' /etc/mysql/my.cnf \
&& echo 'skip-host-cache\nskip-name-resolve' | awk '{ print } $1 == "[mysqld]" && c == 0 { c = 1; system("cat") }' /etc/mysql/my.cnf > /tmp/my.cnf \
&& mv /tmp/my.cnf /etc/mysql/my.cnf
VOLUME /var/lib/mysql
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
RUN ln -s usr/local/bin/docker-entrypoint.sh / # backwards compat
RUN chmod +x docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 3306
CMD ["mysqld"]
И для запуска mariadb нужен еще 1 файл. Открываем( создаем) его:
# vim mariadb/docker-entrypoint.sh
И вставляем в него:
#!/bin/bash
set -eo pipefail
shopt -s nullglob
# if command starts with an option, prepend mysqld
if [ "${1:0:1}" = '-' ]; then
set -- mysqld "$@"
fi
# skip setup if they want an option that stops mysqld
wantHelp=
for arg; do
case "$arg" in
-'?'|--help|--print-defaults|-V|--version)
wantHelp=1
break
;;
esac
done
# usage: file_env VAR [DEFAULT]
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
file_env() {
local var="$1"
local fileVar="${var}_FILE"
local def="${2:-}"
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
exit 1
fi
local val="$def"
if [ "${!var:-}" ]; then
val="${!var}"
elif [ "${!fileVar:-}" ]; then
val="$(< "${!fileVar}")"
fi
export "$var"="$val"
unset "$fileVar"
}
_check_config() {
toRun=( "$@" --verbose --help --log-bin-index="$(mktemp -u)" )
if ! errors="$("${toRun[@]}" 2>&1 >/dev/null)"; then
cat >&2 <<-EOM
ERROR: mysqld failed while attempting to check config
command was: "${toRun[*]}"
$errors
EOM
exit 1
fi
}
_datadir() {
"$@" --verbose --help --log-bin-index="$(mktemp -u)" 2>/dev/null | awk '$1 == "datadir" { print $2; exit }'
}
# allow the container to be started with `--user`
if [ "$1" = 'mysqld' -a -z "$wantHelp" -a "$(id -u)" = '0' ]; then
_check_config "$@"
DATADIR="$(_datadir "$@")"
mkdir -p "$DATADIR"
chown -R mysql:mysql "$DATADIR"
exec gosu mysql "$BASH_SOURCE" "$@"
fi
if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then
# still need to check config, container may have started with --user
_check_config "$@"
# Get config
DATADIR="$(_datadir "$@")"
if [ ! -d "$DATADIR/mysql" ]; then
file_env 'MYSQL_ROOT_PASSWORD'
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
echo >&2 'error: database is uninitialized and password option is not specified '
echo >&2 ' You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
exit 1
fi
mkdir -p "$DATADIR"
echo 'Initializing database'
mysql_install_db --datadir="$DATADIR" --rpm
echo 'Database initialized'
"$@" --skip-networking --socket=/var/run/mysqld/mysqld.sock &
pid="$!"
mysql=( mysql --protocol=socket -uroot -hlocalhost --socket=/var/run/mysqld/mysqld.sock )
for i in {30..0}; do
if echo 'SELECT 1' | "${mysql[@]}" &> /dev/null; then
break
fi
echo 'MySQL init process in progress...'
sleep 1
done
if [ "$i" = 0 ]; then
echo >&2 'MySQL init process failed.'
exit 1
fi
if [ -z "$MYSQL_INITDB_SKIP_TZINFO" ]; then
# sed is for https://bugs.mysql.com/bug.php?id=20545
mysql_tzinfo_to_sql /usr/share/zoneinfo | sed 's/Local time zone must be set--see zic manual page/FCTY/' | "${mysql[@]}" mysql
fi
if [ ! -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
export MYSQL_ROOT_PASSWORD="$(pwgen -1 32)"
echo "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
fi
"${mysql[@]}" <<-EOSQL
-- What's done in this file shouldn't be replicated
-- or products like mysql-fabric won't work
SET @@SESSION.SQL_LOG_BIN=0;
DELETE FROM mysql.user ;
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
DROP DATABASE IF EXISTS test ;
FLUSH PRIVILEGES ;
EOSQL
if [ ! -z "$MYSQL_ROOT_PASSWORD" ]; then
mysql+=( -p"${MYSQL_ROOT_PASSWORD}" )
fi
file_env 'MYSQL_DATABASE'
if [ "$MYSQL_DATABASE" ]; then
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" | "${mysql[@]}"
mysql+=( "$MYSQL_DATABASE" )
fi
file_env 'MYSQL_USER'
file_env 'MYSQL_PASSWORD'
if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then
echo "CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;" | "${mysql[@]}"
if [ "$MYSQL_DATABASE" ]; then
echo "GRANT ALL ON \`$MYSQL_DATABASE\`.* TO '$MYSQL_USER'@'%' ;" | "${mysql[@]}"
fi
echo 'FLUSH PRIVILEGES ;' | "${mysql[@]}"
fi
echo
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh) echo "$0: running $f"; . "$f" ;;
*.sql) echo "$0: running $f"; "${mysql[@]}" < "$f"; echo ;;
*.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${mysql[@]}"; echo ;;
*) echo "$0: ignoring $f" ;;
esac
echo
done
if ! kill -s TERM "$pid" || ! wait "$pid"; then
echo >&2 'MySQL init process failed.'
exit 1
fi
echo
echo 'MySQL init process done. Ready for start up.'
echo
fi
fi
exec "$@"Чтобы создать контейнер, выполните:
$ sudo docker build -t mariadb:latest .
И чтобы запустить его, выполняем:
$ cd mariadb && sudo docker run -d -p 3306:3306 mariadb:latest
DockerFile с php-fpm.
$ vim php-fpm/Dockerfile
Пример с Dockerfile:
FROM php:7-fpm
MAINTAINER Mehrdad Dadkhah <mehrdad@dadkhah.me>
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng12-dev \
libpq-dev \
g++ \
libicu-dev \
libxml2-dev \
git \
vim \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng12-dev \
libmagickwand-dev --no-install-recommends \
&& docker-php-ext-configure intl \
&& docker-php-ext-install mbstring \
&& docker-php-ext-install intl \
&& docker-php-ext-install zip \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install pdo_pgsql \
&& docker-php-ext-install soap \
&& docker-php-ext-install -j$(nproc) iconv mcrypt \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install opcache \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& pecl install apcu \
&& docker-php-ext-enable apcu \
&& pecl install xdebug \
&& apt-get purge --auto-remove -y g++ \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
ENV PHPREDIS_VERSION php7
RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \
&& mkdir /tmp/redis \
&& tar -xf /tmp/redis.tar.gz -C /tmp/redis \
&& rm /tmp/redis.tar.gz \
&& ( \
cd /tmp/redis/phpredis-$PHPREDIS_VERSION \
&& phpize \
&& ./configure \
&& make -j$(nproc) \
&& make install \
) \
&& rm -r /tmp/redis \
&& docker-php-ext-enable redis
RUN sed -i -e 's/listen.*/listen = 0.0.0.0:9000/' /usr/local/etc/php-fpm.conf
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN usermod -u 1000 www-data
COPY ./opcache.ini /usr/local/etc/php/conf.d/opcache.ini
CMD ["php-fpm"]
И создаем:
# vim php-fpm/opcache.ini
И прописываем в него:
opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1 #opcache.save_comments=0
Создаем сборку и запускаем:
$ sudo docker build -t php:latest .
и
$ cd php-fpm && sudo docker run -d -p 9000:9000 php:latest
Видим что все работает и они запускаются, но вручную….
Создание docker контейнера своими средствами.
Сейчас рассмотрим еще один пример создания какого-то контейнера, например — я хотел бы взять packer.
Папка со всеми моими докерами будет иметь вид:
$ ll total 704 drwxr-xr-x 10 captain staff 320 Dec 6 2017 jenkins+docker+nginx drwxr-xr-x 4 captain staff 128 Oct 24 13:35 packer
Откроем:
$ vim packer/Dockerfile
Мой Dockerfile выглядит следующим образом:
FROM centos:7
MAINTAINER Vitaliy Natarov "vitaliy.natarov@yahoo.com"
LABEL architecture="amd64" \
OS="CentOS" \
License=GPLv2 \
Description="My test dockerfile" \
Vendor="Natarov Vitaliy" \
Version="0.0.1"
ARG PACKER_VERSION=1.3.1
ENV PATH="$HOME/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/opt/local/bin:/opt/local/sbin:${PATH}"
ENV LANGUAGE=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
RUN yum install -y \
epel-release \
yum-plugin-ovl \
wget \
which \
unzip \
rsync \
openssh \
openssh-clients \
python-pip && \
yum clean all
RUN wget -q https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_linux_amd64.zip && \
unzip -q packer_${PACKER_VERSION}_linux_amd64.zip && \
yes|mv -f packer /usr/local/bin/packer && \
chmod +x /usr/local/bin/packer && \
rm -f packer_${PACKER_VERSION}_linux_amd64.zip
RUN useradd packer
USER packer
ENV USER packer
WORKDIR /home/packer
ENTRYPOINT ["/bin/sh"]
CMD ["-c", "/bin/bash"]
Ну что, билдаем сие чудо:
$ docker build -t packer:1.3.1 -f packer/Dockerfile .
Для того чтобы посмотреть созданный(ые) имеджы, выполните:
$ docker images -a
Данная команда покажет все сбилдженные имеджы. Для удаления всех неиспользоваемых образов, можно использовать следующую команду:
$ docker rmi $(docker images | awk '{ print $3; }')
При необходимости, можно посмотреть всю информацию по созданному образу:
$ docker inspect $(docker images | grep -E "packer" | head -n1 | awk {'print $3'})
Запустим контейнер:
$ docker run -d -ti --name=packer packer:1.3.1
Добавим волюму (если нужно):
$ docker run -d -v ${pwd}/packer:/home/packer/ -t -i --name=packer packer:1.3.1
Подключится к контейнеру можно вот так:
$ docker exec -ti packer sh
Или:
$ docker exec -ti packer bash
Так же:
$ docker exec -ti packer packer version
Или 2 последние команды, можно обьеденить в одну и сразу запустить пакер:
$ docker run --rm -it --name=packer9 packer:1.3.1
Смотрим запущенные контейнеры:
$ docker ps
Более красивый вариант:
$ docker ps --format "table {{.Names}}\t{{.Image}}\t{{.ID}}\t{{.RunningFor}}\t{{.Status}}"
Просмотрим подробную информацию о контейнере:
$ docker inspect $(docker ps -a | grep packer| awk {'print $1'})
Ну, могу еще описать процесс создания vault контейнера:
$ vim vault/Dockerfile
Содержание:
FROM centos:7
MAINTAINER Vitaliy Natarov "vitaliy.natarov@yahoo.com"
LABEL architecture="amd64" \
OS="CentOS" \
License=GPLv2 \
Description="My dockerfile with vault" \
Vendor="Natarov Vitaliy" \
Version="1.0.0"
ARG VAULT_VERSION=0.11.4
ENV PATH="$HOME/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/opt/local/bin:/opt/local/sbin:${PATH}"
ENV LANGUAGE=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
RUN yum install -y \
epel-release \
yum-plugin-ovl \
wget \
which \
unzip \
rsync \
openssh \
openssh-clients \
python-pip && \
yum clean all
RUN wget -q https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip && \
unzip -q vault_${VAULT_VERSION}_linux_amd64.zip && \
yes|mv -f vault /usr/local/bin/vault && \
chmod +x /usr/local/bin/vault && \
rm -f vault_${VAULT_VERSION}_linux_amd64.zip && \
export VAULT_ADDR='http://127.0.0.1:8200'
#
###/usr/local/bin/vault -autocomplete-install
#
RUN useradd vault
USER vault
ENV USER vault
EXPOSE 8200
WORKDIR /home/vault
ENTRYPOINT ["/usr/local/bin/vault"]
CMD ["server", "-dev"]
Билдим:
$ docker build -t vault:0.11.4 -f vault/Dockerfile .
Запускаем:
$ docker run -d -ti -p127.0.0.1:8200:8200 --name=vault vault:0.11.4
И напоследок, можно запустить контейнер в следующем моде:
$ docker run -d -ti --restart=always -p127.0.0.1:8200:8200 --name=vault vault:0.11.4
Я описывал несколько других сборок, для ознакомления вы можете их взять их тут:
Установка mysql в контейнере на Docker
Установка nginx в контейнере на Docker
Вот еще полезные статьи о работе с docker:
Остановить/Удалить все Docker контейнеры/images
Хочу отметить следующее, что к каждому контейнеру можно подключиться:
$ sudo docker exec -it 2ab152b77736 /bin/bash
А посмотреть список доступных контейнеров:
$ sudo docker ps
А на этом у меня все! Тема «Создание docker контейнера в Unix/Linux» завершена.