1、搭建配置harbor私有仓库;
harbor网址参考
vmware官方开源服务地址:https://github.com/vmware/
harbor官方github地址:https://github.com/goharbor/harbor
harbor官方网址:https://goharbor.io/
harbor安装需要有docker和docker-compose环境
从https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-online-installer-v2.8.2.tgz下载harbor完整安装包
#解压安装包
tar xvf harbor-offline-installer-v2.8.2.tgz
#将配置文件重命名并修改
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
#修改主机名,域名或者IP都可以
hostname: harbor.zhao.com
#不用https的话可以注释掉
#https:
#port: 443
#certificate: /your/certificate/path
# private_key: /your/private/key/path
#修改harbor的管理员admin的密码
harbor_admin_password: 123456
#调整上传的容器镜像存放的文件位置
data_volume: /data/harbordata
其它配置可以使用默认配置
然后安装harbor,在解压的harbor目录下直接
./prepare或./prepare --with-trivy(直接安装使用自带的扫描器),也可以安装后后面使用./prepare --with-trivy来打来扫描器
之后直接使用本机地址访问,或者使用配置的域名访问都可以(域名记得添加解析)
后面可以上传镜像
#上传服务器先添加域名解析
vim /etc/hosts
192.168.204.129 harbor.zhao.com
#配置docker service的本地信任仓库
vim /lib/systemd/system/docker.service
找到ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 在这行后面添加 --insecure-registry 192.168.204.129
#然后重启加载配置文件
systemctl daemon-reload
systemctl restart docker
#然后登录harbor
docker login 192.168.204.129
#用户名为admin,密码是harbor配置文件设置的密码
然后上传镜像
#先修改镜像的tag
docker tag centos-nginx:1.24.0 192.168.204.129/web/centos-nginx:1.24.0
#上传镜像
docker push 192.168.204.129/web/centos-nginx:1.24.0
#下载镜像
docker pull 192.168.204.129/web/centos-nginx:1.24.0
2、掌握docker网络;
docker的网络类型有四种:
Bridge:桥接模式,使用参数-net=bridge指定,不指定默认就是bridge模式,该模式创建的容器会为每一个容器分配自己的网络IP等信息,并将容器连接到一个虚拟网桥与外界通信,该模式比较常用。
Host模式:主机网络模式,使用参数-net=host指定,如果指定了使用host模式,那新创建的容器不会创建自己的虚拟网卡,而是直接使用宿主机的网卡和IP地址,所以在容器里看到的IP信息就是宿主机的信息,访问容器的时候直接使用宿主机IP+容器的端口就可以访问,这时容器的文件系统、系统进程等资源依旧和宿主机保持隔离。该模式下的网络性能最好,但要防止启动的容器端口与宿主机已经启动的服务端口冲突,否则会报错。
none模式:使用参数-net=none指定,使用none模式,容器不会进行任何网络配置,没有网卡、IP、路由,默认没法和外界通信,需要手动添加网卡配置IP等。
Container模式:使用参数-net=container:名称或ID指定,使用该模式的容器需要指定和一个已经存在的容器共享一个网络,而不是和宿主机共享网络,新创建的容器不会创建自己的网卡、IP,而是和一个已经存在的被指定的容器共享IP和端口范围,所以这个容器的端口不能和被指定的容器的端口冲突,除了网络以外,该容器的文件系统、系统进程等资源与指定的容器依旧保持隔离,两个容器的进程可以通过lo网卡及容器IP进行通信。
3、安装docker-compose并利用它组装一个多容器的服务:如nginx、mysql、php
先使用上面的方法安装docker-compose,
再单独制作各种的容器镜像
#先制作mysql镜像
docker pull mysql
#启动容器并设置mysql的root密码
docker run -it -d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:latest
#测试远程登录,如果使用navicat登录测试的话,需要修改mysql用户的加密方式为mysql_native_password
#修改nginx配置文件,在sever段下添加
location ~ \.php$ {
root /data/nginx/html; #代码目录
fastcgi_pass 192.168.204.140:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #修改为$document_root
include fastcgi_params;
}
#再使用Dockerfile制作nginx镜像
root@localhost nginx]# cat Dockerfile
FROM centos:7.9.2009
MAINTAINER zjw
RUN yum install -y epel-release && yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
ADD nginx-1.24.0.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.24.0 && ./configure --prefix=/apps/nginx --with-http_sub_module && make && make install
RUN useradd nginx -u 2023
ADD nginx.conf /apps/nginx/conf/nginx.conf
RUN ln -s /apps/nginx/sbin/nginx /usr/bin/nginx
EXPOSE 80 443
CMD ["nginx","-g","daemon off;"]
#启动nginx镜像
docker run -it -d -p 80:80 -v /data/nginx/html/:/data/nginx/html/ nginx-php:1.24
#最后制作php镜像
#先修改php的配置文件
listen = 0.0.0.0:9000
#注释掉行访问限制
#listen.allowed_clients = 127.0.0.1
user = nginx
group = nginx
#再用Dockerfile制作镜像
[root@localhost php]# cat Dockerfile
FROM centos:7.9.2009
MAINTAINER ZJW
RUN yum install -y epel-release && yum install -y php-fpm php-mysql net-tools vim wget tree lrzsz iproute net-tools iotop
COPY www.conf /etc/php-fpm.d
RUN useradd nginx -u 2222
EXPOSE 9000
ENTRYPOINT ["/usr/sbin/php-fpm"]
#启动php镜像
docker run -it -d -v /data/nginx/html:/data/nginx/html -p 9000:9000 php:latest
在网上找了个测试的简单网页,测试镜像是否符合需要
在上面的挂载的目录/data/nginx/html下创建
#测试nginx-php的连接
[root@localhost html]# cat info.php
<?php
phpinfo();
?>
#测试nginx-php-mysql的连接
[root@localhost html]# cat index.php
<?php
$conn = mysql_connect('192.168.204.140','root','123456');
if ($conn)
echo 'The connection to MYSQL is successful';
else
echo 'Faild to connect to MYSQL';
mysql_close();
?>
最后制作docker-compose文件
[root@localhost docker-compose]# cat docker-compose.yml
version: '2.0'
services:
nginx-servier:
image: nginx-php:1.24
container_name: nginx-php
networks:
- backend
volumes:
- /data/nginx/html:/data/nginx/html
expose:
- 80
ports:
- "80:80"
links:
- php-server
php-server:
image: php:latest
container_name: php-server
networks:
- backend
volumes:
- /data/nginx/html:/data/nginx/html
expose:
- 9000
ports:
- "9000:9000"
links:
- mysql-server
mysql-server:
image: mysql:latest
container_name: mysql-server
networks:
- backend
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
expose:
- 3306
ports:
- "3306:3306"
networks:
front:
driver: bridge
backend:
driver: bridge
default:
external:
name: bridge
最后再使用刚才的测试网页测试是否连接成功