Инициализируем новый контейнер с именем хоста и выйдем:
docker run -h centos_dev -it centos bash
[root@centos_dev /]# exit
Так-же видим присвоенное имя контейнера gifted_feistel:
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9f6fd3104bf9 centos "bash" 6 seconds ago Exited (0) 2 seconds ago gifted_feistel
Получить информацию о контейнере gifted_feistel:
docker inspect gifted_feistel
Ищем интересующий нас образ на докерхабе https://hub.docker.com/ , например apache И берем к примеру этот:
docker pull bitnami/apache
Видим его в списке:
docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 2 weeks ago 1.84kB bitnami/apache latest 703f5bb529ff 2 hours ago 159MB centos latest 1e1148e4cc2c 5 weeks ago 202MB
Запустим в фоновом режиме -d:
docker run -d bitnami/apache
Смотрим, на каких портах он заработал:
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5feef699435f bitnami/apache "/app-entrypoint.sh …" 10 seconds ago Up 9 seconds 8080/tcp, 8443/tcp nervous_mcnulty
Пробросим порт 8000 с нашей машины на порт 8080 контейнера:
docker stop nervous_mcnulty
docker run -d -p 8000:8080 bitnami/apache
Смотрим, на каких портах он заработал:
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5e13e480cf2d bitnami/apache "/app-entrypoint.sh …" 3 seconds ago Up 2 seconds 8443/tcp, 0.0.0.0:8000->8080/tcp ecstatic_mcnulty
Можно жобавить тэг при отправке через двоеточие:
docker pull dockerid/mynewapp:alfa
docker pull dockerid/mynewapp:beta
Если удалить образ локально на машине, и запустить, то он скачается:
docker run dockerid/mynewapp testsh
3. Docker файл
Является обычным текстовым файлом, содержащим инструкции для создания образа
Создадим директорию для проектов и файл:
mkdir /home/user/docker
touch /home/user/docker/Dockerfile
vi /home/user/docker/Dockerfile
#Инструкция используемого образа (1я инструкция, обязательна)
FROM centos
#RUN - команды внутри образа
RUN echo "#!/bin/bash" > /root/test.sh
RUN echo "echo 'Test Message!'" >> /root/test.sh
RUN chmod +x /root/test.sh
RUN ln -s /root/test.sh /usr/bin/testsh
Создадим образ:
cd /home/user/docker/
docker build -t dockerid/mynewapp . Sending build context to Docker daemon 2.048kB Step 1/5 : FROM centos ---> 1e1148e4cc2c Step 2/5 : RUN echo "#!/bin/bash" > /root/test.sh ---> Running in 237352f5eeb0 Removing intermediate container 237352f5eeb0 ---> 0e834429f33c Step 3/5 : RUN echo "echo 'Test Message!'" >> /root/test.sh ---> Running in ccef25766117 Removing intermediate container ccef25766117 ---> 8b3d865e6472 Step 4/5 : RUN chmod +x /root/test.sh ---> Running in 7395fbe03fe2 Removing intermediate container 7395fbe03fe2 ---> f856dcc45e31 Step 5/5 : RUN ln -s /root/test.sh /usr/bin/testsh ---> Running in 271b75d94284 Removing intermediate container 271b75d94284 ---> bfb604305a46 Successfully built bfb604305a46 Successfully tagged dockerid/mynewapp:latest
Можно запускать образ:
docker run dockerid/mynewapp testsh
Test Message!
Список образов пополнился:
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1ba70f0111a4 dockerid/mynewapp "testsh" 7 seconds ago Exited (0) 6 seconds ago sharp_kilby
Указать точку входа в файле /home/user/docker/Dockerfile:
ENTRYPOINT ["testsh"]
Пересоздать образ:
docker build -t dockerid/mynewapp . Sending build context to Docker daemon 2.048kB Step 1/6 : FROM centos ---> 1e1148e4cc2c Step 2/6 : RUN echo "#!/bin/bash" > /root/test.sh ---> Running in bc06e1e490c3 Removing intermediate container bc06e1e490c3 ---> 0c27bf19a479 Step 3/6 : RUN echo "echo 'Test Message!'" >> /root/test.sh ---> Running in ee288e2d9d50 Removing intermediate container ee288e2d9d50 ---> 2f4677d496d2 Step 4/6 : RUN chmod +x /root/test.sh ---> Running in 013c80c7e2df Removing intermediate container 013c80c7e2df ---> b9a060ca3668 Step 5/6 : RUN ln -s /root/test.sh /usr/bin/testsh ---> Running in 59fe5b9c78ea Removing intermediate container 59fe5b9c78ea ---> 4317ba3683de Step 6/6 : ENTRYPOINT ["testsh"] ---> Running in eebd78b12e37 Removing intermediate container eebd78b12e37 ---> eaef3d1ed2a6 Successfully built eaef3d1ed2a6 Successfully tagged dockerid/mynewapp:latest
Больше не нужно указывать testsh:
docker run dockerid/mynewapp
Test Message!
Настроим связь между контейнерами баз данных и админки
Загрузим и запустим образ MariaDB с https://hub.docker.com/ , где mysqlserver будет имя контейнера:
docker run --name mysqlserver -e MYSQL_ROOT_PASSWORD=321 -d mariadb
Загрузим и запустим в фоне образ adminer, где mysqlserver будет имя контейнера MariaDB:
docker run -d --link mysqlserver:db -p 8080:8080 adminer
Как видим, используются образы для запуска mariadb и adminer
Имена db и adminer будут присвоены контейнерам, не надо путать с именами из docker run restart: always - автоматический повторный запуск при остановке контейнера: no - никогда on-failure - при аварии always - всегда
Находясь в директории с файлом произведем запуск:
docker-compose up
Вывести список контейнеров, запущенных с помощью docker-compose:
docker-compose ps Name Command State Ports ---------------------------------------------------------------- user_admindb_1 entrypoint.sh docker-php-e ... Exit 0 user_db_1 docker-entrypoint.sh mysqld Exit 0