User Tools

Site Tools


технология_docker

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
технология_docker [2024/04/11 15:27]
val [Создание контейнера для приложения с использованием Dockerfile]
технология_docker [2025/06/16 08:16] (current)
val [Создание образа для приложения с использованием Dockerfile]
Line 3: Line 3:
   * [[https://​youtu.be/​hdVNKmru3LM|youtube/​Проникновение в Docker с примерами,​ Дмитрий Столяров,​ Flant]]   * [[https://​youtu.be/​hdVNKmru3LM|youtube/​Проникновение в Docker с примерами,​ Дмитрий Столяров,​ Flant]]
   * [[https://​www.upguard.com/​articles/​docker-vs-lxc|Docker vs LXC]]   * [[https://​www.upguard.com/​articles/​docker-vs-lxc|Docker vs LXC]]
-  * [[https://​www.digitalocean.com/​community/​tutorials/​how-to-install-and-use-docker-on-ubuntu-20-04-ru|Установка и использование Docker в Ubuntu 20.04]] 
   * [[https://​youtu.be/​QF4ZF857m44|youtube/​Артем Матяшов/​Основы Docker. Большой практический выпуск]]   * [[https://​youtu.be/​QF4ZF857m44|youtube/​Артем Матяшов/​Основы Docker. Большой практический выпуск]]
  
Line 14: Line 13:
 ===== Установка ===== ===== Установка =====
  
-==== Ubuntu ====+==== Ubuntu/​Debian ​====
  
   * [[https://​docs.docker.com/​engine/​install/​ubuntu/​|Install Docker Engine on Ubuntu]]   * [[https://​docs.docker.com/​engine/​install/​ubuntu/​|Install Docker Engine on Ubuntu]]
 +  * [[https://​docs.docker.com/​engine/​installation/​linux/​docker-ce/​debian/​|Get Docker CE for Debian]]
 <​code>​ <​code>​
 # apt install docker.io # apt install docker.io
 </​code>​ </​code>​
-==== Debian ==== 
  
-  * [[https://​docs.docker.com/​engine/​installation/​linux/​docker-ce/​debian/​|Get Docker CE for Debian]] 
  
-=== Debian 10 ===+==== Настройка registry-mirrors ​==== 
 + 
 +  * [[https://​habr.com/​ru/​news/​818177/​|Docker hub перестал работать в России]]
  
 <​code>​ <​code>​
-apt install ca-certificates curl gnupg lsb-release+cat /​etc/​docker/​daemon.json 
 +</​code><​code>​ 
 +
 +  "​registry-mirrors":​ ["​https://​mirror.gcr.io"​] 
 +
 +</​code>​
  
-# curl -fsSL https://​download.docker.com/​linux/​debian/​gpg | gpg --dearmor -o /​usr/​share/​keyrings/​docker-archive-keyring.gpg+==== Настройка загрузки образов через proxy ====
  
-# echo "​deb ​[arch=$(dpkg --print-architecture) signed-by=/​usr/​share/​keyrings/​docker-archive-keyring.gpghttps://​download.docker.com/​linux/​debian $(lsb_release -cs) stable"​ | sudo tee /​etc/​apt/​sources.list.d/​docker.list+  * [[Переменные окружения]]
  
-apt update+<​code>​ 
 +systemctl edit docker.service 
 +</​code><​code>​ 
 +... 
 +[Service] 
 +#​Environment="​http_proxy=http://​proxy.isp.un:​3128/"​ 
 +Environment="​https_proxy=http://​proxy.isp.un:​3128/"​ 
 +Environment="​no_proxy=localhost,​127.0.0.1,​isp.un,​corpX.un"​ 
 +... 
 +</​code><​code>​ 
 +# systemctl daemon-reload
  
-apt install ​docker-ce docker-ce-cli containerd.io+service ​docker ​restart
 </​code>​ </​code>​
  
 ==== Тестирование установки ==== ==== Тестирование установки ====
 +
 <​code>​ <​code>​
 # systemctl status docker # systemctl status docker
  
 # docker info # docker info
 +</​code>​
 +==== Запуск контейнеров ====
  
 +  * [[https://​stackoverflow.com/​questions/​41694329/​docker-run-override-entrypoint-with-shell-script-which-accepts-arguments|Docker run override entrypoint with shell script which accepts arguments]]
 +  * Запуск сервиса TACACS+ в [[Сервис TACACS+#​Docker]]
 +
 +<​code>​
 # docker run hello-world # docker run hello-world
 +
 +# docker events --since '​10m'​
 </​code>​ </​code>​
  
Line 57: Line 81:
  
   * [[https://​www.baeldung.com/​ops/​docker-image-layers-sizes|Finding the Layers and Layer Sizes for a Docker Image]]   * [[https://​www.baeldung.com/​ops/​docker-image-layers-sizes|Finding the Layers and Layer Sizes for a Docker Image]]
 +  * [[https://​stackoverflow.com/​questions/​37966973/​what-is-the-difference-between-the-size-and-the-virtual-size-of-the-docker-image|What is the difference between the size and the virtual size of the docker images?]]
   * [[https://​docs.docker.com/​engine/​reference/​commandline/​system_prune/​|docker system prune - Remove unused data]]   * [[https://​docs.docker.com/​engine/​reference/​commandline/​system_prune/​|docker system prune - Remove unused data]]
   * [[Сервис Grafana]]   * [[Сервис Grafana]]
 ==== Обзор и удаление ==== ==== Обзор и удаление ====
 +
 +  * [[https://​forums.docker.com/​t/​why-arent-base-layer-images-listed-in-docker-image-ls-a/​139044/​5|Why aren’t base layer images listed in `docker image ls -a`?]]
  
 <​code>​ <​code>​
 # docker images # docker images
  
-# docker ps -a+# docker ps -a #--size
 # docker container ls -a # docker container ls -a
 +# docker container stats
  
 # docker start -i NNNNNNNNNNN # docker start -i NNNNNNNNNNN
Line 77: Line 105:
 # docker rmi -f $(docker images -aq) # docker rmi -f $(docker images -aq)
  
-# docker system ​prune+# docker system ​df
  
-# docker system prune -a --volumes+# docker system prune 
 +# docker system prune -a #--volumes
 </​code>​ </​code>​
  
Line 95: Line 124:
  
  
-==== Создание ​контейнера для приложения вручную ====+==== Создание образа для приложения вручную ====
  
  
Line 150: Line 179:
  
   * [[#​Запуск в режиме демона и подключение к контейнеру]] из полученного образа   * [[#​Запуск в режиме демона и подключение к контейнеру]] из полученного образа
-==== Создание ​контейнера для приложения с использованием Dockerfile ====+==== Создание образа для приложения с использованием Dockerfile ==== 
 + 
 +  * [[https://​habr.com/​ru/​companies/​slurm/​articles/​329138/​|ENTRYPOINT vs CMD: назад к основам]]
  
   * [[Сервис TACACS+]]   * [[Сервис TACACS+]]
  
 +=== Приложение bash webd ===
 <​code>​ <​code>​
-server# mkdir /root/webd/ && cd /root/webd/+server# mkdir -p /root/webd/ && cd /root/webd/
   или   или
 gitlab-runner@server:​~$ mkdir -p ~/​webd/​webd/​ && cd ~/​webd/​webd/​ gitlab-runner@server:​~$ mkdir -p ~/​webd/​webd/​ && cd ~/​webd/​webd/​
  
 server# cp /​usr/​local/​sbin/​webd . server# cp /​usr/​local/​sbin/​webd .
 +lan:~/webd# scp server:/​usr/​local/​sbin/​webd .
 или или
 </​code>​ </​code>​
Line 179: Line 211:
   ​   ​
 if [ "​$MYMODE"​ = '​TEST'​ ]; then if [ "​$MYMODE"​ = '​TEST'​ ]; then
-  ​bash      # not work in k8s+  ​sleep 3 
 +  curl localhost && exit 0 || exit 1
 else else
   tail -f /​var/​log/​webd.log   tail -f /​var/​log/​webd.log
Line 186: Line 219:
 server# cat Dockerfile server# cat Dockerfile
 </​code><​code>​ </​code><​code>​
-#FROM debian:buster +#FROM debian 
-FROM debian:​bullseye+#FROM debian:​bullseye 
 +FROM debian:​bookworm
  
 RUN cp /​usr/​share/​zoneinfo/​Etc/​GMT-3 /​etc/​localtime \ RUN cp /​usr/​share/​zoneinfo/​Etc/​GMT-3 /​etc/​localtime \
     && apt-get update \     && apt-get update \
-    && apt-get install -y inetutils-inetd file \+    && apt-get install -y inetutils-inetd file curl\
     && apt-get clean \     && apt-get clean \
     && echo 'www stream tcp nowait root /​usr/​local/​sbin/​webd webd' > /​etc/​inetd.conf     && echo 'www stream tcp nowait root /​usr/​local/​sbin/​webd webd' > /​etc/​inetd.conf
Line 208: Line 242:
 </​code><​code>​ </​code><​code>​
 # docker build -t test/webd . # docker build -t test/webd .
 +
 +# docker run --rm -e MYMODE=TEST test/webd
  
 # docker history test/webd # docker history test/webd
 </​code>​ </​code>​
  
-=== Dockerfile Multistage Building ​===+  * [[#​Запуск в режиме демона и подключение к контейнеру]] 
 + 
 +=== Приложение python pywebd === 
 + 
 +  * [[Язык программирования Python#​Flask Gunicorn]] 
 + 
 +  * [[https://​stackoverflow.com/​questions/​49955097/​how-do-i-add-a-user-when-im-using-alpine-as-a-base-image|How do I add a user when I'm using Alpine as a base image?]] 
 + 
 +<​code>​ 
 +:~/pywebd$ ### mkdir etc/; cp -rv /​etc/​pywebd/​ etc/ 
 +:~/pywebd$ ### echo '<​h1>​Hello from pywebd</​h1>'​ > index.html 
 + 
 +:~/pywebd$ dpkg -l | grep python  
 + 
 +:~/pywebd$ cat Dockerfile 
 +</​code><​code>​ 
 +FROM python:​3.11-alpine 
 + 
 +#RUN pip install --root-user-action=ignore --upgrade pip 
 + 
 +#RUN adduser -D myuser 
 +#USER myuser 
 +#WORKDIR /​home/​myuser 
 + 
 +COPY requirements.txt . 
 +#COPY --chown=myuser:​myuser requirements.txt . 
 + 
 +#ENV PATH="/​home/​myuser/​.local/​bin:​${PATH}"​ 
 + 
 +RUN pip install -r requirements.txt 
 +#RUN pip install --user -r requirements.txt 
 + 
 +COPY . . 
 +#COPY --chown=myuser:​myuser . . 
 + 
 +#COPY --chown=myuser:​myuser app.py . 
 +### COPY --chown=myuser:​myuser etc/pywebd/ /​etc/​pywebd/​ 
 +### COPY --chown=myuser:​myuser index.html /var/www/ 
 +### ADD www.tgz /var/ 
 + 
 +### ENV PYWEBD_PORT=4080 
 + 
 +### EXPOSE 4080 
 + 
 +ENTRYPOINT ["​python"​] 
 +CMD ["​app.py"​] 
 +</​code><​code>​ 
 +:~/pywebd$ time docker build -t pywebd . 
 + 
 +:~/pywebd$ ### docker run -ti --rm --entrypoint /bin/sh pywebd 
 +:~/pywebd$ ### docker run -p 4443 -d --rm pywebd 
 + 
 +:~/pywebd$ docker run -d --rm -p 4088 -e PYWEBD_PORT=4088 -v /​etc/​pywebd:/​etc/​pywebd -v /​var/​www/:/​var/​www/​ --name pywebd01 pywebd 
 +</​code>​ 
 + 
 +  * [[#​Запуск в режиме демона и подключение к контейнеру]] 
 + 
 +=== Приложение python pywebd2 === 
 + 
 +  * [[Язык программирования Python#​FastAPI Uvicorn]] 
 + 
 +<​code>​ 
 +~/pywebd2# cat Dockerfile 
 +</​code><​code>​ 
 +FROM python:​3.11-alpine 
 + 
 +RUN pip install --root-user-action=ignore --upgrade pip 
 + 
 +RUN pip install poetry 
 + 
 +RUN adduser -D myuser 
 +USER myuser 
 +WORKDIR /​home/​myuser 
 + 
 +COPY --chown=myuser:​myuser . . 
 + 
 +RUN poetry install 
 + 
 +ENTRYPOINT ["​poetry",​ "​run"​] 
 +CMD ["​python3",​ "​app.py"​] 
 +</​code><​code>​ 
 +~/pywebd2# time docker build -t pywebd2 . 
 + 
 +# docker run -d -p 8000 --rm pywebd2 
 + 
 +# docker run -d -p 4080 -e PYWEBD_MESSAGE='​Hello Docker'​ --rm pywebd2 uvicorn app:app --reload --host 0.0.0.0 --port 4080 
 +</​code>​ 
 + 
 +=== Приложение golang gowebd === 
 + 
 +== Dockerfile Multistage Building ==
  
   * [[Язык программирования Golang]]   * [[Язык программирования Golang]]
Line 222: Line 348:
 </​code><​code>​ </​code><​code>​
 FROM golang FROM golang
-#FROM golang ​as builder+#FROM golang ​AS builder
  
 WORKDIR /build WORKDIR /build
Line 233: Line 359:
 #FROM alpine #FROM alpine
 #COPY --from=builder /gowebd /gowebd #COPY --from=builder /gowebd /gowebd
 +
 +EXPOSE 80
  
 ENTRYPOINT ["/​gowebd"​] ENTRYPOINT ["/​gowebd"​]
Line 242: Line 370:
  
 student@client1:​~/​gowebd$ docker run -d -p 8080:80 --rm gowebd student@client1:​~/​gowebd$ docker run -d -p 8080:80 --rm gowebd
 +
 +student@client1:​~/​gowebd$ docker run -d --rm -p 80 --name gowebd01 gowebd
 </​code>​ </​code>​
 +
 +== docker buildx ==
 +
 +  * [[https://​doroshev.com/​blog/​docker-mount-type-cache/​|Docker Buildkit: Правильное использование --mount=type=cache]]
 +
 +<​code>​
 +ubuntu# apt install docker-buildx
 +  или
 +docker# apt install docker-buildx-plugin
 +
 +ubuntu:​~/​gowebd#​ cat Dockerfile
 +</​code><​code>​
 +...
 +RUN --mount=type=cache,​target="/​root/​.cache/​go-build"​ go build -o /gowebd
 +...
 +</​code><​code>​
 +ubuntu:​~/​gowebd#​ time docker build -t gowebd .
 +...
 +real    0m6.686s
 +</​code>​
 +
 +== Smoke test ==
 +
 +<​code>​
 +$ MY_ID=$(docker run -d --rm gowebd)
 +$ MY_IP=$(docker inspect -f '​{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'​ $MY_ID)
 +$ docker run --rm alpine/curl -sS $MY_IP
 +$ docker stop $MY_ID
 +</​code>​
 +
 +  * [[#​Запуск в режиме демона и подключение к контейнеру]]
 ==== Запуск в режиме демона и подключение к контейнеру ==== ==== Запуск в режиме демона и подключение к контейнеру ====
  
Line 258: Line 419:
  
   * [[Технология cgroup]]   * [[Технология cgroup]]
 +  * [[https://​www.baeldung.com/​ops/​docker-memory-limit|Setting Memory And CPU Limits In Docker]]
 +  * [[https://​stackoverflow.com/​questions/​72185669/​what-is-the-real-memory-available-in-docker-container|What is the real memory available in Docker container?​]]
   * [[Технология namespaces]]   * [[Технология namespaces]]
 +
  
 <​code>​ <​code>​
Line 267: Line 431:
  
 server# cat /​proc/<​PID>/​cgroup server# cat /​proc/<​PID>/​cgroup
- 
 server# systemd-cgls server# systemd-cgls
  
-server# cat /​sys/​fs/​cgroup/​memory/​docker/​NNNNNNNNNNNNNNNNNNNNNNNNNNNNN/​memory.max_usage_in_bytes+cgroup-v1# cat /​sys/​fs/​cgroup/​memory/​docker/​NNNNNNNNNNNNNNNNNNNNNNNNNNNNN/​memory.max_usage_in_bytes 
 +cgroup-v2# cat /​sys/​fs/​cgroup/​system.slice/​docker-NNNNNNNNNNNNNNNNNNNNNNNNNNNNN.scope/​memory.max
  
 server# docker stats server# docker stats
Line 276: Line 440:
 server# lsns | grep start.sh server# lsns | grep start.sh
 </​code>​ </​code>​
-=== Анализ параметров запущенного контейнера ​===+== Анализ параметров запущенного контейнера ==
 <​code>​ <​code>​
 server# docker inspect webd01 server# docker inspect webd01
  
-server# docker inspect ​webd01 ​-f {{.NetworkSettings.IPAddress}}+server# docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'​ webd01 ​
  
 server# wget -qO - http://​172.17.0.2/​ server# wget -qO - http://​172.17.0.2/​
Line 296: Line 460:
  
 host browser -> http://​server.corpX.un:​8000/​ host browser -> http://​server.corpX.un:​8000/​
 +</​code>​ 
 +== Анализ параметров запущенного контейнера изнутри == 
 +<​code>​
 server# docker attach webd01 ​ server# docker attach webd01 ​
  
-server# docker exec -it webd01 ​bash+server# docker exec -it webd01 ​sh
  
 webd01# ps ax webd01# ps ax
Line 306: Line 472:
 webd01# cat /​proc/​1/​cmdline webd01# cat /​proc/​1/​cmdline
  
-webd01# ​ss -tpan+webd01# ​ip a
   или   или
 +webd01# cat /​proc/​net/​fib_trie
 +
 +webd01# ss -tpan 
 +
 +  или ​  ​https://​www.rapidtables.com/​convert/​number/​decimal-to-hex.html
 +
 webd01# cat /​proc/​net/​tcp webd01# cat /​proc/​net/​tcp
 webd01# cat /​proc/​net/​tcp6 webd01# cat /​proc/​net/​tcp6
  
 Ctrl+P, Q(still holding Ctrl) Ctrl+P, Q(still holding Ctrl)
 +</​code>​ 
 +== Управление контейнером после запуска == 
 +<​code>​
 server# docker stop webd01 server# docker stop webd01
  
Line 325: Line 499:
  
  
-==== Микросервисы ====+==== Использование готовых образов приложений ​====
  
   * [[https://​hub.docker.com/​search?​type=image|Explore Docker'​s Container Image Repository]]   * [[https://​hub.docker.com/​search?​type=image|Explore Docker'​s Container Image Repository]]
 +
 +=== atmoz/sftp ===
   * [[https://​hub.docker.com/​r/​atmoz/​sftp|atmoz/​sftp]]   * [[https://​hub.docker.com/​r/​atmoz/​sftp|atmoz/​sftp]]
  
Line 335: Line 511:
 # chown -R 10003 /var/www # chown -R 10003 /var/www
  
-# docker run --name sftp01 -v /​var/​www:/​home/​user3/​www -p 2222:22 -d atmoz/sftp user3:​password3:​10003+# docker run --name sftp01 -v /​var/​www:/​home/​user3/​www -p 2222:22 -d --rm atmoz/sftp user3:​password3:​10003
  
-# docker exec -it sftp01 bash+# ###docker exec -it sftp01 bash
 </​code>​ </​code>​
 Ctrl+D Ctrl+D
Line 345: Line 521:
 # sftp -P 2222 user3@localhost # sftp -P 2222 user3@localhost
 </​code>​ </​code>​
-  * [[Сервис SSH#Настройка ssh клиента]]+  * [[Сервис SSH#WinSCP]]
 <​code>​ <​code>​
 # docker logs sftp01 # docker logs sftp01
Line 356: Line 532:
   * [[https://​habr.com/​ru/​company/​ruvds/​blog/​450312/​|Руководство по Docker Compose для начинающих]]   * [[https://​habr.com/​ru/​company/​ruvds/​blog/​450312/​|Руководство по Docker Compose для начинающих]]
   * [[https://​stackoverflow.com/​questions/​39663096/​docker-compose-creating-multiple-instances-for-the-same-image|docker-compose creating multiple instances for the same image]]   * [[https://​stackoverflow.com/​questions/​39663096/​docker-compose-creating-multiple-instances-for-the-same-image|docker-compose creating multiple instances for the same image]]
 +  * [[https://​docs.docker.com/​compose/​how-tos/​lifecycle/​|Using lifecycle hooks with Compose]]
  
   * [[Инструмент GitLab#​Установка через docker-compose]] GitLab   * [[Инструмент GitLab#​Установка через docker-compose]] GitLab
   * Установка через [[Сервис Keycloak#​docker-compose]] Keycloak   * Установка через [[Сервис Keycloak#​docker-compose]] Keycloak
- 
  
 <​code>​ <​code>​
 # apt install docker-compose # apt install docker-compose
- 
-debian11# service docker start 
  
 # cat docker-compose.yml # cat docker-compose.yml
Line 371: Line 545:
 services: services:
   webd:   webd:
-    ​image: ​test/webd +#    ​image: ​server.corpX.un:​5000/​student/webd:ver1.N 
-    build: webd/ +    ​image:​ pywebd 
-    ​ports+   ​build:​ webd/ 
-      - "8000:80"+   entrypoint/start.sh 
 +#    ports:
 #      - "​80"​ #      - "​80"​
     volumes:     volumes:
 +      - /​etc/​pywebd/:/​etc/​pywebd/​
       - /​var/​www/:/​var/​www/​       - /​var/​www/:/​var/​www/​
 #      - vol1:/​var/​www/​ #      - vol1:/​var/​www/​
 +    deploy:
 +      mode: replicated
 +      replicas: 3
  
 #    environment:​ #    environment:​
-#      - MYMODE=TEST+#      - PYWEBD_PORT=80
 #    stdin_open: true #    stdin_open: true
-    ​tty: true +#    ​tty: true 
-    +
   sftp:   sftp:
     image: atmoz/sftp     image: atmoz/sftp
Line 396: Line 575:
 #  vol1: #  vol1:
 </​code><​code>​ </​code><​code>​
-# docker-compose build+# ###​docker-compose build
  
 # docker-compose up -d # docker-compose up -d
 +
 +# docker-compose logs -f webd
  
 # docker-compose stop # docker-compose stop
Line 408: Line 589:
 # docker-compose rm # docker-compose rm
  
-# docker volume ​rm root_vol1+# docker volume ​inspect ​root_vol1
  
-gitlab-runner@server:​~/​webd$ ​docker-compose up -d --scale webd=N+docker ​volume rm root_vol1
  
-gitlab-runner@server:​~/​webd$ docker ps+# docker-compose up -d --scale ​webd=N
  
-gitlab-runner@server:​~/​webd$ ​docker-compose down+docker ​ps
 </​code><​code>​ </​code><​code>​
 gitlab-runner@server:​~/​webd$ cat docker-compose.yml gitlab-runner@server:​~/​webd$ cat docker-compose.yml
Line 439: Line 620:
 ===== Локальные репозитории ===== ===== Локальные репозитории =====
  
 +==== Копирование образов ====
 +<​code>​
 +server# docker save -o test-webd.tgz test/webd
 +
 +lan# scp server:​test-webd.tgz .
 +
 +lan# docker load -i test-webd.tgz
 +</​code>​
 ==== Insecure Private Registry ==== ==== Insecure Private Registry ====
  
Line 452: Line 641:
 </​code><​code>​ </​code><​code>​
 # service docker restart # service docker restart
 +</​code>​
 +
 +==== Аутентификация в Registry ====
 +
 +<​code>​
 +gitlab-runner@server:​~$ docker login
  
 gitlab-runner@server:​~$ docker login http://​server.corpX.un:​5000 gitlab-runner@server:​~$ docker login http://​server.corpX.un:​5000
Line 467: Line 662:
  
   * [[https://​serverfault.com/​questions/​703344/​how-to-remove-an-image-tag-in-docker-without-removing-the-image-itself|How to remove an image tag in Docker without removing the image itself?]]   * [[https://​serverfault.com/​questions/​703344/​how-to-remove-an-image-tag-in-docker-without-removing-the-image-itself|How to remove an image tag in Docker without removing the image itself?]]
 +==== Использование Private Registry ====
  
 <​code>​ <​code>​
Line 472: Line 668:
  
 gitlab-runner@server:​~$ docker tag test/webd server.corpX.un:​5000/​student/​webd gitlab-runner@server:​~$ docker tag test/webd server.corpX.un:​5000/​student/​webd
-gitlab-runner@server:​~$ docker tag test/webd server.corpX.un:​5000/​student/​webd:​1.1+gitlab-runner@server:​~$ docker tag test/webd server.corpX.un:​5000/​student/​webd:​ver1.1
  
 gitlab-runner@server:​~$ docker images gitlab-runner@server:​~$ docker images
  
 gitlab-runner@server:​~$ docker push server.corpX.un:​5000/​student/​webd gitlab-runner@server:​~$ docker push server.corpX.un:​5000/​student/​webd
-gitlab-runner@server:​~$ docker push server.corpX.un:​5000/​student/​webd:​1.1+gitlab-runner@server:​~$ docker push server.corpX.un:​5000/​student/​webd:​ver1.1
 ... ...
 node1_2_3# docker run --name webd01 --hostname webd01 -itd --rm -p 8000:80 server.corpX.un:​5000/​student/​webd node1_2_3# docker run --name webd01 --hostname webd01 -itd --rm -p 8000:80 server.corpX.un:​5000/​student/​webd
Line 484: Line 680:
 </​code>​ </​code>​
  
-==== Secure Private Registry ==== 
  
-  * [[Пакет OpenSSL#​Импорт сертификата центра сертификации]] +==== Использование образа Docker Registry on-premise ====
- +
-<​code>​ +
-# docker pull server.corp13.un:​5050/​student/​gowebd +
- +
-# docker login server.corp13.un:​5050 +
-</​code>​ +
-==== Использование образа Docker Registry ​и on-premise ​CA ====+
  
   * [[https://​docs.docker.com/​registry/​|Docker Registry]]   * [[https://​docs.docker.com/​registry/​|Docker Registry]]
 +  * [[https://​stackoverflow.com/​questions/​25436742/​how-to-delete-images-from-a-private-docker-registry?​newreg=e655d7146b114f0f9b88b1132990f346|How to delete images from a private docker registry?]]
  
 <​code>​ <​code>​
-gate# docker run -d -p 5000:5000 -v /​root:/​certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/​certs/​gate.crt -e REGISTRY_HTTP_TLS_KEY=/​certs/​gate.key --name registry registry:2+# docker run -d -p 5000:5000 -v /​root:/​certs ​
 +  ​-e REGISTRY_HTTP_TLS_CERTIFICATE=/​certs/​wild.crt 
 +  ​-e REGISTRY_HTTP_TLS_KEY=/​certs/​wild.key 
 +  ​--name registry ​--restart=always ​registry:2
  
-node1cp ~vagrant/​gate.crt /etc/docker/​certs.d/​gate.corp13.un\:5000/ca.crt+# docker ​tag gowebd server.corp13.un:​5000/​student/​gowebd
  
-node1service ​docker ​restart+# docker ​push server.corp13.un:​5000/​student/​gowebd
  
-node1docker tag val/webd:latest gate.corp13.un:​5000/​webd+curl https://server.corp13.un:​5000/​v2/​_catalog 
 +{"​repositories":​["​student/​gowebd"​]}
  
-node1# docker push gate.corp13.un:​5000/​webd +# curl https://server.corp13.un:​5000/​v2/​student/gowebd/tags/list
- +
-node1# curl --insecure -X GET https://gate.corp13.un:​5000/​v2/​_catalog +
-{"​repositories":​["​webd"​]} +
- +
-val@gitlab-vkube:​~$ curl -s https://​gitlab-vkube.bmstu.ru:​5000/​v2/​postgresql/​tags/​list ​| jq +
-+
-  "​name":​ "​postgresql",​ +
-  "​tags":​ [ +
-    "​13"​ +
-  ] +
-}+
 </​code>​ </​code>​
  
 ===== Дополнительная информация ===== ===== Дополнительная информация =====
  
 +==== Инструмент kaniko ====
 +
 +  * [[https://​habr.com/​ru/​companies/​slurm/​articles/​436126/​|Kubernetes:​ сборка образов Docker в кластере,​ можно использовать kaniko]]
 +
 +<​code>​
 +~/gowebd# time docker run \
 +  -v $(pwd):/​workspace \
 +  -v ~/​.docker/​config.json:/​kaniko/​.docker/​config.json \
 +  gcr.io/​kaniko-project/​executor:​latest \
 +  --skip-tls-verify --log-timestamp \
 +  --dockerfile=./​Dockerfile \
 +  --context=/​workspace \
 +  --destination=server.corpX.un:​5000/​student/​gowebd
 +</​code><​code>​
 +или, интерактивно:​
 +</​code><​code>​
 +root@ubuntu:​~/​gowebd#​ docker run -it \
 +  -v $(pwd):/​workspace --rm --entrypoint "/​bin/​sh"​ \
 +  -v ~/​.docker/​config.json:/​kaniko/​.docker/​config.json \
 +  gcr.io/​kaniko-project/​executor:​debug ​
 +
 +# time /​kaniko/​executor --skip-tls-verify --log-timestamp \
 +  --dockerfile=./​Dockerfile \
 +  --context=/​workspace \
 +  --destination=server.corpX.un:​5000/​student/​gowebd
 +</​code><​code>​
 +тестируем результат:​
 +</​code><​code>​
 +# docker run --pull=always --name gowebd -itd --rm \
 +  -p 8000:80 server.corpX.un:​5000/​student/​gowebd
 +</​code>​
 ==== Приложение apwebd ==== ==== Приложение apwebd ====
  
Line 612: Line 825:
 echo "<​pre>";​ env; echo "</​pre>"​ echo "<​pre>";​ env; echo "</​pre>"​
 </​code><​code>​ </​code><​code>​
 +~/apwebd# chmod +x rootfs/​usr/​lib/​cgi-bin/​apwebd rootfs/​start.sh
 +
 ~/apwebd$ docker build -t server.corp13.un:​5000/​student/​apwebd:​ver1.2 . ~/apwebd$ docker build -t server.corp13.un:​5000/​student/​apwebd:​ver1.2 .
  
технология_docker.1712838429.txt.gz · Last modified: 2024/04/11 15:27 by val