当前位置: 首页 > 工具软件 > mix_docker > 使用案例 >

企业级容器技术 Docker

魏晨
2023-12-01

企业级容器技术 Docker

docker隔离级别中包含两个核心组成:

Namespace(名称空间):namespace是Linux系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在内核,各 个docker容器运行在同一个docker主进程并且共用同一个宿主机系统内核,各docker容器运行在宿主机 的用户空间,每个容器都要有类似于虚拟机一样的相互隔离的运行空间,但是容器技术是在一个进程内 实现运行指定服务的运行环境,并且还可以保护宿主机内核不受其他进程的干扰和影响,如文件系统空 间、网络空间、进程空间等,目前主要通过以下技术实现容器运行空间的相互隔离:

Control groups: Cgroups 最主要的作用,就是限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽 等等。此外,还能够对进程进行优先级设置,资源的计量以及资源的控制(比如:将进程挂起和恢复等操 作)。

1 docker的安装

#查看版本号:docker version 
#查看版本详细信息:docker info

#centos包安装docker
yum -y install docker
rpm -ql docker
systemctl enable --now docker

#centos安装指定版本的docker
[root@rocky8 ~]#cat /etc/yum.repos.d/docker.repo
[docker-ce]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/8/x86_64/stable/
gpgcheck=0
#查看docker的所有版本信息
[root@rocky8 ~]#yum list docker-ce --showduplicates
#安装指定版本的docker
[root@rocky8 ~]#yum install docker-ce-3:20.10.10-3.el8 docker-ce-cli-1:20.10.10-3.el8
#检查安装结果
docker --version
#ubuntu 包安装docker
apt -y install docker.io
#ubuntu 安装指定版本的docker
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/dockerce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
....
.....这几行均为上述几条命令列出的版本
.....
# Step 5: 安装指定版本的Docker-CE: (VERSION例如上面的5:17.03.1~ce-0~ubuntu-xenial)
sudo apt-get -y install docker-ce=[VERSION] docker-ce-cli=[VERSION]
#示例:指定版本安装
apt-get -y install docker-ce=5:18.09.9~3-0~ubuntu-bionic  docker-ce-cli=5:18.09.9~3-0~ubuntu-bionic


dpkg -L docker-ce
dpkg -L docker-ce-cli

2 docker 的常用命令

2.1 拉取镜像

docker pull [镜像名称]:[版本号,不写的话默认安装最新版本(latest)] 
或者用 
docker run [镜像名称]:[版本号,不写的话默认安装最新版本(latest)]

复杂点的:
docker run -d -p 3306:3306 --name mysql mysql
-d:后台运行
-p:指定端口号
--name: 后端运行的服务名,可根据自己的喜好编写
mysql: 镜像名称,此处没有写镜像的版本号,默认安装最新版本。

还有更为全面的命令:
 docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=123456 --name mysql -d  mysql:8.0.29-oracle

2.2 查看版本号及其他信息

docker version
docker info

#查看镜像分层历史
docker image history 【镜像】
#查看镜像的详细情况
docker inspect 【镜像】

#查看已经拉取的镜像
docker images             #附加选项:-qa

#查看已经运行的容器
docker ps
#查看所有容器
docker ps -a

#命令行查看服务的各种版本镜像信息
docker search 【镜像】
docker search nginx

2.3 镜像打包、传输、加载、压缩

#镜像打包
#语法:docker save 【镜像】 -o 【镜像】.tar
#案例:docker save nginx -o nginx.tar
      for i in `docker images |awk 'NR>=2{print $1":"$2}'`;do docker save $i -o $i.tar;done
      docker save `docker images |awk 'NR>=2{print $1":"$2}'` -o alll.tar
      docker image save `docker image ls --format "{{.Repository}}:{{.Tag}}"` -o all.tar

#镜像打包压缩
gzip [镜像].tar

#镜像包传输
scp [镜像].tar 10.0.0.101:

