对于想了解Docker搭建私有镜像仓库与WordPress的读者,本文将提供新的信息,我们将详细介绍docker搭建私有镜像仓库,并且为您提供关于03:使用docker搭建Harbor私有镜像仓库、6
对于想了解Docker搭建私有镜像仓库与WordPress的读者,本文将提供新的信息,我们将详细介绍docker 搭建私有镜像仓库,并且为您提供关于03: 使用docker搭建Harbor私有镜像仓库、6.1 基于docker搭建wordpress、Centos7 docker 私有镜像仓库搭建并配置域名、Docker Registry快速搭建私有镜像仓库的有价值信息。
本文目录一览:- Docker搭建私有镜像仓库与WordPress(docker 搭建私有镜像仓库)
- 03: 使用docker搭建Harbor私有镜像仓库
- 6.1 基于docker搭建wordpress
- Centos7 docker 私有镜像仓库搭建并配置域名
- Docker Registry快速搭建私有镜像仓库
Docker搭建私有镜像仓库与WordPress(docker 搭建私有镜像仓库)
最近在看CI/CD与k8s,作为前期准备,先熟悉一下Docker的基本操作,这里我们先用Docker部署几个服务
Docker搭建私有镜像仓库Docker Registry
在Docker Hub上搜索registry,目的是为了确定我们要拉取的镜像版本
https://registry.hub.docker.com/_/registry
最终确定最新的稳定版本2.8.1
拉取镜像
docker pull registry:2.8.1
运行registry实例
docker run -d -p 5000:5000 registry:2.8.1
说明:
- -d 后台运行
- -p 端口映射,容器端口:主机端口
查看运行状态
docker ps
打标签上传
# 先下载一个nginx镜像
docker pull nginxLalpine
# 查看镜像
docker images
docker tag nginx:alpine 127.0.0.1:5000/nginx:alpine
docker push 127.0.0.1:5000/nginx:alpine
说明:
- 因为上传的目标不是默认的Docker Hub,而是本地私有仓库,所以镜像的名字前必须加仓库地址
验证是否推送成功
docker rmi 127.0.0.1:5000/nginx:alpine
docker pull 127.0.0.1:5000/nginx:alpine
查看Registry仓库镜像,Registry只提供了RESTful API
curl 127.0.0.1:5000/v2/_catalog
curl 127.0.0.1:5000/v2/nginx/tags/list
Docker搭建WordPress网站
网络架构图
拉取相关镜像
docker pull wordpress:5
docker pull mariadb:10
docker pull nginx:alpine
运行MariaDB实例
docker run -d --rm \
--name wp-mariadb
--env MARIADB_DATABASE=db \
--env MARIADB_USER=wp \
--env MARIADB_PASSWORD=123 \
--env MARIADB_ROOT_PASSWORD=123 \
mariadb:10
说明:
- 我们指定数据库为db,用户名为wp,密码为123,管理员密码为123
验证数据库,通过执行数据库客户端工具进入数据库
docker exec -it wp-mariadb mysql -u wp -p
查看容器的IP
docker inspect wp-mariadb | grep IPAddress
运行wordpress实例
docker run -d --rm \
--name wp
--env WORDPRESS_DB_HOST=172.17.0.2 \
--env WORDPRESS_DB_USER=wp \
--env WORDPRESS_DB_PASSWORD=123 \
--env WORDPRESS_DB_NAME=db \
wordpress:5
先准备一份nginx配置文件 /opt/docker/wordpress/wp.conf
server {
listen 80;
default_type text/html;
location / {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_pass http://172.17.0.3;
}
}
运行nginx实例
docker run -d --rm \
-p 80:80 \
-v `pwd`/wp.conf:/etc/nginx/conf.d/default.conf \
nginx:alpine
验证是否启动成功
docker ps
初始化网站
浏览器输入 http://192.168.2.101:80,进行WordPress初始化
验证是否搭建成功
再次登录MariDB,db数据库里创建了好多表
03: 使用docker搭建Harbor私有镜像仓库
1.1 harbor介绍
1、Harbor简介
1. Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。
2. 镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。
3. harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。
4. harbor以docker-compose的规范形式组织各个组件,并通过docker-compose工具进行启停。
5. docker的registry是用本地存储或者s3都是可以的
6. Harbor的镜像拷贝功能是通过docker registry的API去拷贝,这种做法屏蔽了繁琐的底层文件操作
2、Harbor架构图
3、主要组件
1.2 Harbor安装
1、参考文档及安装步骤梳理
下载v1.4.0版本harbor:https://github.com/goharbor/harbor/releases?after=v1.5.0-rc5
安装参考文档:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
配置证书:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
1、 下载离线安装包
2、 安装docker
3、 安装docker-compose
4、 自签TLS证书
5、 Harbor安装与配置
6、 Docker主机访问Harbor
2、安装docker和docker-compose(192.168.56.14)
# 1)安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 2)添加Docker软件包源(否则doker安装的不是新版本)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 3)安装Docker CE
yum install -y docker-ce
# 4)启动Docker服务并设置开机启动
systemctl start docker
systemctl enable docker
# 5)安装docker compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version # 测试docker-compose是否安装好
2、安装Harbor
''''''安装Harbor镜像仓库''''''
# 1、下载离线安装包
https://github.com/goharbor/harbor/releases
# 2、解压并配置访问地址''''''
cd /home/work
tar zxvf harbor-offline-installer-v1.8.1.tgz
cd /home/work/harbor
vi harbor.yml
''''''
hostname = 192.168.56.14
harbor_admin_password = 123456
''''''
# 3、准备配置
./prepare
# 4、导入镜像并启动
./install.sh
# 5、查看容器状态
docker-compose ps
安装完成后可以登录Harbor:http://192.168.56.14
1.3 为Harbor配置Https
1、简介
1. 配置ssl证书https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
2. 由于Harbor没有附带任何证书,所以它默认使用HTTP来服务注册表请求,但是,强烈建议为任何生产环境启用安全性。
3. 在测试或开发环境中,您可以选择使用自签名证书,而不是来自受信任的第三方CA的证书。
2、获得CA证书颁发机构(CN为域名)
mkdir /home/work/harbor/ssl/ # 创建一个ssl目录用来存放要创建的证书
cd /home/work/harbor/ssl
# 获得CA证书颁发机构(CN为域名,最好为主机名)
openssl 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=linux-node4.example.com" \
-key ca.key \
-out ca.crt
3、获取服务器证书
1. 假设注册表的主机名是linux-node4.example.com,其DNS记录指向运行Harbor的主机。
2. 在生产环境中,您首先应该从CA获得证书,在测试或开发环境中,您可以使用自己的CA。
3. 证书通常包含一个.crt文件和一个.key文件,例如linux-node4.example.com.crt和linux-node4.example.com.key。
# 创建自己的私钥
openssl genrsa -out linux-node4.example.com.key 4096
# 生成部署请求认证
# 如果使用像linux-node4.example.com这样的FQDN连接注册表主机,则必须使用linux-node4.example.com作为CN(通用名称)。
openssl req -sha512 -new \
-subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=linux-node4.example.com" \
-key linux-node4.example.com.key \
-out linux-node4.example.com.csr
4、为注册的主机生成证书
1. 无论您使用的是像linux-node4.example.com这样的FQDN还是IP来连接注册表主机
2. 都可以运行这个命令来生成符合Subject Alternative Name (SAN)和x509 v3扩展要求的注册表主机证书
# 生成v3.ext文件
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=linux-node4.example.com
DNS.2=linux-node4.example
DNS.3=example
EOF
# 生成证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in linux-node4.example.com.csr \
-out linux-node4.example.com.crt
5、为Harbor配置服务器证书和密钥
# 在获得linux-node4.example.com.crt和linux-node4.example.com.key文件之后,可以将它们放入/data/cert/这样的目录中
mkdir -p /data/cert
cp linux-node4.example.com.crt /data/cert/
cp linux-node4.example.com.key /data/cert/
6、为Docker配置服务器证书、密钥和CA
# Docker守护进程将.crt文件解释为CA证书,将.cert文件解释为客户机证书
# 将服务器linux-node4.example.com.crt转换为linux-node4.example.com.cert
openssl x509 -inform PEM -in linux-node4.example.com.crt -out linux-node4.example.com.cert
# 为docker部署 linux-node4.example.com.cert、linux-node4.example.com.key和ca.crt
mkdir -p /etc/docker/certs.d/linux-node4.example.com/
cp linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/
cp linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/
cp ca.crt /etc/docker/certs.d/linux-node4.example.com/
7、配置Harbor
# 编辑文件端口,更新主机名并取消对https块的注释,更新属性证书和private_key
#set hostname
hostname: linux-node4.example.com
harbor_admin_password: 123456
http:
port: 80
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /data/cert/example.com.crt
private_key: /data/cert/example.com.key
8、为Harbor重新生成配置文件
#1、为Harbor重新生成配置文件
./prepare
#2、如果Harbor已经运行,则停止并删除现有实例,镜像数据仍然保存在文件系统中
docker-compose down -v
#3、重启harbor
docker-compose up -d
#4、此时可以通过浏览器访问https: https://192.168.56.14/harbor/projects
#5、可以在linux-node4.example.com本机上测试docker登录
docker login linux-node4.example.com
9、在其他docker机器中配置登录harbor(192.168.56.13)
mkdir -p /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/
scp -r root@192.168.56.14:/home/work/harbor/ssl/ca.crt /etc/docker/certs.d/linux-node4.example.com/
vi /usr/lib/systemd/system/docker.service # 添加--insecure-registry 192.168.56.14
''''''
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.56.14
''''''
systemctl restart docker.service # 重启docker
111111
1111111111111111
6.1 基于docker搭建wordpress
创建一个mysql容器
docker run -d --name mysql -v mysqldata:/var/lib/mysql -e MYSQL_DATABASE=wp -e MYSQL_ROOT_PASSWORD=root mysql:5.7.22
创建一个wordpress容器
docker run --name wordpress --link mysql -d -p 8080:80 wordpress
然后即可通过访问 http://192.168.205.10:8080/ 来进行安装了
Centos7 docker 私有镜像仓库搭建并配置域名
1.生成证书
可以在任意一台机器上生成(注意时间很重要,很重要,很主要)
vim /etc/pki/tls/openssl.cnf
[ v3_ca ]
subjectAltName = IP:192.168.0.99 #仓库的物理地址
- 生成证书
[root@xxxx-test-221 basic-repository.xxxx.com-yuan]# openssl req -nodes -subj "/C=CN/ST=BeiJing/L=ChaoYao/CN=basic-repository.xxxx.com" -newkey rsa:2048 -keyout basic-repository.key -out basic-repository.csr
Generating a 2048 bit RSA private key
..........+++
.............................+++
writing new private key to ''basic-repository.key''
-----
[root@xxxx-test-221 basic-repository.xxxx.com-yuan]# openssl x509 -req -days 3650 -in basic-repository.csr -signkey basic-repository.key -out basic-repository.crt
Signature ok
subject=/C=CN/ST=BeiJing/L=ChaoYao/CN=basic-repository.xxxx.com
Getting Private key
[root@xxxx-test-221 basic-repository.xxxx.com-yuan]# openssl x509 -req -in basic-repository.csr -CA basic-repository.crt -CAkey basic-repository.key -CAcreateserial -out basic-repository.crt -days 10000
Signature ok
subject=/C=CN/ST=BeiJing/L=ChaoYao/CN=basic-repository.xxxx.com
Getting CA Private Key
[root@xxxx-test-221 basic-repository.xxxx.com-yuan]# ls
basic-repository.crt basic-repository.csr basic-repository.key basic-repository.srl
2.拷贝证书并且启动nginx
注意:本实验环境是基于swarm集群环境部署的,首先搭建swarm集群,然后创建swarm network,启动的容器均在swarm network中。(具体步骤见我的博客)
[root@skf-docker-99l xxxx]# pwd
/data/web/xxxx
[root@skf-docker-99l xxxx]# cat public.conf
server {
listen 80;
listen 443 ssl;
server_name basic-repository.xxxx.com;
access_log logs/basic-repository.log main;
#ssl on;
ssl_certificate /data/ssl/basic-repository.crt;
ssl_certificate_key /data/ssl/basic-repository.key;
location / {
proxy_pass https://basic-repository:5000;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
[root@skf-docker-99l xxxx]# cd ../certs
[root@skf-docker-99l certs]# pwd
/data/web/certs
[root@skf-docker-99l certs]# ls
a.key a.pem basic-registry.crt basic-repository.crt registry.crt
a.key.bak a.pem.bak basic-registry.key basic-repository.key registry.key
[root@skf-docker-99l ~]# docker run -d --name nginx --network sk-net -p 80:80 -p 443:443 --restart=always -v /data/web/web/:/data/web -v /data/web/xxxx/:/data/conf/ -v /data/web/certs/:/data/ssl/ basic-repository.xxxx.com/xxxx/nginx:1.16.0
拷贝证书并且启动仓库
[root@skf-docker-99l certs]# cd /data/certs/
[root@skf-docker-99l certs]# ls
a.key a.pem
[root@skf-docker-99l certs]# cd /etc/docker/certs.d/
[root@skf-docker-99l certs.d]# ls
basic-registry.xxxx.com basic-repository.xxxx.com registry.xxxx.com
[root@skf-docker-99l certs.d]# cd basic-repository.xxxx.com/
[root@skf-docker-99l basic-repository.xxxx.com]# ls
basic-repository.crt
[root@skf-docker-99l basic-repository.xxxx.com]#
[root@skf-docker-99l ~]# docker run -d --name basic-repository --restart=always -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/basic-repository.crt -e REGISTRY_HTTP_TLS_KEY=/certs/basic-repository.key --net=sk-net --expose=5000 -v /data/registry:/var/lib/registry -v /data/web/certs:/certs basic-registry.xxxx.com/xxxx/registry:latest
Docker Registry快速搭建私有镜像仓库
一.软件环境
宿主机操作系统:CentOS Linux release 7.5
虚拟机工具:VMware® Workstation 10
应用容器引擎:Docker version 19.03.7
二.任务背景
所谓私有仓库,也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将镜像提交到私有仓库中。这样我们既能使用 Docker 来运行我们的项目镜像,也避免从公共仓库中来取来拿所暴露出去的风险;利用Docker Registry快速搭建私有镜像仓库。
三.操作步骤
仓库地址:192.168.153.141
#下载registry镜像
[root@docker docker]# docker pull registry
#创建registry容器并启动
[root@docker docker]# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000
--restart=always --name registry registry
b697d68647a95e01ee09115c3b9c035a393cac7e51f96e2e58c1896b500e8cfb
[root@docker docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b697d68647a9 registry "/entrypoint.sh /etc…" 40 seconds ago Up 19 seconds 0.0.0.0:5000->5000/tcp registry
客户端:192.168.153.142
#测试,查看镜像仓库中所有镜像
[root@redis_master docker]# curl http://192.168.153.141:5000/v2/_catalog
{"repositories":[]}
#私有镜像仓库管理
#配置私有仓库:
# vi /etc/docker/dameon.jsp
{
"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"],
"insecure-registries":["192.168.153.141:5000"]
}
~
# systemctl restart docker
#下载镜像
# docker pull Nginx:1.12
#打标签
# docker tag Nginx:1.12 192.168.153.142:5000/centos:7
# docker tag Nginx:1.12 192.168.153.141:5000/Nginx:1.12
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.153.141:5000/Nginx 1.12 4037a5562b03 22 months ago 108 MB
192.168.153.142:5000/centos 7 4037a5562b03 22 months ago 108 MB
docker.io/Nginx 1.12 4037a5562b03 22 months ago 108 MB
#上传镜像到仓库
# docker push 192.168.153.141:5000/Nginx:1.12
The push refers to a repository [192.168.153.141:5000/Nginx]
4258832b2570: Pushed
683a28d1d7fd: Pushed
d626a8ad97a1: Pushed
1.12: digest: sha256:09e210fe1e7f54647344d278a8d0dee8a4f59f275b72280e8b5a7c18c560057f size: 948
# docker tag Nginx:1.12 192.168.153.141:5000/centos:7
#查看仓库镜像
[root@redis_master /]# curl http://192.168.153.141:5000/v2/_catalog
{"repositories":["centos","Nginx"]}
#列出镜像标签
[root@redis_master /]# curl http://192.168.153.141:5000/v2/Nginx/tags/list
{"name":"Nginx","tags":["1.12"]}
# curl http://192.168.153.141:5000/v2/centos/tags/list
{"name":"centos","tags":["7"]}
#从本地仓库(192.168.153.141:5000)下载镜像
#并创建Nginx容器
[root@redis_master /]# docker run -itd --name Nginx -p 88:80 192.168.153.141:5000/Nginx:1.12
0c75bba5a04eb075d432f4409923007a4f8c29b4fb987475d37cae4eeccb303b
#查看正在运行的容器
[root@redis_master /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c75bba5a04e 192.168.153.141:5000/Nginx:1.12 "Nginx -g 'daemon ..." 40 seconds ago Up 38 seconds 0.0.0.0:88->80/tcp Nginx
关于Docker搭建私有镜像仓库与WordPress和docker 搭建私有镜像仓库的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于03: 使用docker搭建Harbor私有镜像仓库、6.1 基于docker搭建wordpress、Centos7 docker 私有镜像仓库搭建并配置域名、Docker Registry快速搭建私有镜像仓库等相关内容,可以在本站寻找。
本文标签: