Docker構建私有registry(倉庫)
#1 啟動registry
[root@docker ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry
# --restart=always 不管是docker服務重啟還是伺服器重啟,只要docker服務起來,就幫我把這個容器啟動
#2 修改配置檔案
[root@docker lamp]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://yown2gka.mirror.aliyuncs.com"],
"insecure-registries": ["10.0.0.100:5000"]
}
[root@docker docker]# systemctl restart docker
#3 製作本地映象並push到registry
# 必須要先打標記,才能push
[root@docker ~]# docker tag nginx 10.0.0.100:5000/alnk/nginx:v1.0
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.100:5000/alnk/nginx v1.0 f7bb5701a33c 11 days ago 126MB
nginx latest f7bb5701a33c 11 days ago 126MB
[root@docker ~]# docker push 10.0.0.100:5000/alnk/nginx:v1.0
#4 異地進行pull映象(另外一臺主機測試)
[root@docker02 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://yown2gka.mirror.aliyuncs.com"],
"insecure-registries": ["10.0.0.100:5000"]
}
[root@docker02 ~]# systemctl restart docker
[root@docker02 ~]# docker pull 10.0.0.100:5000/alnk/nginx:v1.0
[root@docker02 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.100:5000/alnk/nginx v1.0 f7bb5701a33c 11 days ago 126MB
#5 本地倉庫加安全認證
#在安裝registry的那臺伺服器進行
#生成密碼:
[root@docker ~]# yum install httpd-tools -y
[root@docker ~]# mkdir /opt/registry-auth/ -p
[root@docker ~]# htpasswd -Bbn alnk 123 > /opt/registry-auth/htpasswd
[root@docker ~]# cat /opt/registry-auth/htpasswd
alnk:$2y$05$CuUlxfhJOnu4ymeIMY3l0.VWTWirqOZ8fVklpy43CFxii1Aup/0TK
#6 重新啟動帶有祕鑰功能的registry容器
[root@docker ~]# docker container ls -a |grep registry
24055607a16f registry "/entrypoint.sh /etc…" 9 minutes ago Up 8 minutes 0.0.0.0:5000->5000/tcp registry
[root@docker ~]# docker container stop 24055607a16f
24055607a16f
[root@docker ~]# docker container rm 24055607a16f
24055607a16f
[root@docker ~]# docker container ls -a |grep registry
[root@docker ~]#
[root@docker ~]# docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
#7 push映象,需要進行login
[root@docker ~]# docker tag nginx 10.0.0.100:5000/alnk/nginx:v2.0
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.100:5000/alnk/nginx v2.0 f7bb5701a33c 11 days ago 126MB
[root@docker ~]# docker push 10.0.0.100:5000/alnk/nginx:v2.0
The push refers to repository [10.0.0.100:5000/alnk/nginx]
75248c0d5438: Preparing
49434cc20e95: Preparing
556c5fb0d91b: Preparing
no basic auth credentials
[root@docker ~]# docker login 10.0.0.100:5000
Username: alnk
Password:
Login Succeeded
[root@docker ~]# docker push 10.0.0.100:5000/alnk/nginx:v2.0
v2.0: digest: sha256:36b77d8bb27ffca25c7f6f53cadd059aca2747d46fb6ef34064e31727325784e size: 948
[root@docker ~]#
#8 然後測試pull,也需要進行驗證(這裡網上說不用密碼,暫時還沒弄清楚)
[root@docker02 ~]# docker pull 10.0.0.100:5000/alnk/nginx:v2.0
Error response from daemon: Get http://10.0.0.100:5000/v2/alnk/nginx/manifests/v2.0: no basic auth credentials
[root@docker02 ~]# docker login 10.0.0.100:5000
Username: alnk
Password:
Login Succeeded
[root@docker02 ~]# docker pull 10.0.0.100:5000/alnk/nginx:v2.0
[root@docker02 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.100:5000/alnk/nginx v2.0 f7bb5701a33c 11 days ago 126MB
重啟docker服務,容器全部退出的解決辦法
#方法一:在啟動容器的時候加上 --restart=always 引數
docker run --restart=always xxxxxxx
#方法二:docker server配置檔案 /etc/docker/daemon.json 加入這個引數
{
"live-restore": true
}
habor實現圖形化register(倉庫)
系統版本:centos7.6
docker版本:Docker version 17.06.2-ce, build cec0b72
docker-compse版本:docker-compose version 1.18.0, build 8dd22a9
harbor版本:harbor-offline-installer-v1.8.0.tgz
Docker容器應用的開發和執行離不開可靠的映象管理,雖然Docker官方也提供了公共的映象倉庫,但是從安全和效率等方面考慮,部署我們私有環境內的Registry也是非常必要的
Harbor是由VMware公司開源的企業級的Docker Registry管理專案,它包括許可權管理(RBAC)、LDAP、日誌稽核、管理介面、自我註冊、映象複製和中文支援等功能
1 安裝
1 安裝docker和docker-compose
前面已經安裝好docker了,具體可以看 01-docker容器1 中的安裝步驟
https://www.cnblogs.com/lichengguo/p/15152993.html
安裝docker-compose
[root@docker ~]# yum install -y docker-compose
2 下載harbor-offline-installer-vxxx.tgz
github地址:https://goharbor.io/
https://github.com/goharbor/harbor/releases/tag/v1.8.0
3 上傳到/opt 並解壓
[root@docker opt]# ll
-rw-r--r-- 1 root root 552897681 Jan 9 10:36 harbor-offline-installer-v1.8.0.tgz
[root@docker opt]# tar -zxvf harbor-offline-installer-v1.8.0.tgz -C /usr/local/
4 修改harbor.cfg配置檔案
[root@docker opt]#cd /usr/local/harbor
[root@docker harbor]# vim harbor.yml
5 執行install.sh
注意:需要在安裝目錄下執行命令
[root@docker harbor]# ./prepare
[root@docker harbor]# ./install.sh
[root@docker harbor]# docker-compose ps
2 使用方法 (配置免https)
[root@docker harbor]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"],
"insecure-registries": ["10.0.0.100"],
}
重啟docker服務
[root@docker harbor]# systemctl daemon-reload
[root@docker harbor]# systemctl restart docker
3 重啟harbor服務
# cd 到 harbor的安裝目錄
[root@docker harbor]# cd /usr/local/harbor
[root@docker harbor]# docker-compose stop
[root@docker harbor]# docker-compose up -d
4 在habor中新增專案
注意:用谷歌瀏覽器開啟
賬號:admin 密碼:123456
5 製作映象並上傳habor
[root@docker harbor]# docker images |grep -v goharbor|grep nginx
nginx latest f7bb5701a33c 11 days ago 126MB
# 注意 這裡的alnk是上面web介面建立的專案
[root@docker harbor]# docker tag nginx 10.0.0.100/alnk/nginx:v1.0
[root@docker harbor]# docker images |grep -v goharbor|grep nginx
10.0.0.100/alnk/nginx v1.0 f7bb5701a33c 11 days ago 126MB
nginx latest f7bb5701a33c 11 days ago 126MB
[root@docker harbor]# docker push 10.0.0.100/alnk/nginx:v1.0
沒有認證,不能push
[root@docker harbor]# docker login 10.0.0.100
[root@docker harbor]# docker push 10.0.0.100/alnk/nginx:v1.0
在web介面檢視
6 在10.0.0.101節點中pull habor中的映象
1 先要安裝docker基礎環境
略
2 修改docker配置檔案
[root@docker02 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"],
"insecure-registries": ["10.0.0.100"]
}
重啟docker服務
[root@docker02 ~]# systemctl daemon-reload
[root@docker02 ~]# systemctl restart docker
3 拉取habor中的映象
[root@docker02 ~]# docker pull 10.0.0.100/alnk/nginx:v1.0
Docker本地網路型別
1檢視支援網路型別
[root@docker opt]# docker network ls
2 四種網路
1 none
none : 無網路模式,這種沒有ip,可以在容器裡隨便玩,沒有多大意義
[root@docker02 ~]# docker run -it --network=none centos:6.9 /bin/bash
2 container(k8s常用)
與其他容器公用Network Namespace
要注意的是這種公用container型別的埠是誰先用某個埠,誰就佔了,後來的沒法使用這個埠
這裡可以看出起了2個centos6.9的容器,他們的IP是一樣的,網路共享了
3 host : 公用宿主機Network NameSapce
這種就是和宿主機共用埠,誰先佔誰用,但是效能最高,所以我們在構建映象的時候使用了這個引數,就是為了統一網路型別,提高構建映象的效率
4 bridge : 預設模式,相當於NAT(容器預設使用的模式)
Docker跨主機網路介紹
這裡只介紹 macvlan、overlay 這兩種。跨主機容器網路方案有很多種
1 Docker跨主機訪問-macvlan實現(不能訪問外網)
10.0.0.100 和 10.0.0.101 兩臺虛擬機器都要執行
[root@docker opt]# docker network create --driver macvlan --subnet=100.0.0.0/24 --gateway=100.0.0.254 -o parent=eth0 macvlan_1
ip link set eth0 promsic on (ubuntu或其他版本需要)
10.0.0.100 上執行
注意:這裡用centos6.9基礎映象啟動容器,然後在容器中安裝了一個ping命令,然後在把容器commit為映象,在啟動容器的
[root@docker opt]# docker run -it --network macvlan_1 --ip=100.0.0.11 contos6.9_ssh_v1.0 /bin/bash
10.0.0.101 上執行
[root@docker02 ~]# docker run -it --network macvlan_1 --ip=100.0.0.12 centos:6.9 /bin/bash
測試。在10.0.0.100 上的容器ping 10.0.0.101上的容器
2 Docker 跨主機訪問-overlay實現
1 啟動 consul 服務,實現網路的統一配置管理(在10.0.0.100 這臺機器上執行)
[root@docker ~]# docker run -d --restart=always -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
#consul:kv型別的儲存資料庫(key:value)
docker01(10.0.0.100)
vim /etc/docker/daemon.json
{
"hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
"cluster-store": "consul://10.0.0.100:8500",
"cluster-advertise": "10.0.0.100:2376"
}
systemctl daemon-reload
systemctl restart docker
docker02(10.0.0.101)
vim /etc/docker/daemon.json
{
"hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
"cluster-store": "consul://10.0.0.100:8500",
"cluster-advertise": "10.0.0.101:2376"
}
systemctl daemon-reload
systemctl restart docker
2 建立overlay網路(在10.0.0.100 這臺機器上執行)
[root@docker ~]# docker network create -d overlay --subnet 172.16.0.0/24 --gateway 172.16.0.254 overlay
3 兩邊啟動容器測試(兩臺機器都要執行)
docker run -it --network overlay busybox /bin/sh
每個容器有兩塊網絡卡,eth0實現容器間的通訊,eth1實現容器訪問外網
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --cluster-store=consul://10.0.0.100:8500 --cluster-advertise=10.0.0.100:2376