#镜像加载
docker load -i 【镜像】.tar
镜像存放宿主机的目录:/usr/lib/docker/overlay2/

2.4 镜像加速

#镜像加速配置
#centos 镜像加速配置
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://wfydvkax.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker


#ubuntu 镜像加速配置
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://wfydvkax.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

2.5 镜像删除

docker image rm -f 【镜像】= docker rmi -f 【镜像】
#例子:
docker rmi -f nginx=docker image rm -f nginx   
-f: 删除不在运行的镜像可不加-f ,强行删除正在运行的镜像需要加-f

#删除docker
[root@ubuntu ~]#apt purge docker-ce
[root@ubuntu ~]#rm -rf /var/lib/docker

[root@centos7 ~]#yum remove docker-ce
#删除docker资源存放的相关文件
[root@centos7 ~]#rm -rf /var/lib/docker

2.6 开机运行容器

#默认容器不会自动启动
[root@ubuntu1804 ~]#docker run -d --name nginx -p 80:80 nginx

#设置容器总是运行
[root@ubuntu1804 ~]#docker run -d --name nginx --restart=always -p 80:80 nginx

2.7 删除容器

docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker container rm [OPTIONS] CONTAINER [CONTAINER...]

#删除单个容器
docker ps(查看正在运行的容器)
docker ps -qa (查看所有容器)
docker rm -f [容器:可以是容器名称也可以是容器ID]
#删除所有容器
[root@ubuntu1804 ~]#docker ps -qa | xargs docker rm -f
#或者 docker rm -f `docker ps -qa`

2.8 容器的启动与停止

#停止容器
docker stop 【容器名】
docker stop nginx
#启动容器
docker start 【容器名】
docker start nginx
#重启容器
docker restart nginx

#批量启动和停止容器
docker start $(docker ps -a -q)  
docker stop $(docker ps -a -q)

#启动并进入容器
docker run --name=c1 -it ubuntu bash

#强制关闭所有运行中的容器
[root@ubuntu1804 ~]#docker kill `docker ps -a -q`

#容器的暂停和恢复
[root@ubuntu1804 ~]#docker pause   blissful_payne
blissful_payne

[root@ubuntu1804 ~]#docker unpause blissful_payne
blissful_payne

2.9 使用exec命令

#执行一次性命令
[root@ubuntu1804 ~]#docker exec 2478 cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)

#进入容器,执行命令,exit退出但容器不停止
[root@ubuntu1804 ~]#docker exec -it 2478 bash
[root@24788f69cec6 /]# cat /etc/redhat-release 
CentOS Linux release 8.1.1911 (Core) 
[root@24788f69cec6 /]# exit
exit

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kAsAbb9c-1661178951974)(E:\运维笔记\企业级容器技术 Docker\企业级容器技术 Docker.assets\1656766416046.png)]

2.10 实现端口映射

#实现端口映射
[root@ubuntu1804 ~]#docker run -d -P --name nginx1 nginx
286a3dedf159fbf0a4b895741a9d95562c87b44782ea85c8d172474da8860c36
#注:-P 映射到宿主机的端口是随机端口
[root@ubuntu1804 ~]#docker exec -it nginx1 hostname -i
172.17.0.2
[root@ubuntu1804 ~]#docker port nginx1
80/tcp -> 0.0.0.0:32769

#方式1: 容器80端口映射宿主机本地随机端口
docker run  -p 80 --name nginx-test-port1 nginx

#方式2: 容器80端口映射到宿主机本地端口81
docker run  -p 81:80 --name nginx-test-port2 nginx

#方式3: 宿主机本地IP:宿主机本地端口:容器端口
docker run  -p 10.0.0.100:82:80 --name nginx-test-port3 docker.io/nginx

#方式4: 宿主机本地IP:宿主机本地随机端口:容器端口,默认从32768开始
docker run -p 10.0.0.100::80 --name nginx-test-port4 docker.io/nginx

