Введение
Docker — это программное обеспечение, упрощающее процесс управления процессами приложений в «контейнерах». Контейнеры позволяют запускать приложения в процессах, изолированных от ресурсов. Они аналогичны виртуальным машинам.
В этом руководстве мы установим и будем использовать Docker Community Edition (CE) в Ubuntu 20.04 LTS Focal Fossa.
Предпосылки
Прежде чем продолжить работу с этим учебным пособием, вы должны выполнить следующие предварительные условия:
- Пользователь с привилегиями sudo.
Если вы хотите установить Docker на удаленный сервер, продолжайте читать, в противном случае пропустите первый абзац «Подключение к серверу» и читайте следующий.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root, введите следующую команду:
ssh root@IP_DEL_SERVER
Далее вам нужно будет ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя:
ssh nome_utente@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Стандартный порт для подключения по ssh — 22, если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p, затем введите следующую команду:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Теперь вы подключены к своему серверу, вы готовы начать установку 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 $(lsb_release -cs) stable"
Затем обновите базу данных с помощью недавно добавленного репозитория:
sudo apt update
Убедитесь, что вы добавили репозиторий Docker:
apt-cache policy docker-ce
Вы должны увидеть выходное сообщение, подобное следующему:
docker-ce:
Installed: 5:19.03.9~3-0~ubuntu-focal
Candidate: 5:19.03.9~3-0~ubuntu-focal
Version table:
*** 5:19.03.9~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
100 /var/lib/dpkg/status
Наконец, установите Docker:
sudo apt install docker-ce docker-ce-cli containerd.io
Чтобы проверить статус 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 Thu 2020-05-21 23:09:38 CEST; 1min 56s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 28124 (dockerd)
Tasks: 8
Memory: 35.6M
CGroup: /system.slice/docker.service
└─28124 /usr/bin/dockerd -H fd://--containerd=/run/containerd/containerd.sock
Докер установлен правильно.
Запускать команды 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
Установите другую версию Docker
Чтобы установить конкретную версию, сначала перечислите все версии, доступные в репозитории Docker:
sudo apt update
sudo apt list -a docker-ce
Доступные версии Docker напечатаны во втором столбце. На момент написания этой статьи в официальных репозиториях Docker доступна только одна версия Docker ( 5:19.03.9~3-0~ubuntu-focal
).
docker-ce/focal 5:19.03.9~3-0~ubuntu-focal amd64
Установите определенную версию, добавив =<VERSION>
после имени пакета:
sudo apt install docker-ce=<VERSION> docker-ce-cli=<VERSION> contain
При выпуске новой версии Docker пакеты можно обновить с помощью стандартной процедуры sudo apt update && sudo apt upgrade
.
Заблокировать обновление Docker
Если вы хотите предотвратить обновление пакета Docker, отметьте его как удерживаемый:
sudo apt-mark hold docker-ce
Докер-команды
Мы будем использовать пользователя в группе докеров, поэтому нам не нужно будет использовать 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
Вы должны получить выходное сообщение, подобное следующему:
v10.19.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
90c1de9ca789 ubuntu "/bin/bash" 3 minutes ago Exited (130) 27 seconds ago dazzling_rubin
46bfb1d8c68d hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago tender_roentgen
Чтобы просмотреть последний созданный контейнер, используйте команду -l:
Чтобы запустить остановленный контейнер, используйте docker start, за которым следует идентификатор или имя контейнера. Запустите контейнер на основе Ubuntu с идентификатором 90c1de9ca789:
docker start 90c1de9ca789
Контейнер запустится, и вы можете использовать docker ps, чтобы увидеть его статус.
Чтобы остановить работающий контейнер, используйте docker stop, за которым следует идентификатор или имя контейнера.
Остановите контейнер, используя связанное имя:
docker stop dazzling_rubin
Чтобы удалить контейнер, вы можете использовать команду docker rm и сопоставить идентификатор или имя:
docker rm dazzling_rubin
Удалить Докер
Перед удалением Docker рекомендуется удалить все контейнеры, образы, тома и сети.
Выполните следующие команды, чтобы остановить все запущенные контейнеры и удалить все объекты докеров:
docker container stop $(docker container ls -aq)
docker system prune -a --volumes
Теперь вы можете удалить Docker, как и любой другой пакет, установленный с помощью apt
:
sudo apt purge docker-ce
sudo apt autoremove
Вывод
Установка и настройка Docker на Ubuntu 20.04 LTS Focal Fossa завершена. Дополнительные сведения о Docker см. в официальной документации Docker.