188 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			188 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: Docker
							 | 
						|||
| 
								 | 
							
								localeTitle: докер
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								## докер
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Docker - проект с открытым исходным кодом, основанный на контейнерах Linux. Он использует функции ядра Linux, такие как пространства имен и группы управления, для создания контейнеров поверх операционной системы.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Docker использует контейнеры (экземпляр среды выполнения образа) для создания сред, которые могут легко создавать, отправлять и запускать приложения. Основное преимущество заключается в том, что контейнеры Docker по умолчанию полностью изолированы от среды хоста, но только для доступа к файлам хоста и портам, если они настроены для этого. Это отличная альтернатива вирутальным машинам (VM), которые часто являются ресурсоемкими. Образ диска и состояния виртуальных машин - это запутанность настроек ОС, установленных на системе зависимостей, патчей безопасности ОС и других несложных, труднореплицируемых эфемеров.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Docker - это компьютерная программа, которая выполняет виртуализацию на уровне операционной системы, также известную как «контейнеризация».
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Docker - это платформа для разработчиков и системных администраторов для разработки, развертывания и запуска приложений с контейнерами. Использование контейнеров Linux для развертывания приложений называется контейнеризацией. Контейнеры не новы, но их использование для простого развертывания приложений.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Контейнеры становятся все более популярными, поскольку контейнеры:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								*   Гибкость: даже самые сложные приложения могут быть контейнерными.
							 | 
						|||
| 
								 | 
							
								*   Легкий: Контейнеры используют и совместно используют ядро хоста.
							 | 
						|||
| 
								 | 
							
								*   Взаимозаменяемый: вы можете развертывать обновления и обновления на лету.
							 | 
						|||
| 
								 | 
							
								*   Portable: вы можете создавать локально, развертываться в облаке и работать в любом месте.
							 | 
						|||
| 
								 | 
							
								*   Масштабируемость. Вы можете увеличивать и автоматически распространять реплики контейнеров.
							 | 
						|||
