docker: image build


Dockerfile reference
Best practices for writing Dockerfiles
Understand how CMD and ENTRYPOINT interact

Свой образ можно собрать двумя способами:docker container commit и Dockerfile

docker container commit

Создадим любой контейнер, внесём необходимые изменения(установка ПО, редактирование конфигов…), соберём новый контейнр с помощью команды docker container commit ИМЯконтейнра ИМЯобраза

Пример — установка ping утилиты на убунту:

1. Создаем, запускаем контейнер и входим в его консоль:
docker container run -it --name ubntping ubuntu bash
root@6b17e45fc0fd:/#

2. Проверяем, что пакет не устанволен
root@6b17e45fc0fd:/# ping
bash: ping: command not found

3. Устанавиливаем пакет:
apt-get update && apt-get install -y iputils-ping

4. Проверяем ,что пакет установился:
ping -c 3 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=54 time=107 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=54 time=105 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=54 time=105 ms

--- 1.1.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 105.768/106.490/107.888/1.057 ms

5. Выходим и контейнера (Ctrl+d или Ctrl+p и Ctrl+q) и создаем новый образ:
docker container commit ubntping billybones/ubntping

6. Смотрим, наш новый образ появился в списке:
docker image ls
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
billybones/ubntping   latest              32361c805c2c        4 seconds ago       124MB
ubuntu                latest              113a43faa138        2 weeks ago         81.2MB

Здесь нужно обратить внимание, если планируется залить образ на hub.docker, то нужно укзать имя образа с вашим логином от hub.docker, пример billybones/ubntping
Если необходимо сменить имя образа, то можно воспользоваться командой:
docker image tag

7. Удаляем старый контейнер:
docker container rm -fv ubntping


8. Созадем и запускаем новый контейнер из нового образа с уже устанволенным пингом и входим в консоль:
docker container run -it --name ubntping billybones/ubntping bash


9. Проверяем, что пинг установлен:
ping -c 3 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=54 time=110 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=54 time=115 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=54 time=106 ms

--- 1.1.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 106.111/110.660/115.457/3.819 ms

Dockerfile

Создадим Dockerfile, в нём опишим необходимые инструкции и затем с помощью команды docker image build создадим новый образ.
Инфу по иструкциям можно найти в книги:
Raj P., Chelladhurai J. S., Singh V. — Learning Docker — 2015
см. стр. 43
а также Dockerfile reference

Пример — создадим наш hello-world образ.

1. Создадим Dockerfile  с следубющим содержимым:
FROM busybox
CMD ["echo","Hello, Docker!"]

2. Собираем образ:
docker image build -t billybones/hello-world .
Sending build context to Docker daemon  2.048kB
Successfully tagged billybones/hello-world:latest

3. Проверяем:
docker image ls
REPOSITORY               TAG                 IMAGE ID            CREATED              SIZE
billybones/hello-world   latest              55a7e53c90d2        About a minute ago   1.15MB
billybones/ubntping      latest              32361c805c2c        2 hours ago          124MB
busybox                  latest              8c811b4aec35        4 weeks ago          1.15MB

4. Создадим и запустим контейнер:
docker run --rm billybones/hello-world
Hello, Docker!

Зальём оба образа на Docker Hub

docker login //логинемся на hub.docker.com
docker image push billybones/hello-world //пушим образ в репу
docker image push billybones/ubntping  //пушим образ в репу
docker logout // разлогиниваемся

Заходим на https://hub.docker.com/ и смотрим, что в нашей репе появились два образа.

Удаляем образы из локального хранилища:

docker image rm billybones/hello-world billybones/ubntping

Создадим два новых контейнера для проверки наших образов:

docker container run --rm -it billybones/ubntping ping -c 3 1.1.1.1
docker container run --rm billybones/hello-world

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *