Docker系列教程(6)Docker 仓库
Docker 仓库Docker Hub目前 Docker 官方维护了一个公共仓库 Docker Hub。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。注册在 https://hub.docker.com 免费注册一个 Docker 账号。登录和退出登录需要输入用户名和密码,登录成功后,我们就可以从 docker hub 上拉取自己账号下的全部镜像。$ docker login
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
镜像已经存在了。
更多推荐
所有评论(0)