Введение в использование частного хранилища реестра докеров

Docker

Сценарии использования Docker, преимущества и недостатки

Цель этой статьи не в этом. O(∩_∩)O, ха-ха~. Если вы хотите узнать об этом, вы можете проверить этоздесь.

Зачем создавать собственный зеркальный репозиторий

Конечно, облако Alibaba уже есть служба склада реестра, которая довольно удобна. Но некоторые люди думают, что лучше сохранить этот вид частного изображения самостоятельно. Что мы говорим здесь, - построить склад самостоятельно, чтобы управлять частным образом. После того, как тест завершен, отправьте его в частный реестр, а затем потяните его из реестра в Интернете для развертывания. Он используется таким же образом, как и сервис регистрации Clibaba Clouds Clouds.

окрестности:

ubuntu 16.04

Метод зашифрованного развертывания реестра Docker2.x

Установка среды docker здесь не будет описана, о ней рассказано во многих статьях в Интернете.

Извлеките образ реестра, команда:

docker pull registry2.2

Создайте самоподписанный сертификат:

cd ~/;

mkdir registry && cd registry && mkdir certs && cd certs;

openssl req -x509 -days 3650 -subj '/CN=reg.lajiaochaorou.com/' -nodes -newkey rsa:2048 -keyout registry.key -out registry.crt;

вreg.lajiaochaorou.comЯ даю этому складу данное доменное имя, вы можете написать что угодно.

Сгенерировать пользователя и пароль:

cd ~/registry&& mkdir auth;

docker run --entrypoint htpasswd registry:2.2 -Bbn lajiaochaorou 123456 > auth/htpasswd;

Имя пользователя и пароль, сгенерированные здесь, — lajiaochaorou:123456, вы можете написать что-нибудь еще.

Создайте каталог монтирования:

mkdir –p ~/данные/реестр2

Запустите сервер реестра:

docker run -d –p 5000:5000 --restart=always --name registry \
-v `pwd`/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
-v ~/data/registry2:/var/lib/registry    registry:2.2

Поместите приведенную выше команду в скрипт start_reg.sh (как хотите) и поместите его в ~/registry. --restart=всегда означает автозапуск.

Настраиваем клиент (то есть наш хост):

Создайте каталог сертификата:

mkdir -p /etc/docker/certs.d/reg.lajiaochaorou.com:5000

Скачать сертификат:

cp ~/registry/certs/registry.crt /etc/docker/certs.d/reg.lajiaochaorou.com:5000

DNS:

echo 192.168.215.*** reg.lajiaochaorou.com >> /etc/hosts (здесь ip пишет ip хоста)

Вход в реестр:

docker login reg.lajiaochaorou.com:5000

Введите имя пользователя и пароль по мере необходимости (здесь я lajiaochaorou: 123456)

Успешный логин можно хранить и вытащить в частном порядке! Реестр связан.

Docker pull/push образ

Прежде чем мы отправим образ в частный репозиторий, нам нужно изменить имя образа на reg.lajiaochaorou.com:5000/imagename, иначе система подумает, что вы хотите отправить образ в общедоступный репозиторий, и вам будет предложено, что у вас нет разрешения. Заказ:

docker tag ubuntu reg.lajiaochaorou.com:5000/ubuntu

docker push reg.lajiaochaorou.com:5000/ubuntu

В качестве примера выше показано изменение образа ubuntu.На практике мы обычно используем собственный образ проекта.

После успешного выполнения образ отправляется в репозиторий.

Давайте удалим это зеркало reg.lajiaochaorou.com:5000/ubuntu и попробуем:

docker rmi reg.lajiaochaorou.com:5000/ubuntu

Удаление прошло успешно, попробуем снова снести это зеркало вниз:

docker pull reg.lajiaochaorou.com:5000/ubuntu

Успех вниз, мы запускаем это зеркало:

запуск докера – это reg.lajiaochaorou.com:5000/ubuntu

Должен выскочить псевдотерминал, а файловая система в это время уже является файловой системой контейнера (ubuntu), так что вы можете легко оперировать файлами в контейнере. Например:

touch test.c
echo 'hello world' > hello.txt

На данный момент мы выполняем вне контейнера:

идентификатор контейнера diff docker | имя контейнера;

Вы можете видеть, что добавлено два файла.

Лучше воспользоваться возможностью представить новое изображение:

идентификатор контейнера фиксации докера | имя контейнера reg.lajiaochaorou.com: 5000/ubuntu2.0 (новое имя образа)

На этом этапе давайте посмотрим, какие зеркала сейчас:

docker images

Как видите, новое зеркало reg.lajiaochaorou.com:5000/ubuntu2.0 создано!

Мы запускаем этот новый образ:

запуск докера – это reg.lajiaochaorou.com:5000/ubuntu2.0

После выхода псевдотерминала давайте ls и мы увидим, что два файла touch и echo действительно находятся в этой файловой системе.

Выше перечислены все способы использования реестра.Недостаток в том, что нет отображения картинки. Скриншотов вовремя не было, так что все.

Добавьте несколько общих команд докера

docker run: 运行一个容器
-it   通常it两个参数一起用的,表示以交互模式执行,并分配一个伪终端
-v   挂载目录,本地目录:容器目录
--name 给容器一个名字,不指定就随机产生
-e    设置环境变量
--rm   容器退出之后就删除

docker rm: 删除一个容器
docker rm 容器名|容器id

docker rmi:删除一个镜像
	docker rmi 镜像名
docker ps: 查看正在运行的容器
	docker ps –a :产看所有容器
docker kill :杀死一个运行中的容器,也可以用-s参数向容器发送信号
docker stop:结束一个运行中的容器
docker exec : 在运行中的容器执行命令,通常可以-t分配伪终端达到进入容器的目的
docker commit: 提交一个容器成新的镜像,可以-m 给出说明,-a给出作者
docker start: 启动一个容器
docker inspect: 查看镜像|容器的元数据
docker build: 编译一个新的镜像,与commit功能类似

Добавьте использование Dockerfile

Dockfile — это скрипт, интерпретируемый программой Docker.Dockerfile состоит из инструкций, одна за другой, и каждая инструкция соответствует команде в Linux. Программа Docker переводит эти инструкции Dockerfile в настоящие команды Linux.Это основной способ упаковки изображений.Командное объяснение:

FROM    //基于哪个镜像
MAINTAINER   //创建人
CMD       //容器启动时执行的命令,Dockerfile只能有一条CMD
USER        //用哪个用户跑container
ENV          //设置环境变量
ADD            //将文件<src>拷贝到container的文件系统对应的路径<dest>
COPY       //与ADD类似,COPY只能是本地数据
VOLUME        //将本地文件夹挂载到container容器中
WORKDIR       //切换目录

пример:

FROM busybox
ENV foo /bar
WORKDIR ${foo}   # WORKDIR /bar
ADD . $foo       # ADD . /bar
COPY \$foo /quux # COPY $foo /quux

Используйте команду:

Docker Build -T Ubuntu5.0.

Создайте новый образ с именем ubuntu5.0.Если вы не укажете путь к файлу Docker с параметром -f, будет использоваться файл Dockerfile из текущего каталога.