harbor (docker compose)安装
企业级私有仓库harbor部署
硬件环境
- CPU 至少2G,最好4G
- 内存 至少4G,最好8G
- 磁盘 至少40G,最好160G
软件环境
- docker版本 17.03.0-ce +或更高版本
- docker-compose 版本 1.18.0或更高版本
- Openssl 版本最新,为harbor生产必要的证书
网络端口
- 443 HTTPS Harbor端口和核心API将接受此端口上的https协议请求,此端口可以在配置文件中更改
- 4443 HTTPS 只有在启用“公证”时才需要连接到Dock的Docker Content Trust服务,此端口可以在配置文件中更改
- 80 HTTP Harbor端口和核心API将接受此端口上的http协议请求
# 1.安装docker
yum -y install docker-ce
systemctl enable docker
systemctl start docker
2
3
# 2.安装docker-compose
下载安装包docker-compose-linux-x86_64.zip
unzip docker-compose-linux-x86_64.zip
chmod +x docker-compose
mv docker-compose /usr/bin/
2
3
官方安装方法:
curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
2
3
4
# 3.安装Harbor
# 下载解压
下载地址:https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz
tar -zxvf harbor-offline-installer-v1.8.0.tgz -C /usr/local/workspace
进入harbor 解压后文件目录
cd /usr/local/workspace/harbor
-rw-r--r-- 1 root root 556153903 May 16 19:55 harbor.v1.8.0.tar.gz
-rw-r--r-- 1 root root 4839 May 16 19:54 harbor.yml
-rwxr-xr-x 1 root root 5088 May 16 19:54 install.sh
-rw-r--r-- 1 root root 11347 May 16 19:54 LICENSE
-rwxr-xr-x 1 root root 1654 May 16 19:54 prepare
2
3
4
5
6
说明:从 1.8.0 后,harbor配置文件由原先的 harbor.cfg 改为 harbor.yml
# 配置harbor.yml
较重要参数说明:
hostname :目标主机的主机名,用于访问Portal和注册表服务。它应该是目标计算机的IP地址或完全限定的域名(FQDN),例如,192.168.1.10或reg.yourdomain.com。不要使用localhost或127.0.0.1作为主机名 - 外部客户端需要访问注册表服务,这里修改为我们的主机ip即可 例如修改为 reg.lyndon.com
data_volume: 存储 harbor 数据的位置。 这里可以修改 为 /usr/local/workspace/harbor/data
harbor_admin_password:管理员的初始密码。此密码仅在Harbor首次启动时生效。之后,将忽略此设置,并且应在Portal中设置管理员密码。请注意,默认用户名/密码为admin / Harbor12345。
2
3
4
5
关于端口配置:
http:
port:你的http的端口号
https:用于访问Portal和令牌/通知服务的协议。如果启用了公证,则必须设置为https。请参阅使用HTTPS访问配置Harbor。
port:https的端口号
certificate:SSL证书的路径,仅在协议设置为https时应用。
private_key:SSL密钥的路径,仅在协议设置为https时应用。
2
3
4
5
6
# 安装
执行 ./prepare
./prepare
执行 ./install.sh
./install.sh
查看启动情况
docker-compose ps
登录:htts://reg.lyndon.com 用户名:admin 密码:Harbor12345
重启命令:
重启docker
systemctl daemon-reload systemctl restart docker.service
1
2重启harbor仓库
cd /usr/local/workspace/harbor
1执行命令
docker-compose stop docker-compose up -d
1
2
# 4.使用
# 4.1 配置免https
方法一:修改 /etc/docker/daemon.json
vi /etc/docker/daemon.json //加上允许的仓库
{
"insecure-registries":[
"reg.lyndon.com"
]
}
2
3
4
5
6
7
方法二:修改 docker.service
cd /usr/lib/systemd/system
vi docker.service //修改 ExecStart,添加 --insecure-registry 参数
ExecStart=/usr/bin/dockerd --insecure-registry 10.10.55.55 --insecure-registry reg.lyndon.com
2
3
4
5
两种方法都需要重启docker和harbor
重启docker
systemctl daemon-reload
systemctl restart docker.service
2
重启harbor仓库
cd /usr/local/workspace/harbor
执行命令
docker-compose stop
docker-compose up -d
2
# 4.2 上传镜像
linux 上登录harbor仓库
docker login reg.lyndon.com
reg.lyndon.com 表示 linux服务器地址,请换成自己的服务器ip,注意要说明自己登陆哪个ip,不然默认会登陆到docker hub,即docker官方仓库
修改待上传镜像的tag
docker tag nginx:1.16.0 reg.lyndon.com/common/nginx:1.16.0
上传镜像
docker push reg.lyndon.com/common/nginx:1.16.0
到此,开发环境的harbor安装足够用,如果要生产上试用harbor,请务必配置证书,使用https访问
# 自签证书使用https
# 自签证书
mkdir ssl
cd ssl
genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=reg.lyndon.com" \
-key ca.key \
-out ca.crt
openssl genrsa -out reg.lyndon.com.key 4096
openssl req -sha512 -new \
-subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=yourdomain.com" \
-key reg.lyndon.com.key \
-out reg.lyndon.com.csr
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=reg.lyndon.com
DNS.2=reg.lyndon.com
DNS.3=reg.lyndon.com
EOF
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in reg.lyndon.com.csr \
-out reg.lyndon.com.crt
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 配置harbor
vim harbor.yml // 修改以下:
5 hostname = reg.lyndon.com
21 ssl_cert = ./ssl/reg.lyndon.com.crt
22 ssl_cert_key = ./ssl/reg.lyndon.com.key
60 harbor_admin_password = 12345
./prepare
./install.sh
2
3
4
5
6
7
# 验证harbor
查看harbor容器:
docker-compose ps
Name Command State P
harbor-adminserver /harbor/start.sh Up
harbor-db /usr/local/bin/docker-entr ... Up 3306/tcp
harbor-jobservice /harbor/start.sh Up
harbor-log /bin/sh -c /usr/local/bin/ ... Up 127.0.0.1:1514->10514/tcp
harbor-ui /harbor/start.sh Up
nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:
registry /entrypoint.sh serve /etc/ ... Up 5000/tcp
2
3
4
5
6
7
8
9
10
11
1.docker数据挂载: volume:docker管理宿主机文件系统的一部分(/var/lib/docker/volumes) 管理卷: 创建:docker volume create 卷名 列出:docker volume ls 查看:docker volume inspect 卷名
清理:docker container stop 容器名
docker container rm 容器名
docker volume rm 卷名
用卷创建容器:
(1) docker run -itd --name=容器名 --mount src=卷名,dst=容器内路径 镜像名
(2) docker run -itd --name=容器名 -v 卷名:容器内路径 镜像名
bind mounts:可以存储在宿主机系统的任意位置
用卷创建容器:
(1) docker run -itd --name=容器名 --mount type=bind,src=宿主机路径,dst=容器内路径 镜像名
(2) docker run -itd --name=容器名 -v 宿主机路径:容器内路径 镜像名
tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统
2.docker网络模式
bridge:默认网络,Docker启动后默认创建一个docker0网桥,默认创建的容器也是添加到这个网桥中
host:容器不会获得一个独立的network namespace,而是与宿主机共用一个。
none:获取独立的network namespace,但不为容器进行任何网络配置。
container:与指定的容器使用同一个network namespace,网卡配置也都是相同的。
自定义:自定义网桥,默认与bridge网络一样。
容器访问外部网络:
容器eth0 --> host veth --> docker0 --> iptables snat --> default route --> 外网
外部网络访问容器:
3.安装harbor
下载离线包harbor-offline-installer-v1.4.0.tgz
tar xf harbor-offline-installer-v1.4.0.tgz
cd harbor
docker构建持续集成环境: 1、CI/CD介绍 2、发布流程设计 3、部署Git服务器 4、部署Harbor镜像仓库 5、构建业务基础镜像 6、测试服务器安装Docker 7、Jenkins安装 8、Jenkins基本配置 9、Jenkins创建项目 10、测试
docker 批量删除 杀死所有正在运行的容器 docker kill $(docker ps -a -q)
删除所有已经停止的容器 docker rm $(docker ps -a -q)
删除所有未打 dangling 标签的镜像 docker rmi $(docker images -q -f dangling=true)
删除所有镜像 docker rmi $(docker images -q)
强制删除镜像名称中包含“doss-api”的镜像 docker rmi --force $(docker images | grep doss-api | awk '{print $3}')
镜像导出: docker save -o centos.7.tar.gz centos:7 docker load -i centos.7.tar.gz
执行镜像构建: docker build -t promethus-nginx:v1.0 . docker tag promethus-nginx:v1.0 10.50.183.31/base/promethus-nginx:v1.0 docker push 10.50.183.31/base/promethus-nginx:v1.0