Введение
Docker — это программное обеспечение, упрощающее процесс управления процессами приложений в «контейнерах». Контейнеры позволяют запускать приложения в процессах, изолированных от ресурсов. Они аналогичны виртуальным машинам.
В этом руководстве мы установим и будем использовать Docker Community Edition (CE) в Ubuntu 18.04 LTS.
Если вы намерены установить и настроить Docker на удаленном сервере, продолжайте чтение, в противном случае, если вы хотите установить Docker на свой локальный компьютер, пропустите первый абзац «Подключение к серверу» и прочитайте следующий.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется пароль для аутентификации.
Чтобы подключиться к серверу как root, введите эту команду:
ssh root@IP_DEL_SERVER
Далее вам будет предложено ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить первый параметр:
ssh VOSTRO_UTENTE@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Теперь вы подключены к своему серверу, вы готовы начать установку Docker.
Установить Докер
Docker доступен в официальном репозитории Ubuntu, но это может быть не последняя версия. Чтобы использовать последнюю версию, мы установим Docker из официального репозитория Docker.
Убедимся, что пакеты в системе обновлены до последних доступных версий:
sudo apt update
Установите некоторые необходимые пакеты, которые позволяют использовать пакеты через HTTPS:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Добавьте ключ GPG для официального репозитория Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Добавьте репозиторий Docker:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
Затем обновите базу данных с помощью недавно добавленного репозитория:
sudo apt update
Убедитесь, что вы установили из репозитория Docker вместо репозитория Ubuntu по умолчанию:
apt-cache policy docker-ce
Вы должны увидеть выходное сообщение, подобное следующему:
docker-ce:
Installed: (none)
Candidate: 5:18.09.0~3-0~ubuntu-bionic
Version table:
*** 5:18.09.0~3-0~ubuntu-bionic 500
500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
Наконец, установите Docker:
sudo apt install docker-ce
Чтобы проверить статус Docker:
sudo systemctl status docker
Вы должны увидеть выходное сообщение, подобное следующему:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2018-12-18 23:47:13 CET; 3s ago
Docs: https://docs.docker.com
Main PID: 1489 (dockerd)
Tasks: 8
CGroup: /system.slice/docker.service
└─1489 /usr/bin/dockerd -H unix://
Докер установлен правильно.
Запускать команды Docker без sudo
По умолчанию команду Docker может запускать только пользователь root или пользователь из группы docker, которая создается автоматически в процессе установки Docker.
Если вы не хотите вводить sudo каждый раз, когда запускаете команду docker, добавьте свое имя пользователя в группу docker следующим образом:
sudo usermod -aG docker ${USER}
Чтобы применить изменения к группе, выйдите из сервера и войдите снова или введите следующую команду:
su - ${USER}
Вам будет предложено ввести пароль пользователя, чтобы продолжить.
Подтвердите, что ваш пользователь добавлен в группу docker:
id -nG
Вы должны получить выходное сообщение, подобное следующему:
noviello sudo docker
Если вы хотите добавить в группу docker другого пользователя, с которым вы не связаны, введите следующую команду:
sudo usermod -aG docker nome_utente
Докер-команды
Мы будем использовать пользователя в группе докеров, поэтому нам не нужно будет использовать sudo. В противном случае, если вы не хотите использовать пользователя докера, добавьте команду с помощью sudo.
Общий синтаксис следующий:
docker [option] [command] [arguments]
Чтобы просмотреть все доступные подкоманды:
docker
Вы должны получить выходное сообщение, подобное следующему:
Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
Run 'docker COMMAND --help' for more information on a command.
Чтобы просмотреть системную информацию в Docker, используйте:
docker info
Работа с образами Docker
Контейнеры Docker создаются с помощью образов Docker. По умолчанию Docker извлекает эти образы из Docker Hub, реестра Docker, которым управляет Docker, компания, стоящая за проектом Docker. Любой может разместить свои образы Docker на Docker Hub.
Чтобы проверить, можете ли вы получить доступ и загрузить образы из Docker Hub, введите:
docker run hello-world
Вы должны получить выходное сообщение, подобное следующему:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
Изначально Docker не может найти образ hello-world локально, поэтому он загружает образ из Docker Hub, который является репозиторием по умолчанию. Как только образ был загружен, Docker создал контейнер из образа, и приложение внутри контейнера запустилось, отображая сообщение.
Вы можете искать изображения, доступные в Docker Hub, с помощью команды docker с подкомандой поиска. Например, чтобы найти образ Ubuntu, введите:
docker search ubuntu
Скрипт просканирует Docker Hub и вернет список всех изображений, имя которых соответствует поисковой строке.
В этом случае вы должны получить выходное сообщение, подобное следующему:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 8984 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 258 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 190 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 139 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 95 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 93 [OK]
neurodebian NeuroDebian provides neuroscience research s… 55 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 48 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components=m… 40 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images w… 23 [OK]
tutum/ubuntu Simple Ubuntu docker images with SSH access 18
i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 16
1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 13 [OK]
ppc64le/ubuntu Ubuntu is a Debian-based Linux operating sys… 12
1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 7 [OK]
eclipse/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 6 [OK]
codenvy/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 5 [OK]
darksheer/ubuntu Base Ubuntu Image -- Updated hourly 5 [OK]
pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 2
1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK]
smartentry/ubuntu ubuntu with smartentry 1 [OK]
paasmule/bosh-tools-ubuntu Ubuntu based bosh-cli 0 [OK]
ossobv/ubuntu Custom ubuntu image from scratch (based on o… 0
1and1internet/ubuntu-16-healthcheck ubuntu-16-healthcheck 0 [OK]
pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 0
В ОФИЦИАЛЬНОМ столбце OK указывает на образ, созданный и поддерживаемый компанией, стоящей за проектом. После того, как вы определили образ, который хотите использовать, вы можете загрузить его на свой компьютер с помощью подкоманды pull.
Выполните следующую команду, чтобы загрузить официальный образ Ubuntu на свой компьютер или сервер:
docker pull ubuntu
Вы должны получить выходное сообщение, подобное следующему:
Using default tag: latest
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest
После загрузки образа вы можете запустить контейнер, используя загруженный образ с помощью подкоманды run.
Чтобы просмотреть изображения, загруженные на ваш компьютер или сервер, введите:
docker images
Вы должны получить выходное сообщение, подобное следующему:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 93fd78260bd1 4 weeks ago 86.2MB
hello-world latest 4ab4c602aa5e 3 months ago 1.84kB
Как мы увидим позже в этом руководстве, образы, которые вы используете для запуска контейнеров, можно редактировать и использовать для создания новых образов, которые затем можно загружать (вталкивать — это технический термин) в Docker Hub или другие журналы Docker.
Изображения можно редактировать и использовать для создания новых образов, которые затем можно загружать ( проталкивать ) в Docker Hub или другие регистры Docker.
Докер-контейнер
Контейнер hello-world, запущенный на предыдущем шаге, является примером контейнера, который запускается и автоматически закрывается после выдачи тестового сообщения. Контейнеры могут быть более сложными и интерактивными.
Попробуйте контейнер образа Ubuntu:
docker run -it ubuntu
Командная строка должна измениться, чтобы отразить тот факт, что вы находитесь внутри контейнера. Это должно выглядеть примерно так:
root@3256a08e3b3c:/#
Следующие числа 3256a08e3b3c соответствуют идентификатору контейнера.
Теперь вы можете запустить любую команду внутри контейнера. Например, мы обновляем базу данных пакетов внутри контейнера. Вам не нужно добавлять sudo к каким-либо командам, потому что вы работаете внутри контейнера как пользователь root:
apt update
Таким образом, вы можете установить любое приложение, такое как Node.js:
apt install nodejs
Проверьте версию nodejs, которую вы только что установили:
nodejs -v
Вы должны получить выходное сообщение, подобное следующему:
v8.10.0
Любые изменения, сделанные в контейнере, применяются только к этому контейнеру.
Чтобы выйти из контейнера, введите exit в командной строке.
Давайте взглянем на следующее управление контейнерами в нашей системе.
Управление контейнером Docker
Чтобы просмотреть все активные контейнеры:
docker ps
Вы должны получить выходное сообщение, подобное следующему:
CONTAINER ID IMAGE COMMAND CREATED
Мы запустили два контейнера, hello-world и образ ubuntu. Оба контейнера больше не работают, но они все еще существуют в вашей системе.
Чтобы просмотреть все контейнеры, активные и неактивные, добавьте параметр -a к приведенной выше команде:
docker ps -a
Вы должны получить выходное сообщение, подобное следующему:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e917bd03bad3 hello-world "/hello" 29 minutes ago Exited (0) 29 minutes ago jovial_wozniak
3256a08e3b3c ubuntu "/bin/bash" 2 hours ago Exited (0) 2 hours ago stoic_napier
Чтобы просмотреть последний созданный контейнер, используйте команду -l:
Чтобы запустить остановленный контейнер, используйте docker start, за которым следует идентификатор или имя контейнера. Запустите контейнер на основе Ubuntu с идентификатором 3256a08e3b3c:
docker start 3256a08e3b3c
Контейнер запустится, и вы можете использовать docker ps, чтобы увидеть его статус.
Чтобы остановить работающий контейнер, используйте docker stop, за которым следует идентификатор или имя контейнера.
Остановите контейнер, используя связанное имя:
docker stop stoic_napier
Чтобы удалить контейнер, вы можете использовать команду docker rm и сопоставить идентификатор или имя:
docker rm stoic_napier
Вывод
Установка и настройка Docker на Ubuntu 18.04 LTS завершена.