| 
								 | 
							
								*   Stackable: вы можете выполнять стек вертикально и «на лету».
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Установка для [Mac](https://docs.docker.com/docker-for-mac/install/)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Установка для [Windows](https://docs.docker.com/docker-for-windows/install/)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Установка для [Ubuntu](https://docs.docker.com/install/linux/docker-ce/ubuntu/)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								_Все ссылки на thoses для Docker CE (Community Edition)_
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								* * *
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## Версия тестового докера
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Для тестирования, если приложение прошло хорошо, запустите:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								docker --version 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Убедитесь, что у вас есть вывод, который выглядит следующим образом:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								Docker version 18.06.1-ce, build e68fc7a 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								* * *
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## Установка тестового докера
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Проверьте, что ваша установка работает, запустив простой образ Docker, hello-world:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								docker run hello-world 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 Unable to find image 'hello-world:latest' locally 
							 | 
						|||
| 
								 | 
							
								 latest: Pulling from library/hello-world 
							 | 
						|||
| 
								 | 
							
								 ca4f61b1923c: Pull complete 
							 | 
						|||
| 
								 | 
							
								 Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7 
							 | 
						|||
| 
								 | 
							
								 Status: Downloaded newer image for hello-world:latest 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 Hello from Docker! 
							 | 
						|||
| 
								 | 
							
								 This message shows that your installation appears to be working correctly. 
							 | 
						|||
| 
								 | 
							
								 ... 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Что такое контейнеризация:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Проще говоря, это не что иное, как упаковка процесса / приложения и его зависимостей в распространяемое изображение, которое может выполняться изолированно.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Зачем нам Docker:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Это делает жизнь инженеров-программистов очень плавными, так как они всегда будут работать в одной и той же среде разработки. Это помогает делиться конечным продуктом с клиентами / другими командами, не беспокоясь о проблемах окружающей среды. Это уменьшает количество аппаратных средств, необходимых для запуска наших приложений, не тратя их на ненужный уровень ОС.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## Фундаментальные концепции докеров
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Докерный двигатель
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Двигатель Docker - это слой, на котором работает Docker. Это легкая среда выполнения и инструменты, которые управляют контейнерами, изображениями, сборками и т. Д. Он запускается изначально на системах Linux и состоит из:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								1.  Docker Daemon, который запускается на главном компьютере.
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								2.  Клиент Docker, который затем взаимодействует с Docker Daemon для выполнения команд.
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								3.  REST API для взаимодействия с Docker Daemon удаленно.
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Докер-клиент
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Клиент Docker - это то, с чем вы, как конечный пользователь Docker, общаетесь. Подумайте об этом как о UI для Docker.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Docker Daemon
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Демон Docker - это то, что на самом деле выполняет команды, отправленные клиенту Docker - например, создание, запуск и распространение ваших контейнеров. Docker Daemon работает на главной машине, но, как пользователь, вы никогда не общаетесь напрямую с Daemon. Клиент Docker также может работать на хост-машине, но этого не требуется. Он может работать на другой машине и взаимодействовать с Docker Daemon, который работает на главной машине.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Dockerfile
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Файл Dockerfile - это то, где вы пишете инструкции для создания образа Docker. Эти инструкции могут быть следующими: **RUN apt-get y install some-package** : для установки программного пакета **ЭКСПОЗИЦИЯ 8000** : открыть порт **ENV ANT\_HOME / usr / local / apache-ant** передать переменную среды и так далее. Как только вы настроите свой файл Dockerfile, вы можете использовать команду сборки docker для создания изображения из него. Вот пример файла Docker:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								# Start with ubuntu 14.04 
							 | 
						|||
| 
								 | 
							
								 FROM ubuntu:14.04 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 MAINTAINER freeCodeCamp@gmail.com 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # For SSH access and port redirection 
							 | 
						|||
| 
								 | 
							
								 ENV ROOTPASSWORD sample 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Turn off prompts during installations 
							 | 
						|||
| 
								 | 
							
								 ENV DEBIAN_FRONTEND noninteractive 
							 | 
						|||
| 
								 | 
							
								 RUN echo "debconf shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections 
							 | 
						|||
| 
								 | 
							
								 RUN echo "debconf shared/accepted-oracle-license-v1-1 seen true" | debconf-set-selections 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Update packages 
							 | 
						|||
| 
								 | 
							
								 RUN apt-get -y update 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Install system tools / libraries 
							 | 
						|||
| 
								 | 
							
								 RUN apt-get -y install python3-software-properties \ 
							 | 
						|||
| 
								 | 
							
								    software-properties-common \ 
							 | 
						|||
| 
								 | 
							
								    bzip2 \ 
							 | 
						|||
| 
								 | 
							
								    ssh \ 
							 | 
						|||
| 
								 | 
							
								    net-tools \ 
							 | 
						|||
| 
								 | 
							
								    vim \ 
							 | 
						|||
| 
								 | 
							
								    curl \ 
							 | 
						|||
| 
								 | 
							
								    expect \ 
							 | 
						|||
| 
								 | 
							
								    git \ 
							 | 
						|||
| 
								 | 
							
								    nano \ 
							 | 
						|||
| 
								 | 
							
								    wget \ 
							 | 
						|||
| 
								 | 
							
								    build-essential \ 
							 | 
						|||
| 
								 | 
							
								    dialog \ 
							 | 
						|||
| 
								 | 
							
								    make \ 
							 | 
						|||
| 
								 | 
							
								    build-essential \ 
							 | 
						|||
| 
								 | 
							
								    checkinstall \ 
							 | 
						|||
| 
								 | 
							
								    bridge-utils \ 
							 | 
						|||
| 
								 | 
							
								    virt-viewer \ 
							 | 
						|||
| 
								 | 
							
								    python-pip \ 
							 | 
						|||
| 
								 | 
							
								    python-setuptools \ 
							 | 
						|||
| 
								 | 
							
								    python-dev 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Install Node, npm 
							 | 
						|||
| 
								 | 
							
								 RUN curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash - 
							 | 
						|||
| 
								 | 
							
								 RUN apt-get install -y nodejs 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Add oracle-jdk7 to repositories 
							 | 
						|||
| 
								 | 
							
								 RUN add-apt-repository ppa:webupd8team/java 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Make sure the package repository is up to date 
							 | 
						|||
| 
								 | 
							
								 RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Update apt 
							 | 
						|||
| 
								 | 
							
								 RUN apt-get -y update 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Install oracle-jdk7 
							 | 
						|||
| 
								 | 
							
								 RUN apt-get -y install oracle-java7-installer 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Export JAVA_HOME variable 
							 | 
						|||
| 
								 | 
							
								 ENV JAVA_HOME /usr/lib/jvm/java-7-oracle 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Run sshd 
							 | 
						|||
| 
								 | 
							
								 RUN apt-get install -y openssh-server 
							 | 
						|||
| 
								 | 
							
								 RUN mkdir /var/run/sshd 
							 | 
						|||
| 
								 | 
							
								 RUN echo "root:$ROOTPASSWORD" | chpasswd 
							 | 
						|||
| 
								 | 
							
								 RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # SSH login fix. Otherwise user is kicked off after login 
							 | 
						|||
| 
								 | 
							
								 RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Expose Node.js app port 
							 | 
						|||
| 
								 | 
							
								 EXPOSE 8000 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Create tap-to-android app directory 
							 | 
						|||
| 
								 | 
							
								 RUN mkdir -p /usr/src/my-app 
							 | 
						|||
| 
								 | 
							
								 WORKDIR /usr/src/my-app 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Install app dependencies 
							 | 
						|||
| 
								 | 
							
								 COPY . /usr/src/my-app 
							 | 
						|||
| 
								 | 
							
								 RUN npm install 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 # Add entrypoint 
							 | 
						|||
| 
								 | 
							
								 ADD entrypoint.sh /entrypoint.sh 
							 | 
						|||
| 
								 | 
							
								 RUN chmod +x /entrypoint.sh 
							 | 
						|||
| 
								 | 
							
								 ENTRYPOINT ["/entrypoint.sh"] 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 CMD ["npm", "start"] 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#### Дополнительная информация:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								*   [Начальный дружественный документ](https://medium.freecodecamp.org/a-beginner-friendly-introduction-to-containers-vms-and-docker-79a9e3e119b)
							 | 
						|||
| 
								 | 
							
								*   [Официальные документы Докера](https://docs.docker.com/get-started/)
							 | 
						|||
| 
								 | 
							
								*   [Попробуйте Docker Online](http://training.play-with-docker.com/)
							 |