wxvirus wxvirus
首页
  • Go文章

    • Go语言学习
  • Rust

    • Rust学习
  • Java

    • 《Java》
  • Python文章

    • Python
  • PHP文章

    • PHP设计模式
  • 学习笔记

    • 《Git》
  • HTML
  • CSS
  • JS
  • 技术文档
  • GitHub技巧
  • 刷题
  • 博客搭建
  • 算法学习
  • 架构设计
  • 设计模式
  • 学习
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

无解的lifecycle

let today = new Beginning()
首页
  • Go文章

    • Go语言学习
  • Rust

    • Rust学习
  • Java

    • 《Java》
  • Python文章

    • Python
  • PHP文章

    • PHP设计模式
  • 学习笔记

    • 《Git》
  • HTML
  • CSS
  • JS
  • 技术文档
  • GitHub技巧
  • 刷题
  • 博客搭建
  • 算法学习
  • 架构设计
  • 设计模式
  • 学习
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

    • Git使用手册
    • Markdown使用教程
    • npm常用命令
    • vagrant创建centos7虚拟机
    • Linux安装docker
    • docker安装配置mysql
    • docker安装redis
    • docker安装rabbitmq
    • docker安装mongoDB
    • npm packageJson属性详解
    • 构建Docker镜像
    • docker安装yapi
    • docker安装kafka
    • yaml语言教程
    • curl下载pdf
    • Linux安装MySQL8
    • Linux安装PHP7和Swoole扩展
    • Linux安装配置Nginx
    • 单机安装redis
    • 部署自带镜像仓库
      • 仓库
      • 常用操作
        • 查看镜像列表
        • 如果获取镜像
        • 如何通过镜像启动容器
        • 如何知道容器内部运行了什么程序
        • docker 怎么知道容器启动后该执行什么命令
        • 导出镜像到文件中
        • 从文件中加载镜像
        • 删除镜像
        • 容器数据持久化
        • 主机与容器之间拷贝数据
        • 查看容器日志
        • 查看容器或者镜像明细
      • 部署镜像仓库
        • 推送本地镜像到镜像仓库中
    • portainer的安装
    • centos7安装redis6文档记录
    • redis缓存设计原理
    • redis的 cluster 集群
    • redis的配置
  • GitHub技巧

  • 刷题

  • 博客搭建

  • 算法学习

  • 架构设计

  • 设计模式

  • 技术
  • 技术文档
wxvirus
2022-12-08

部署自带镜像仓库

# 核心要素以及常用操作详解

三大核心要素:镜像、容器、仓库

# 仓库

前面 2 个不多赘述,主要说个仓库

仓库是存放镜像的地方

  • 公有仓库,Docker Hub,阿里,网易...
  • 私有仓库,企业内部搭建
    • Docker Registry,Docker 官方提供的镜像仓库存储服务
    • Harbor, 是 Docker Registry 的更高级封装,它除了提供友好的 Web UI 界面,角色和用户权限管理,用户操作审计等功能
  • 镜像访问地址形式 registry.devops.com/demo/hello:latest,若没有前面的 url 地址,则默认寻找 Docker Hub 中的镜像,若没有 tag 标签,则使用 latest 作为标签。 比如,docker pull nginx,会被解析成 docker.io/library/nginx:latest
  • 公有的仓库中,一般存在这么几类镜像
    • 操作系统基础镜像(centos,ubuntu,suse,alpine)
    • 中间件(nginx,redis,mysql,tomcat)
    • 语言编译环境(python,java,golang)
    • 业务镜像(django-demo...)

容器和仓库不会直接交互,都是以镜像为载体来操作。

# 常用操作

# 查看镜像列表

docker images
1

# 如果获取镜像

# 从远程仓库拉取

docker pull nginx:alpine
docker images
1
2

# 使用 tag 命令

docker tag nginx:alpine xx.xx.xx.xx:5000/nginx:alpine
docker images
1
2

# 本地构建

docker build . -t my-nginx:ubuntu -f Dockerfile
1

# 如何通过镜像启动容器

docker run --name  my-nginx-alpine -d nginx:alpine
1
  • --name:起一个容器的名称
  • -d:以守护进程的模式运行

# 如何知道容器内部运行了什么程序

# 进入容器内部 分配一个 tty 终端
docker exec -it my-nginx-alpine /bin/sh

# 或者是 bin/bash
1
2
3
4

# docker 怎么知道容器启动后该执行什么命令

通过docker build来模拟构建一个nginx镜像