#方式5: 宿主机本机ip:宿主机本地端口:容器端口/协议,默认为tcp协议
docker run  -p 10.0.0.100:83:80/udp --name nginx-test-port5 docker.io/nginx

#方式6: 一次性映射多个端口+协议
docker run  -p 8080:80/tcp -p 8443:443/tcp -p 53:53/udp --name nginx-test-port6 
nginx

3 docker 制作镜像综合实验

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7GxsKx4b-1661178951978)(E:\运维笔记\企业级容器技术 Docker\企业级容器技术 Docker.assets\1657015883130.png)]

#Ubuntu配置过程:
mkdir/data/dockerfile/{web/{nginx,apache,tomcat,jdk},system/{rocky,centos,ubuntu,alpine,ian}} -p

root@ubuntu2004:~# tree /data/dockerfile
/data/dockerfile
├── system
│   ├── alpine
│   ├── centos
│   ├── debian
│   ├── rocky
│   │   ├── Dockerfile
│   │   ├── rocky-8.5
│   │   │   ├── Dockerfile
│   │   │   └── rocky-8.5-docker-x86_64.tar.xz
│   │   └── rocky-8.5-20220705
│   │       ├── base.repo
│   │       └── Dockerfile
│   └── ubuntu
│       └── Dockerfile
└── web
    ├── apache
    ├── jdk
    ├── nginx
    │   ├── nginx01
    │   │   ├── Dockerfile
    │   │   ├── entrypoint.sh
    │   │   └── index.html
    │   └── nginx02
    │       ├── build.sh
    │       ├── Dockerfile
    │       ├── index.html
    │       ├── nginx-1.22.0.tar.gz
    │       ├── nginx.conf
    │       ├── test2.html
    │       └── test.html
    └── tomcat

15 directories, 16 files

3.1 Ubuntu制作rocky基础镜像

在Ubuntu上面的操作

root@ubuntu2004:~# tree /data/dockerfile/system/rocky/
/data/dockerfile/system/rocky/
├── Dockerfile
├── rocky-8.5
│   ├── Dockerfile
│   └── rocky-8.5-docker-x86_64.tar.xz
└── rocky-8.5-20220705
    ├── base.repo
    └── Dockerfile

2 directories, 5 files

