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运行起来吧!

$ 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镜像已经存在了。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