# 创建Dockerfile

# 告诉docker使用哪个基础镜像作为模板,后续命令都以这个镜像为基础
FROM ubuntu

# RUN命令会在上面指定的镜像里执行命令
RUN apt-get update && apt install -y nginx

#告诉docker,启动容器时执行如下命令
CMD ["/usr/sbin/nginx", "-g","daemon off;"]
1
2
3
4
5
6
7
8

# 构建本地镜像

docker build . -t my-nginx:ubuntu -f Dockerfile
1

# 宿主机如何访问容器内服务

# 删掉旧服务,重新启动
docker rm -f my-nginx-alpine
docker run --name my-nginx-alpine -d -p 8080:80 nginx:alpine
curl localhost:8080
1
2
3
4
  • -p:本地端口:容器端口

# docker client 如何与 daemon 通信

# /var/run/docker.sock
docker run --name portainer -d -p 9001:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
1
2

# 导出镜像到文件中

docker save -o nginx-alpine.tar nginx:alpine
1

# 从文件中加载镜像

docker load -i nginx-alpine.tar
1

# 删除镜像

docker rmi nginx:alpine
1

# 容器数据持久化

# 挂载宿主机目录
docker run --name nginx -d -v /opt:/opt nginx:alpine
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d -v /opt/mysql/:/var/lib/mysql mysql:5.7
1
2
3

# 主机与容器之间拷贝数据

# 主机到容器
echo "123">/tmp/test.txt
docker cp /tmp/test.txt nginx:/tmp
docker exec -it nginx cat /tmp/test.txt

# 容器拷贝到主机
docker cp nginx:/tmp/test.txt ./
1
2
3
4
5
6
7

# 查看容器日志

# 查看全部日志
docker logs nginx

# 实时查看最新日志
docker logs -f nginx

# 从最新的100条开始查看
docker logs --tail=100 -f nginx
1
2
3
4
5
6
7
8

# 查看容器或者镜像明细

## 查看容器详细信息,包括容器IP地址等
docker inspect nginx

# 查看镜像明细信息
docker inspect nginx:alpine
1
2
3
4
5

# 部署镜像仓库

文档地址:https://docs.docker.com/registry/ (opens new window)

## 使用docker镜像启动镜像仓库服务
docker run -d -p 5000:5000 --restart always --name registry registry:2

## 默认仓库不带认证,若需要认证,参考https://docs.docker.com/registry/deploying/#restricting-access
1
2
3
4

# 推送本地镜像到镜像仓库中

$ docker tag nginx:alpine localhost:5000/nginx:alpine
$ docker push localhost:5000/nginx:alpine

## 查看仓库内元数据
$ curl -X GET http://内网ip:5000/v2/_catalog
$ curl -X GET http://内网ip:5000/v2/nginx/tags/list

## 镜像仓库给外部访问,不能通过localhost,尝试使用内网地址内网ip:5000/nginx:alpine
$ docker tag nginx:alpine 内网ip:5000/nginx:alpine
$ docker push 内网ip:5000/nginx:alpine
The push refers to repository [内网ip:5000/nginx]
Get https://内网ip:5000/v2/: http: server gave HTTP response to HTTPS client
## docker默认不允许向http的仓库地址推送,如何做成https的,参考:https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry
## 我们没有可信证书机构颁发的证书和域名,自签名证书需要在每个节点中拷贝证书文件,比较麻烦,因此我们通过配置daemon的方式,来跳过证书的验证:
$ cat /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://8xpk5wnt.mirror.aliyuncs.com"
  ],
  "insecure-registries": [
     "内网ip:5000"
  ]
}
$ systemctl restart docker
$ docker push 内网ip:5000/nginx:alpine
$ docker images    # IMAGE ID相同,等于起别名或者加快捷方式
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
内网ip:5000/nginx   alpine              377c0837328f        4 weeks ago
nginx                    alpine              377c0837328f        4 weeks ago
localhost:5000/nginx     alpine              377c0837328f        4 weeks ago
registry                 2                   708bc6af7e5e        2 months ago
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
编辑 (opens new window)
#regstry
上次更新: 2022/12/08, 22:08:26
单机安装redis
portainer的安装

← 单机安装redis portainer的安装→

最近更新
01
redis的配置
03-23
02
redis的 cluster 集群
03-23
03
redis缓存设计原理
03-23
更多文章>
Theme by Vdoing | Copyright © 2021-2023 wxvirus
苏ICP备2021007210号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式