赞
踩
目前 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来部署各种环境,发现从DockerHub上下载镜像有时候比较慢。第三方的镜像还可以使用一些国内的镜像仓库来加速,如果我们自己构建的镜像那就不行了。这时候搭建一个私有的镜像仓库很有必要,最近发现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.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"]
}
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
FROM busybox:latest
docker build -t 192.168.3.101:80/test/busybox .
docker push 192.168.3.101:80/test/busybox
推送成功后在Harbor的管理界面中就可以查看到busybox镜像了;
由于Harbor是用Docker Compose部署的,可以直接使用Docker Compose的命令来停止和启动。
# 停止Harbor
docker-compose stop
# 启动Harbor
docker-compose start
如何使用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]
mall-tiny-fabric
镜像已经存在了。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。