# Docker

## Установка

```
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt-get update

sudo apt-get install docker-ce -y

sudo docker run hello-world
```

## Процессы

Просмотр списка процессов

```
sudo docker ps -a
```

Убить процесс

```
sudo docker kill amazing_keldysh
```

Удалить контейнер

```
sudo docker rm -f 689b5669d1bd
```

## Изображения

Посмотреть список изображений

```
sudo docker images
```

Удалить изображение

```
sudo docker image rm IMAGE 757dc40df3aa
```

## Пример применения

Создадим файл "**package.json**" со следующим содержимым:

```
{
  "name": "NodeDockerTest",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.3"
  }
}
```

Создадим файл "**index.js**" со следующим содержимым:

```javascript
"use strict";

let express = require("express");
let app = express();

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

let port = process.env.PORT || 5005;
app.listen(port);
console.log("Server works on port: " + port);
console.log("-------------------------------------");

app.get('/*', (request, response) => {
   const dictionary = request.query;
   const a = dictionary["a"] + "";
   let s = "";
   for(let i = 0; i < 10; i++) {
       s = "" + s + "" + a + "";
   }
   response.end(s + "");
});
```

Создадим файл "**Dockerfile**" со следующим содержимым:

```
FROM ubuntu:16.04

MAINTAINER Maxim_Super_User

USER root

RUN apt-get -y update
RUN apt-get install -y nodejs
RUN apt-get install -y npm
RUN apt install -y nodejs-legacy

ENV APP /root/app
ADD ./ $APP
WORKDIR $APP

RUN npm install

EXPOSE 5005

CMD node index.js
```

Открываем терминал в папке с проектом.

Осуществляем сборку проекта.

```
sudo docker build -t aaa_bbb_ccc .
```

Смотрим список с изображениями.

```
sudo docker images
```

Осуществляем запуск.

```
sudo docker run -p 80:5005 -ti 82cbd74e8676
```

Заходим в браузере на URL:

```
http://localhost/
```

После этого должна отобразиться веб-страница.

## Работа с Docker Compose

Ссылка на репозиторий с примером.

```
https://github.com/maxim218/Docker-Compose-Test
```

Взаимодействие контейнеров друг с другом.

```
https://github.com/maxim218/Docker-Containers-Connect-Test
```

Использование Nginx и Docker

```
https://github.com/maxim218/Nginx_Docker_Apps_Test
```

Репликация базы данных

```
https://github.com/maxim218/docker-pg-replication
```

## Подключение к контейнеру

Подключение к уже запущенному контейнеру

```
docker exec -i -t 0a7d2f690bf6 bash
```

## Работа с Docker Hub

Ссылка на репозиторий с примером

```
https://github.com/maxim218/first-docker-app
```
