一、简单介绍

  前面已经介绍,可以使用Docker Hub公共仓库,但是大多数情况企业都需要创建一个本地仓库供自己使用。这里介绍几种搭建私库的方法

  私库的好处有几点

    1、节约带宽

    2、可以自己定制系统

    3、更加安全

二、我知道的几种方法

  1、利用官方提供的工具docker-registry来配置私库

    官方提供的镜像,注意这个工具是个镜像,直接下载并使用registry镜像启动docker实例就可以了

  2、利用Harbor-Registry,来搭建私库

    Harbor是一个用于存储Docker镜像的企业级Registry服务

    

三、通过官方docker-registry来配置私库

  1、环境

    docker私库地址:192.168.216.51  web1

    docker服务器地址:192.168.216.52  web2,此节点使用私库服务器来pull/push镜像

  2、拓扑

    

    备注:这里docker hub 就是私库

       docker engine :前面原理篇有介绍 ,是docker架构中的运行引擎,同时也Docker运行的核心模块。它扮演Docker container存储仓库的角色,并且通过执行job的方式来操纵管理这些容器。

  3、安装docker私有仓库

    1)首先安装

      方式1

        也可以下载rpm包安装

          rpm包地址:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

            这里下载的是docker-ce-cli-19.03.2-3.el7.x86_64.rpm

        为了解决依赖,配置本地源

          

[root@web2 yum.repos.d]# mv Centos-.repo ./backup/
[root@web2 yum.repos.d]# ll
total
drwxr-xr-x. root root Sep : backup
drwxr-xr-x. root root Sep : bakcup
-rw-r--r--. root root Sep : docker-rpm.repo
-rw-r--r--. root root Sep : epel-.repo
-rw-r--r--. root root Sep : epel.repo
-rw-r--r--. root root Sep : epel-testing.repo
[root@web2 yum.repos.d]# cd /root/docker-rpm/
[root@web2 docker-rpm]# createrepo ./

       yum install docker-ce  -y

          

      方式2

        配置阿里源,epel源里面我这里没有docker,所以配置阿里源的docker源

        阿里源地址:https://mirrors.aliyun.com/docker-ce/linux/centos/

[root@web2 yum.repos.d]# cat docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/stable
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/stable
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-edge]
name=Docker CE Edge - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/edge
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-edge-debuginfo]
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/edge
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-edge-source]
name=Docker CE Edge - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/edge
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/test
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/test
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/test
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/nightly
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/nightly
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/nightly
enabled=
gpgcheck=
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[root@web2 yum.repos.d]#

        yum install dockre-ce -y

        

    2)开启防火墙

      systemctl start firewalld.service

    3)开启私有仓库服务端

       systemctl start docker

      systemctl enable docker

    确保两台几点都安装了docker,并启动

  4、私有仓库服务器拉取或load  registry

    方法1、直接拉取

      

[root@web1 yum.repos.d]# docker pull registry
Using default tag: latest
Trying to pull repository docker.io/library/registry ...
latest: Pulling from docker.io/library/registry
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Image is up to date for docker.io/registry:latest
[root@web1 yum.repos.d]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zxg/nginx1 latest 3babdf3c6c6d weeks ago MB
zxg/centos_nginx v1 7c6604cacec1 weeks ago MB
docker.io/atlassian/jira-software latest c4b90dede4f3 weeks ago MB
zxg/my_nginx v1 b164f4c07c64 weeks ago MB
zxg/my_nginx latest f07837869dfc weeks ago MB
docker.io/nginx latest e445ab08b2be months ago MB
docker.io/alpine latest b7b28af77ffe months ago 5.58 MB
docker.io/centos latest 9f38484d220f months ago MB
docker.io/registry latest f32a97de94e1 months ago 25.8 MB
[root@web1 yum.repos.d]#

    方法2、下载registry.tar包,然后导入即可、

      docker load -i registry.tar

  5、私库服务器随便拉取一个镜像,并且打好标签

docker pull busybox
docker tag docker.io/busybox:latest 192.168.216.51:/busybox:latest

     打好标签就是下面标红的行

[root@web1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zxg/nginx1 latest 3babdf3c6c6d weeks ago MB
192.168.216.51:5000/busybox latest 19485c79a9bb 3 weeks ago 1.22 MB
busybox v1 19485c79a9bb weeks ago 1.22 MB
docker.io/busybox latest 19485c79a9bb weeks ago 1.22 MB
zxg/centos_nginx v1 7c6604cacec1 weeks ago MB

  

  6、修改配置文件,指定私库url

    需要安装docker-common,检查一下有没有安装

[root@web1 yum.repos.d]# rpm -qf /etc/sysconfig/docker
docker-common-1.13.-.gitb2f74b2.el7.centos.x86_64
[root@web1 yum.repos.d]#

    配置文件添加--insecure-registry 192.168.216.51:5000

[root@web1 yum.repos.d]# cat /etc/sysconfig/docker
# /etc/sysconfig/docker
#
# Modify these options if you want to change the way the docker daemon runs
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry 192.168.216.51:5000'
if [ -z "${DOCKER_CERT_PATH}" ]; then
DOCKER_CERT_PATH=/etc/dockerd
fi

  7、重启docker

    

[root@web1 yum.repos.d]# systemctl restart docker

  8、启动私有仓库,使用registry镜像运行一个docker就可以了

[root@web1 yum.repos.d]# docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry
###-v 指定本地持久路径
27d56aa54e167c26c76e25136b247072883aa29dde247f20c45f97fafedb650b
[root@web1 yum.repos.d]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
27d56aa54e16 registry "/entrypoint.sh /e..." About a minute ago Up seconds 0.0.0.0:->/tcp frosty_ptolemy
[root@web1 yum.repos.d]# netstat -antlop |grep
tcp6 ::: :::* LISTEN /docker-proxy- off (0.00//)
[root@web1 yum.repos.d]# netstat -antup |grep
tcp6 ::: :::* LISTEN /docker-proxy-
[root@web1 yum.repos.d]#
[root@web1 yum.repos.d]# ls /opt/registry
###目录已经自动创建

  9、本机上传镜像,成功后使用tree查看

docker push 192.168.216.51:/busybox
[root@web1 ~]#  tree /opt/registry/docker/registry/
/opt/registry/docker/registry/
└── v2
├── blobs
│   └── sha256
│   ├──
│   │   └── 19485c79a9bbdca205fce4f791efeaa2a103e23431434696cc54fdd939e9198d
│   │   └── data
│   ├── 7c
│   │   └── 7c9d20b9b6cda1c58bc4f9d6c401386786f584437abbe87e58910f8a9a15386b
│   │   └── data
│   └── dd
│   └── dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
│   └── data
└── repositories
└── busybox
├── _layers
│   └── sha256
│   ├── 19485c79a9bbdca205fce4f791efeaa2a103e23431434696cc54fdd939e9198d
│   │   └── link
│   └── 7c9d20b9b6cda1c58bc4f9d6c401386786f584437abbe87e58910f8a9a15386b
│   └── link
├── _manifests
│   ├── revisions
│   │   └── sha256
│   │   └── dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
│   │   └── link
│   └── tags
│   └── latest
│   ├── current
│   │   └── link
│   └── index
│   └── sha256
│   └── dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
│   └── link
└── _uploads directories, files
[root@web1 ~]#

  10、使用52节点下载busybox镜像

    我这里已经装好docker,就不演示怎么安装docker,这里都是按照之前原理篇的安装方式,请见如下链接:

      安装docker请参考:Docker1 架构原理及简单使用

  

###修改配置文件添加"--insecure-registry不安全的注册"
[root@web2 ~]# cat /etc/sysconfig/docker |grep
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry 192.168.216.51:5000'
###拉取镜像

[root@web2 ~]# docker pull 192.168.216.51:/busybox
Using default tag: latest
Trying to pull repository 192.168.216.51:/busybox ...
latest: Pulling from 192.168.216.51:/busybox
7c9d20b9b6cd: Pull complete
Digest: sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
Status: Downloaded newer image for 192.168.216.51:/busybox:latest
###查看镜像
[root@web2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.216.51:/busybox latest 19485c79a9bb weeks ago 1.22 MB
###运行实例-成功

[root@web2 ~]# docker run 192.168.216.51:5000/busybox echo "1111"
1111
[root@web2 ~]#

###创建镜像链接并命名
[root@web2 ~]# docker tag 192.168.216.51:5000/busybox busybox:v1
###删除镜像
[root@web2 ~]# docker rmi 192.168.216.51:5000/busybox

[root@web2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox v1 19485c79a9bb 3 weeks ago 1.22 MB

###运行新的实例

  

[root@web2 ~]# docker run busybox:v1 echo 222
222

  到这里已经完成了私库搭建方方法,不过应该在上传一个新版本测试:

[root@web2 ~]# docker tag busybox:v1 192.168.216.51:/busybox:v1
[root@web2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@web2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.216.51:/busybox v1 19485c79a9bb weeks ago 1.22 MB
busybox v1 19485c79a9bb weeks ago 1.22 MB
[root@web2 ~]# docker push 192.168.216.51:/busybox
The push refers to a repository [192.168.216.51:/busybox]
6c0ea40aef9d: Layer already exists
v1: digest: sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808 size:
[root@web2 ~]#

  11、回到51节点测试查看有没有新的版本上传上来

    在51节点,上用tree命令查看,可以看到v1版本

[root@web1 ~]# tree /opt/registry/docker/registry/
/opt/registry/docker/registry/
└── v2
├── blobs
│   └── sha256
│   ├──
│   │   └── 19485c79a9bbdca205fce4f791efeaa2a103e23431434696cc54fdd939e9198d
│   │   └── data
│   ├── 7c
│   │   └── 7c9d20b9b6cda1c58bc4f9d6c401386786f584437abbe87e58910f8a9a15386b
│   │   └── data
│   └── dd
│   └── dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
│   └── data
└── repositories
└── busybox
├── _layers
│   └── sha256
│   ├── 19485c79a9bbdca205fce4f791efeaa2a103e23431434696cc54fdd939e9198d
│   │   └── link
│   └── 7c9d20b9b6cda1c58bc4f9d6c401386786f584437abbe87e58910f8a9a15386b
│   └── link
├── _manifests
│   ├── revisions
│   │   └── sha256
│   │   └── dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
│   │   └── link
│   └── tags
│   ├── latest
│   │   ├── current
│   │   │   └── link
│   │   └── index
│   │   └── sha256
│   │   └── dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
│   │   └── link
│   └── v1
│   ├── current
│   │   └── link
│   └── index
│   └── sha256
│   └── dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
│   └── link
└── _uploads

四、总结大家私有仓库的步骤

  配置前可以先把防火墙及selinux全部关闭

  

    1、安装docker

  2、修改配置文件两台节点一样,有两种方式:(注意!!!)

    1)、添加参数到/etc/sysconfig/docker文件

    OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry 192.168.216.51:5000'

    2)、还可以把这行添加到启动参数里,/usr/lib/systemd/system/docker.service

    ExecStart=/usr/bin/dockerd-current --insecure-registry 192.168.216.51:5000

   注意:新版本已经没有/etc/sysconfig/docker配置文件了,所以可以统一放到启动参数/usr/lib/systemd/system/docker.service

  3、拉取registry镜像

  4、运行registry镜像并映射5000端口

  5、打标签上传下载镜像完成

五、带授权的registry

    注意:这里是创建密码认证,而不是证书的认证

  1、创建授权目录

     mkdir /auth

  2、使用registry镜像生成  htpasswd加密文件其中加密了密码

    创建用户名:zxg,密码123456,并加密

docker run --entrypoint htpasswd registry -Bbn zxg  >/auth/htpasswd

    可以看到密码123456已经加密了

[root@web1 auth]# cat htpasswd
zxg:$2y$$qCY7iWVJIoOrnIp17WQOf.fcXUTo5xm4DwP3a/8ggzZlEZ3bsnonm

    注释:

        --entrypoint :是docker的一种指令,用于给出容器启动后默认入口

  3、启动带参数的镜像

[root@web1 /]# docker run -d -p : --restart=always --name registry1 \
> -v /opt/registry:/var/lib/registry
> -v /auth:/auth
> -e "REGISTRY_AUTH=htpasswd"
> -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm"
> -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
> registry
37f0ce01ea327e6cd62798e0df683d5d2a4317c3fd865c0f1e19b654f052fe66

  4、52节点创建busybox便签v2上传,先登陆,然后上传

[root@web2 ~]# docker login 192.168.216.51:
Username: zxg
Password:
Login Succeeded
[root@web2 ~]# docker tag busybox:v2 192.168.216.51:/busybox:v2
busybox v2 19485c79a9bb weeks ago 1.22 MB [root@web2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.216.51:/busybox v1 19485c79a9bb weeks ago 1.22 MB
192.168.216.51:/busybox v2 19485c79a9bb weeks ago 1.22 MB
busybox v1 19485c79a9bb weeks ago 1.22 MB
busybox v2 19485c79a9bb weeks ago 1.22 MB [root@web2 ~]# docker push 192.168.216.51:/busybox:v2
The push refers to a repository [192.168.216.51:/busybox]
6c0ea40aef9d: Pushed
v2: digest: sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808 size:
[root@web2 ~]#

  5、回到51上确认是否上传成功

[root@web1 auth]# tree /opt/registry/docker/registry/v2/
/opt/registry/docker/registry/v2/
├── blobs
│   └── sha256
│   ├──
│   │   └── 19485c79a9bbdca205fce4f791efeaa2a103e23431434696cc54fdd939e9198d
│   │   └── data
│   ├── 7c
│   │   └── 7c9d20b9b6cda1c58bc4f9d6c401386786f584437abbe87e58910f8a9a15386b
│   │   └── data
│   └── dd
│   └── dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
│   └── data
└── repositories
└── busybox
├── _layers
│   └── sha256
│   ├── 19485c79a9bbdca205fce4f791efeaa2a103e23431434696cc54fdd939e9198d
│   │   └── link
│   └── 7c9d20b9b6cda1c58bc4f9d6c401386786f584437abbe87e58910f8a9a15386b
│   └── link
├── _manifests
│   ├── revisions
│   │   └── sha256
│   │   └── dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
│   │   └── link
│   └── tags
│   ├── latest
│   │   ├── current
│   │   │   └── link
│   │   └── index
│   │   └── sha256
│   │   └── dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
│   │   └── link
│   ├── v1
│   │   ├── current
│   │   │   └── link
│   │   └── index
│   │   └── sha256
│   │   └── dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
│   │   └── link
│   └── v2
│   ├── current
│   │   └── link
│   └── index
│   └── sha256
│   └── dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
│   └── link
└── _uploads directories, files

    可以看到已经有v2版本,成功,下一篇将介绍Harbor-Registry的方式。

转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/11558782.html 

Docker4-docker私库的搭建及常用方法-docker-registry方式的更多相关文章

  1. Docker5-docker私库的搭建及常用方法-harbor-registry方式

    一.简介 1.官方已经提供registry镜像为什么还需要用harbor 1)registry缺少镜像清理机制,可以push但是不能删除,耗费空间 2)registry缺乏相应的扩展机制 3)harb ...

  2. docker私库harbor的搭建

    1.文件下载 # wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v1.5.1.tgz 安装官网 ...

  3. ubuntu16搭建docker私库

    测试环境如下: 一.docker的安装 安装方法请查看这里的 安装教程 二.设置普通用户 1. centos的设置方法 $ sudo gpasswd -a docker ${USER} 2. ubun ...

  4. docker私库Harbor部署(转载)

    系统环境 centos7.3docker-ce docker version: 18.03.0docker-compose version: 1.21.0 Install Docker CE 安装依赖 ...

  5. Easypack容器系列之:Nexus 3:Docker私库

    Nexus作为私库管理最为流行的工具之中的一个,用于包的管理和Docker镜像管理的私库管理场景中非经常常使用.Easypack利用最新版本号的oss版Nexus作为基础镜像用于提供相似服务. 本文将 ...

  6. Docker(二)搭建和使用Docker

    摘自 https://mp.weixin.qq.com/s/E9tqhe00EjfV8y1pqWkZfw 一.Docker的架构 Docker使用C/S结构,即客户端/服务器体系结构.Docker客户 ...

  7. Docker version 1.12.5建立registry私库

    sudo docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry :前面的是宿主机的地址(/opt/da ...

  8. Maven 如何发布 jar 包到 Nexus 私库

    Nexus2可以通过管理界面来上传jar包到私库中,而最新的Nexus3却找不到了上传界面,只能通过以下方式来发布到私库. 发布第三方jar包 这种情况是maven远程仓库没有,本地有的第三方jar包 ...

  9. Maven如何发布jar包到Nexus私库

    Nexus2可以通过管理界面来上传jar包到私库中,而最新的Nexus3却找不到了上传界面,只能通过以下方式来发布到私库. 发布第三方jar包 这种情况是maven远程仓库没有,本地有的第三方jar包 ...

随机推荐

  1. HDU-3038How Many Answers Are Wrong权值并查集

    How Many Answers Are Wrong 题意:输入一连串的区间和,问和前面的矛盾个数: 思路:我在做专题,知道是并查集,可是还是不知道怎么做,学了一下权值并查集和大佬的优秀思路,感觉回了 ...

  2. lightoj 1105 - Fi Binary Number(dp+思维(斐波那契))

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1105 题解:这题你会巧妙的发现 1-(1),2-(10),3-(100),5- ...

  3. poj 2117 Electricity(tarjan求割点删掉之后的连通块数)

    题目链接:http://poj.org/problem?id=2117 题意:求删除一个点后,图中最多有多少个连通块. 题解:就是找一下割点,根节点的割点删掉后增加son-1(son为子树个数),非根 ...

  4. codeforces 478 D. Red-Green Towers(背包)

    题目链接:http://codeforces.com/problemset/problem/478/D 题意:给出红色方块r个,绿色方块g个,问最高能叠几层等腰三角形,而且每一层的颜色必须相同. 题解 ...

  5. SpringCloud 学习(二)-2 :Securing The Eureka Server

    由于工作等种种原因未能连续进行学习,现在继续学习微服务,不过是新建的demo,springcloud版本用的是Finchley.SR2. 之前用简单demo实现了注册中心,现在来对注册中心加安全验证: ...

  6. LaTeX 自动避免重复内容

    在编辑自动化文档时,很容易出现在文档多处提及相同内容的情况.例如,描述某具体设备的图片,在多个工艺中都会用到,而又无法确定工艺出现顺序,或者对于不同企业,工艺不尽相同.这时我们可能会希望,latex帮 ...

  7. 彻底解决android拍照后无法显示的问题

    这是对上篇"android 图片拍照,相册选图,剪切并显示"的文章之后的 改进 上一篇文章虽然能解决图片的拍照剪切以及显示,但是发现他有一个缺点, 如果该程序单独运行,貌似没有任何 ...

  8. Spring Boot 自定义 Banner 教程

    我们在启动 SpringBoot 时,控制台会打印 SpringBoot Logo 以及版本信息.有的时候我们需要自己弄个有个性的文本图片.Spring Boot 为我们提供了自定义接口. . ___ ...

  9. Java-HashSet集合中的几种遍历方式

    //我们先创建一个set集合 public static void main(String[] args) { Set<Integer> sets = new HashSet<> ...

  10. 如何部署 H5 游戏到云服务器?

    在自学游戏开发的路上,最有成就感的时刻就是将自己的小游戏做出来分享给朋友试玩,原生的游戏开可以打包分享,小游戏上线流程又长,那 H5 小游戏该怎么分享呢?本文就带大家通过 nginx 将构建好的 H5 ...