root@ubuntu2004:/data/dockerfile/system/rocky/rocky-8.5-20220705# cat Dockerfile 
FROM rockylinux:latest
LABEL author=mqb
LABEL version=v1.0
LABEL multi.description="test"multi.date="2022-07-05"multi.name="mqb"
RUN  rm -f /etc/yum.repos.d/*
COPY base.repo /etc/yum.repos.d/
RUN  yum clean all && \
     rm -f /etc/localtime && \
     ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
     yum -y install bash-completion psmisc git tree net-tools vim lsof iproute && \
     rm -rf  /var/cache/dnf/* && \
     groupadd -g 88 www && \
     useradd -g www -u 88 -r -s /sbin/nologin -M -d /home/www www 
CMD  tail -f /etc/hosts


root@ubuntu2004:/data/dockerfile/system/rocky/rocky-8.5-20220705# cat base.repo 
[BaseOS]
name=BaseOS
baseurl=https://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/
        https://mirrors.huaweicloud.com/centos/$releasever/BaseOS/$basearch/os/
        https://mirrors.cloud.tencent.com/centos/$releasever/BaseOS/$basearch/os/
        https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/BaseOS/$basearch/os/
        http://mirrors.163.com//centos/$releasever/BaseOS/$basearch/os/
        http://mirrors.sohu.com/centos/$releasever/BaseOS/$basearch/os/ 
gpgcheck=0

[AppStream]
name=AppStream
baseurl=https://mirrors.aliyun.com/centos/$releasever/AppStream/$basearch/os/
        https://mirrors.huaweicloud.com/centos/$releasever/AppStream/$basearch/os/
        https://mirrors.cloud.tencent.com/centos/$releasever/AppStream/$basearch/os/
        https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/AppStream/$basearch/os/
        http://mirrors.163.com/centos/$releasever/AppStream/$basearch/os/
        http://mirrors.sohu.com/centos/$releasever/AppStream/$basearch/os/
gpgcheck=0

[EPEL]
name=EPEL
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch/
        https://mirrors.huaweicloud.com/epel/$releasever/Everything/$basearch/
        https://mirrors.cloud.tencent.com/epel/$releasever/Everything/$basearch/
        https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/Everything/$basearch/
gpgcheck=0

[extras]
name=extras
baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/os/
        https://mirrors.huaweicloud.com/centos/$releasever/extras/$basearch/os/
        https://mirrors.cloud.tencent.com/centos/$releasever/extras/$basearch/os/
        https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/os/
        http://mirrors.163.com/centos/$releasever/extras/$basearch/os/
        http://mirrors.sohu.com/centos/$releasever/extras/$basearch/os/
gpgcheck=0

[centosplus]
name=centosplus
baseurl=https://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/os/
        https://mirrors.huaweicloud.com/centos/$releasever/centosplus/$basearch/os/
        https://mirrors.cloud.tencent.com/centos/$releasever/centosplus/$basearch/os/
        https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/centosplus/$basearch/os/
        http://mirrors.163.com/centos/$releasever/centosplus/$basearch/os/
        http://mirrors.sohu.com/centos/$releasever/centosplus/$basearch/os/
gpgcheck=0


#生成镜像
[root@ubuntu2004:]# docker build -t rockylinux:8.5-20220705 .

3.2 Ubuntu制作基于rocky基础镜像做的nginx镜像

#目录下的相关文件
root@ubuntu2004:/data/dockerfile/web/nginx/nginx02# ls
build.sh  Dockerfile  index.html  nginx-1.22.0.tar.gz  nginx.conf  test2.html  test.html
root@ubuntu2004:/data/dockerfile/web/nginx/nginx02# tree
.
├── build.sh
├── Dockerfile
├── index.html 可有可无
├── nginx-1.22.0.tar.gz
├── nginx.conf
├── test2.html 可有可无
└── test.html  可有可无

0 directories, 7 files

#基于rocky基础镜像做的nginx的Dockerfile文件
root@ubuntu2004:/data/dockerfile/web/nginx/nginx02# cat Dockerfile 
FROM rockylinux:8.5-20220705
LABEL author="meiqibin"
ENV NGINX_VERSION=1.22.0
ADD nginx-${NGINX_VERSION}.tar.gz /usr/local
RUN yum -y install gcc make gcc-c++ libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel && \
    rm -rf /var/cache/dnf/* && \ 
    cd /usr/local/nginx-${NGINX_VERSION} && \
    ./configure --prefix=/apps/nginx && \
    make && make install && \
    rm -rf /usr/local/nginx*
COPY nginx.conf /apps/nginx/conf/
VOLUME ["/data/html"]
EXPOSE 80
CMD /apps/nginx/sbin/nginx -g "daemon off;"
#COPY *.html /data/html/

#nginx配置文件
root@ubuntu2004:/data/dockerfile/web/nginx/nginx02# cat nginx.conf 
user  www;
worker_processes  auto;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /data/html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

#下载nginx源码文件:
 wget http://nginx.org/download/nginx-1.22.0.tar.gz
 
#为了加快后期制作容器,build做出脚本文件
root@ubuntu2004:/data/dockerfile/web/nginx/nginx02# cat build.sh 
#!/bin/bash
#
#********************************************************************
#Author:            meiqibin
#QQ:                29308620
#Date:              2022-07-04
#FileName:          build.sh
#URL:               http://www.meiqibin.com
#Description:       The test script
#Copyright (C):     2022 All rights reserved
#********************************************************************
tag=$1
docker build -t nginx:$tag .


#制作nginx基础镜像
docker build -t nginx:1.22.0-20220705 . 

#制作nfs共享文件
apt -y install nfs-common 
mkdir /data/nginx -p

3.3 rocky镜像配置

3.3.1 从Ubuntu拷贝nginx基础镜像到rocky上

#默认rocky装有docker软件,并是启动状态
#从10.0.0.100(Ubuntu)拷贝已经做好的nginx镜像
1、在10.0.0.100上的操作:
docker save nginx:1.22.0-20220705 -o nginx-1.22.0-20220705.tar
scp nginx-1.22.0-20220705.tar 10.0.0.18:

2、在10.0.0.18上的操作:
docker load -i nginx-1.22.0-20220705-2.tar

docker images 命令可以看到多出来的 nginx:1.22.0-20220705镜像

3、制作nfs共享文件
yum -y install nfs-utils
mkdir /data/nginx -p

3.4 搭nfs-server共享服务器

#此操作在10.0.0.7上操作
1、安装nfs-server软件
yum -y install nfs-utils
systemctl enable --now nfs-server.service

2、创建共享文件
mkdir /data/nfs -p

3、写web默认页面
vim  /data/nfs/index.html
<h1> welcome to nfs poxy-website </h1> 

4、写共享规则
vim /etc/exports
/data/nfs *(ro) 

5、共享规则生效
exportfs -v
/data/nfs     	<world>(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)

6、重启nfs-server服务器
systemctl restart nfs-server.service

3.4.1 ubuntu 挂载共享文件

#测试Ubuntu端是否能看到nfs-server共享的文件目录
root@ubuntu2004:~# showmount -e 10.0.0.7
Export list for 10.0.0.7:
/data/nfs *

#永久挂载nfs-server共享的文件目录
root@ubuntu2004:~# cat /etc/fstab
增加一行
10.0.0.7:/data/nfs    /data/nginx    nfs  _netdev  0 0

root@ubuntu2004:~# mount -a

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-16n2aNai-1661178951980)(E:\运维笔记\企业级容器技术 Docker\企业级容器技术 Docker.assets\1657021225345.png)]

**3.4.2 rocky 挂载共享文件 **

#测试客户端是否能看到服务器端共享的文件目录
[19:26:27 root@rocky8 ~]#showmount -e 10.0.0.7
Export list for 10.0.0.7:
/data/nfs *

#永久挂载nfs-server共享的文件目录
[19:41:56 root@rocky8 ~]#cat /etc/fstab
增加一行
10.0.0.7:/data/nfs    /data/nginx    nfs  _netdev  0 0

[19:41:56 root@rocky8 ~]# mount -a

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NlfIFLKM-1661178951983)(E:\运维笔记\企业级容器技术 Docker\企业级容器技术 Docker.assets\1657021562209.png)]

3.5 搭建LVS负载均衡服务器

3.5.1 lvs服务器配置

此实验做的是LVS-NAT模式,需要LVS服务器有两个不同的网段,此主机已经有个10.0.0.7的私网IP,需要再加个仅主机模式的192.168.10.131网段的IP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XKpYCCl3-1661178951984)(E:\运维笔记\企业级容器技术 Docker\企业级容器技术 Docker.assets\1657022092420.png)]

#下载LVS服务器
yum -y install ipvsadm

#设置LVS规则
[17:22:04 root@rocky8 ~]#ipvsadm -A -t 192.168.10.131:80 -s rr
[17:22:41 root@rocky8 ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.10.131:80 rr
[17:22:43 root@rocky8 ~]#ipvsadm -a -t 192.168.10.131:80 -r 10.0.0.101:81 -m
[17:24:32 root@rocky8 ~]#ipvsadm -a -t 192.168.10.131:80 -r 10.0.0.101:82 -m
[17:24:39 root@rocky8 ~]#ipvsadm -a -t 192.168.10.131:80 -r 10.0.0.18:83 -m
[17:24:50 root@rocky8 ~]#ipvsadm -a -t 192.168.10.131:80 -r 10.0.0.18:84 -m
[17:25:00 root@rocky8 ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.10.131:80 rr
  -> 10.0.0.18:83                 Masq    1      0          0         
  -> 10.0.0.18:84                 Masq    1      0          0         
  -> 10.0.0.101:81                Masq    1      0          0         
  -> 10.0.0.101:82                Masq    1      0          0         

#开启防火墙转发功能
[17:25:08 root@rocky8 ~]#sysctl -a |grep ip_for
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0

[17:26:02 root@rocky8 ~]#vim /etc/sysctl.conf
增加一行
net.ipv4.ip_forward = 1

[17:26:59 root@rocky8 ~]#sysctl -p
net.ipv4.ip_forward = 1


3.5.2 LVS客户端配置

#ubunru
ip route del default via 10.0.0.2;ip route add default via 10.0.0.8
#rocky
ip route del default via 10.0.0.2;ip route add default via 10.0.0.8

3.6 宿主机启动容器

#ubuntu
docker run -d -v /data/nginx:/data/html -p 81:80 --name nginx01 nginx:1.22.0-20220705
docker run -d -v /data/nginx:/data/html -p 82:80 --name nginx02 nginx:1.22.0-20220705

#rocky
docker run -d -v /data/nginx:/data/html -p 83:80 --name nginx03 nginx:1.22.0-20220705
docker run -d -v /data/nginx:/data/html -p 84:80 --name nginx04 nginx:1.22.0-20220705
#开启日志,测试访问结果,看看是否负载均衡
Ubuntu:
docker exec -it nginx01 tail -f  /apps/nginx/logs/access.log
docker exec -it nginx02 tail -f  /apps/nginx/logs/access.log
rocky:
docker exec -it nginx03 tail -f  /apps/nginx/logs/access.log
docker exec -it nginx04 tail -f  /apps/nginx/logs/access.log

#打开window的字符界面测试
curl http://192.168.10.131

4 docker 实现wordpress持久化

方法一:

[root@ubuntu2004 ~]#docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=123456 --name mysql -d  -v /data/mysql:/var/lib/mysql --restart=always mysql:8.0.29-oracle

[root@ubuntu2004 ~]#docker run -d -p 80:80 --name wordpress -v /data/wordpess:/var/www/html --restart=always  wordpress:php7.4-apache

方法二:

docker create --name volume-server -v /data:/volume-data busybox

docker run --volumes-from volume-server containter1 
docker run --volumes-from volume-server containter2
docker run --volumes-from volume-server containter3


方法三:


docker run -v /data:/test1 --name c1 busybox
docker run -v /data:/test2 --name c2 busybox
docker run -v /data:/test3 --name c3 busybox

5 docker 网络连接模式

1 bridge网络模式

2 host模式

3 none 模式

4 container模式

5 自定义网络模式

6 搭建harbor镜像私有仓库1

6.1 安装docker

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RDXPMWkm-1661178951988)(E:\运维笔记\企业级容器技术 Docker\企业级容器技术 Docker.assets\1657196708469.png)]

环境准备: 共四台主机

  • 两台主机harbor服务器,地址: 10.0.0.101|102

  • 两台主机harbor客户端上传和下载镜像

6.2 安装docker-compose

6.3 安装harbor

6.4 镜像打标签

6.5 推送镜像

tml --restart=always wordpress:php7.4-apache


方法二:

```bash
docker create --name volume-server -v /data:/volume-data busybox

docker run --volumes-from volume-server containter1 
docker run --volumes-from volume-server containter2
docker run --volumes-from volume-server containter3


方法三:


docker run -v /data:/test1 --name c1 busybox
docker run -v /data:/test2 --name c2 busybox
docker run -v /data:/test3 --name c3 busybox

5 docker 网络连接模式

1 bridge网络模式

2 host模式

3 none 模式

4 container模式

5 自定义网络模式

 类似资料: