• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
isuning
博客园    首页    新随笔    联系   管理    订阅  订阅
Docker系列教程(6)Docker 仓库

Docker 仓库

Docker Hub

目前 Docker 官方维护了一个公共仓库 Docker Hub。

大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

注册

在 https://hub.docker.com 免费注册一个 Docker 账号。

登录和退出

登录需要输入用户名和密码,登录成功后,我们就可以从 docker hub 上拉取自己账号下的全部镜像。

$ docker login

退出

退出 docker hub 可以使用以下命令:

$ docker logout

拉取镜像

你可以通过 docker search 命令来查找官方仓库中的镜像,并利用 docker pull 命令来将它下载到本地。

以 ubuntu 为关键词进行搜索:

$ docker search ubuntu

使用 docker pull 将官方 ubuntu 镜像下载到本地:

$ docker pull ubuntu 

推送镜像

用户登录后,可以通过 docker push 命令将自己的镜像推送到 Docker Hub。

以下命令中的 username 请替换为你的 Docker 账号用户名。

$ docker tag ubuntu:18.04 username/ubuntu:18.04
$ docker image ls

REPOSITORY      TAG        IMAGE ID            CREATED           ...  
ubuntu          18.04      275d79972a86        6 days ago        ...  
username/ubuntu 18.04      275d79972a86        6 days ago        ...  
$ docker push username/ubuntu:18.04
$ docker search username/ubuntu

NAME             DESCRIPTION       STARS         OFFICIAL    AUTOMATED
username/ubuntu

第三方镜像市场

Docker私有仓库搭建

平时经常用Docker来部署各种环境,发现从DockerHub上下载镜像有时候比较慢。第三方的镜像还可以使用一些国内的镜像仓库来加速,如果我们自己构建的镜像那就不行了。这时候搭建一个私有的镜像仓库很有必要,最近发现Harbor这个企业级镜像仓库,非常好用且功能强大,推荐给大家!

Harbor简介

Harbor是一款开源的Docker镜像仓库服务。提供了基于角色的镜像访问机制,可以保护你的镜像安全。

安装

学习开源项目的第一步,一般都是把它运行起来,我们先来把Harbor运行起来吧!

  • 下载Harbor安装包,这里下载的是v1.10.6离线版本,下载地址:https://github.com/goharbor/harbor/releases

  • 下载完成后上传到Linux服务器,使用如下命令解压;

$ tar xvf harbor-offline-installer-v1.10.6.tgz
  • 修改Harbor的配置文件harbor.yml;
## Configuration file of Harbor

# hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost,此处我设置为本地ip

hostname = 192.168.3.101

# Harbor启动后,管理员UI登录的密码,默认是Harbor12345

harbor_admin_password = Harbor12345

# 认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证

auth_mode = db_auth

# 是否开启自注册

self_registration = on

# Token有效时间,默认30分钟

token_expiration = 30
  • 使用install.sh脚本安装Harbor:
./install.sh
  • Harbor启动成功后会输出如下信息,这里需要注意的是Harbor会启动Nginx、Redis之类的容器,以前创建过的需要先删除掉,看到started successfully就表示启动成功了;

  • 我们可以使用docker images命令查看下安装Harbor安装的Docker镜像,还挺多的;

  • 访问Harbor的管理界面,输入账号密码admin:Harbor12345登录即可,访问地址:http://192.168.3.101/

使用

接下来我们就可以使用Harbor来管理我们的镜像了。

  • 首先点击新建项目按钮,新建一个项目:

  • 这里新建一个叫做test的私有项目;

  • 由于docker login命令默认不支持http访问,所以我们需要手动开启,使用Vim编辑器修改docker的配置文件daemon.json;

vi /etc/docker/daemon.json
  • 添加一行insecure-registries配置即可,允许使用非安全方式访问Harbor镜像仓库,注意不要少了端口号80;
{
 "registry-mirrors":["https://xxx.aliyuncs.com"],
 "insecure-registries":["192.168.3.101:80"]
}
  • 再次重新启动docker服务;
systemctl restart docker
  • 再次使用install.sh启动Harbor服务;
./install.sh
  • 使用docker login命令访问Harbor镜像仓库,注意加上端口号为80;
[root@linux-local harbor]# docker login 192.168.3.101:80
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
 
Login Succeeded
  • 编写Dockerfile脚本,用于构建Docker镜像,一个最简单的busybox脚本如下;
FROM busybox:latest
  • 使用如下命令构建一个自己的busybox镜像;
docker build -t 192.168.3.101:80/test/busybox .
  • 将自己构建的busybox镜像推送到Harbor镜像仓库;
docker push 192.168.3.101:80/test/busybox
  • 推送成功后在Harbor的管理界面中就可以查看到busybox镜像了;

  • 由于Harbor是用Docker Compose部署的,可以直接使用Docker Compose的命令来停止和启动。

# 停止Harbor
docker-compose stop
# 启动Harbor
docker-compose start

结合SpringBoot使用

如何使用Maven插件一键打包并推送到Harbor镜像仓库。

  • 首先修改项目的pom.xml文件,修改推送的镜像仓库地址,并添加认证信息即可;
<plugin>
     <groupId>io.fabric8</groupId>
     <artifactId>docker-maven-plugin</artifactId>
     <version>0.33.0</version>
     <executions>
         <!--如果想在项目打包时构建镜像添加-->
         <execution>
             <id>build-image</id>
             <phase>package</phase>
             <goals>
                 <goal>build</goal>
             </goals>
         </execution>
     </executions>
     <configuration>
         <!-- Docker 远程管理地址-->
         <dockerHost>http://192.168.3.101:2375</dockerHost>
         <!-- Docker 推送镜像仓库地址-->
         <pushRegistry>http://192.168.3.101:80</pushRegistry>
         <!-- 认证信息-->
         <authConfig>
             <push>
                 <username>admin</username>
                 <password>Harbor12345</password>
             </push>
         </authConfig>
         <images>
             <image>
                 <!--由于推送到私有镜像仓库,镜像名需要添加仓库地址-->
                 <name>192.168.3.101:80/mall-tiny/${project.name}:${project.version}</name>
                 <!--定义镜像构建行为-->
                 <build>
                     <!--定义基础镜像-->
                     <from>java:8</from>
                     <args>
                         <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                     </args>
                     <!--定义哪些文件拷贝到容器中-->
                     <assembly>
                         <!--定义拷贝到容器的目录-->
                         <targetDir>/</targetDir>
                         <!--只拷贝生成的jar包-->
                         <descriptorRef>artifact</descriptorRef>
                     </assembly>
                     <!--定义容器启动命令-->
                     <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
                     <!--定义维护者-->
                     <maintainer>macrozheng</maintainer>
                     <!--使用Dockerfile构建时打开-->
                     <!--<dockerFileDir>${project.basedir}</dockerFileDir>-->
                 </build>
                 <!--定义容器启动行为-->
                 <run>
                     <!--设置容器名,可采用通配符-->
                     <containerNamePattern>${project.artifactId}</containerNamePattern>
                     <!--设置端口映射-->
                     <ports>
                         <port>8080:8080</port>
                     </ports>
                     <!--设置容器间连接-->
                     <links>
                         <link>mysql:db</link>
                     </links>
                     <!--设置容器和宿主机目录挂载-->
                     <volumes>
                         <bind>
                             <volume>/etc/localtime:/etc/localtime</volume>
                             <volume>/mydata/app/${project.artifactId}/logs:/var/logs</volume>
                         </bind>
                     </volumes>
                 </run>
             </image>
         </images>
     </configuration></plugin>Copy to clipboardErrorCopied
  • 推送镜像之前需要在Harbor中创建好mall-tiny项目,否则会无法推送镜像;

  • 之后使用Maven插件打包镜像并推送到Harbor仓库推送过程中输出信息如下;

[INFO] Scanning for projects...[INFO]                                                     
  • 打开Harbor管理页面,发现mall-tiny-fabric镜像已经存在了。
posted on 2022-05-01 22:17  吕布辕门  阅读(100)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3