初识docker第二周

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

最后再使用刚才的测试网页测试是否连接成功


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容