Docker安装和Harbor高可用部署

一、Namespace和cgroup介绍

1.1 Namespace

    Namespace是linux系统的底层概念,在内核层实现,用于提供容器独立的运行空间;分为MNT Namespace、IPC Namespace、UTS Namespace、PID Namespace、Net Namespace、User Namespace。

  • MNT Namespace:提供磁盘挂载点和文件系统的隔离能力;每个容器都要有独立的根文件系统,有独立的用户空间,以实现在容器里面启动服务并且使用容器的运行环境,即一个宿主机是Ubuntu的服务器,可以在里边启动一个centos运行环境的容器并且在容器里面启动一个Nginx服务,此Nginx运行时使用的运行环境就是centos系统目录的运行环境,但是在容器里面不能访问宿主机的资源,宿主机是使用了chroot技术把容器锁定到一个指定的运行目录里面并作为容器的根运行环境。

  • IPC Namespace:提供进程间通信的隔离能力;允许容器内的不同进程的访问。

  • UTS Namespace:提供主机名隔离能力;用于系统标识,其中包含hostname和域名domainname,它使得一个容器拥有属于自己hostname标识,这个主机名标识独立于宿主机系统和其上的其他容器。

  • PID Namespace:提供进程隔离能力;多个容器的进程如PID编号,容器內的主进程生成与回收子进程等。

  • Net Namespace:提供网络隔离能力;docker使用network启动一个vethX接口,这样你的容器将拥有它自己的桥接ip地址,通常是docker0,而docker0实质就是Linux的虚拟网桥,网桥是在OSI七层模型的数据链路层的网络设备,通过mac地址对网络进行划分,并且在不通网络直接传递数据。

  • User Namespace:提供用户隔离能力;允许在各个宿主机的各个容器空间内创建相同的用户以及相同的用户UID和GID,会把用户的操作范围限制在每个容器内,不同容器文件系统相互独立。

1.2 cgroup

    cgroup的主要作用就是限制一个进程能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等等,还能够对进程优先级设置,以及将进程挂起和恢复等操作。

  • blkio: 块设备IO限制

  • CPU: 使用调度程序为cgroup任务提供cpu的访问

  • cpuacct:产生cgroup任务的cpu资源报告。

  • cpuset:如果是多核心的cpu,这个子系统会为cgroup任务分配单独的cpu和内存。

  • devices:允许或拒绝cgroup任务对设备的访问。

  • freezer:暂停和恢复cgroup任务。

  • memory:设置每个cgroup的内存限制以及产生内存资源报告。

  • net_cls:标记每个网络包以供cgroup方便使用。

  • ns:命名空间子系统。

  • perf_event:增加了对每个cgroup的监测跟踪的能力,可以监测属于某个特定cgroup的所有线程以及运行在特定CPU上的线程。

二、docker的安装

环境准备

2.1 修改主机资源配置文件:

cat >> /etc/security/limits.conf <<EOF
* soft    core            unlimited
* hard    core            unlimited
* soft    nproc           1000000
* hard    nproc           1000000
* soft    nofile          1000000
* hard    nofile          1000000
* soft    memlock         32000
* hard    memlock         32000
* soft    msgqueue        8192000
* hard    msgqueue        8192000
EOF
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
vm.max_map_count=262144
kernel.pid_max=4194303
fs.file-max=1000000
net.ipv4.tcp_max_tw_buckets=6000
net.netfilter.nf_conntrack_max=2097152

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF

2.2 解压docker压缩包并设置为开机自启动

tar xf docker-20.10.9.tgz    # 需要先上传包
cp docker/*  /usr/bin
cp containerd.service /lib/systemd/system/containerd.service
cp docker.service  /lib/systemd/system/docker.service
cp docker.socket /lib/systemd/system/docker.socket
groupadd  -r test
groupadd  -r docker # 如果不添加docker组,docker起不来
useradd -r -m -g test test
usermod test -G docker
systemctl  enable containerd.service && systemctl  restart containerd.service
systemctl  enable docker.service && systemctl  restart docker.service
systemctl  enable docker.socket && systemctl  restart docker.socket 

2.3 docker启动

docker.jpg

三、Docker常用命令介绍

  • docker image
docker image ls    # 列出镜像,等同于docker images
docker image history IMAGE    # 查看镜像历史信息
docker image inspect IMAGE    # 查看镜像详细信息
docker image load -i *.tar.gz    # 加载镜像,等同于docker load
docker image prune    # 删除没有使用的镜像
docker image pull IMAGE    # 拉取镜像,等同于docker pull
docker image rm IMAGE    # 删除镜像,等同于docker rmi
docker image save IMAGE  -o IMAGE.tar.gz    # 保存镜像为tar包,等同于docker save
docker image tag IMAGE newIMAGE    # 为镜像打标签
  • docker system
docker system df    # 查看docker使用磁盘信息
docker system events    # 查看实时事件信息
docker system info    # 查看docker信息,等同于docker info
docker system prune    # 删除没有使用的镜像
  • docker volume
docker volume create    # 创建docker卷
docker volume inspect VOLUME    # 查看docker卷详细信息
docker volume ls    # 列出docker卷
docker volume prune    # 删除没有使用的本地卷
docker volume rm VOLUME    # 删除docker卷
  • docker build
docker build -t IMAGE .    # 指定tag打镜像
docker build -f PATH .    # 指定Dockerfile文件的位置打镜像
  • docker cp
docker cp CONTAINER:SRC_PATH DEST_PATH    # 从容器拷贝文件到宿主机
docker cp SRC_PATH CONTAINER:DEST_PATH    # 从宿主机拷贝文件到容器
  • docker create
docker create IMAGE    # 创建一个新容器不运行
  • docker exec
docker exec -i -t CONTAINER bash    # 在运行中的容器执行命令
  • docker images
docker images -a    # 列出镜像信息,等同于docker images
docker images -q    # 只列出镜像id列
  • docker info
docker info    # 查看docker信息
  • docker inspect
docker inspect CONTAINER    # 查看容器详细信息
docker inspect -s CONTAINER    # 比容器详细信息多文件大小信息
  • docker kill
docker kill container    # 杀掉正在运行的容器
  • docker load
docker load -i *.tar.gz    # 加载镜像
  • docker login
docker login HARBOR_IP:PORT -uUSER -pPASSWORD    # 指定harbor地址、用户、密码,登陆harbor
  • docker logout
docker logout HARBOR_IP:PORT    # 从镜像仓库中退出登陆
  • docker logs
docker logs -f CONTAINER    # 实时查看容器日志
docker logs -t CONTAINER    # 列出容器日志时间戳
  • docker ps
docker ps    # 列出正在运行的容器
docker ps -a    # 列出所有容器
docker ps -n N    # 列出最近创建的容器(包括所有状态)
docker ps -l    # 列出最近创建的一个容器
docker ps -q    # 列出正在运行容器的容器id
docker ps -s    # 多列出容器文件总大小
  • docker pull
docker pull IMAGE    # 拉取镜像
  • docker push
docker push IMAGE    # 推送镜像
  • docker restart
docker restart CONTAINER    # 重启容器
  • docker rm
docker rm CONTAINER    # 删除容器
docker rm -f    # 强制删除容器
  • docker rmi
docker rmi IMAGE    # 删除镜像
  • docker run
docker run -itd IMAGE    # 后台运行容器
  • docker save
docker save IMAGE -o IMAGE.tar.gz    # 保存镜像并指定压缩包名字
  • docker search
docker search IMAGE    # 在Docker Hub中搜索镜像
  • docker start
docker start CONTAINER    # 启动停止的容器
  • docker stats
docker stats    # 列出正在运行容器的资源使用信息
docker stats -a    # 列出所有容器的资源使用信息
  • docker stop
docker stop CONTAINER    # 停止运行中的容器
  • docker tag
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]    # 为源镜像创建新的标签
  • docker top
docker top CONTAINER    # 列出容器中运行的进程信息
  • docker version
docker version    # 列出docker版本信息

四、部署单机Harbor

环境准备

4.1 安装docker-compose

mv docker-compose-linux-x86_64 docker-compose    # 需要先上传包
cp docker-compose /usr/bin/
chmod +x /usr/bin/docker-compose

4.2 安装harbor

tar xvf harbor-offline-installer-v2.4.1.tgz    # 需要先上传包
chmod +x prepare install.sh common.sh
docker load < harbor.v2.4.1.tar.gz
cp harbor.yml.tmpl harbor.yml

修改harbor.yml文件

  • 修改第五行 hostname 为主机ip或域名
  • 注释第13行 https
  • 注释第15行 port: 443
  • 修改第34行 harbor_admin_password,设置一个admin用户的密码
  • 修改第47行 data_volume,修改harbor的数据目录
  • 修改第120行 location,修改harbor的日志目录

启动harbor

bash install.sh
docker-compose ps
docker-compose ps.jpg

4.3 修改harbor地址为可信任源

cat >> /etc/docker/daemon.json <<EOF
{
"insecure-registries": ["HARBOR_IP"]
}
EOF
systemctl restart docker
docker-compose up -d
docker login HOSTNAME -uadmin # 要等harbor的容器状态都成为running (healthy)再登陆,不然可能会登陆失败
docker login.jpg

五、部署基于负载均衡的Harbor高可用

环境准备

5.1 创建项目并添加复制策略

    两个harbor添加方式一样

  • 点击项目,新建项目,项目类型选择公开,点击确定


    create project.jpg
  • 点击系统管理,仓库管理,新建目标,验证远程证书去掉勾选,输入目标URL和用户名密码后,点击测试连接,显示测试连接成功,点击确定


    create registry.jpg
  • 点击系统管理,复制管理,新建规则,复制模式选择默认的Push-based,触发模式选择事件驱动,勾选删除本地资源时同时也删除远程的资源,点击确定


    add duplicate.jpg

5.2 部署haproxy

    由于需要haproxy需要用到lua,所以要先下载lua并编译

apt install  gcc make libreadline-dev libsystemd-dev zlib1g-dev libpcre3 libpcre3-dev libssl-dev
curl -R -O http://www.lua.org/ftp/lua-5.4.3.tar.gz
tar zxf lua-5.4.3.tar.gz
cd lua-5.4.3
make all test
tar xf haproxy-2.4.10.tar.gz    # 需要先上传包
cd haproxy-2.4.10
make ARCH=x86_64 TARGET=linux-glibc USE_OPENSSL=1 USE_LUA=1 USE_PCRE=1 USE_SYSTEMD=1 \
USE_CPU_AFFINITY=1 USE_LUA=1 LUA_INC=/usr/local/src/lua-5.4.3/src LUA_LIB=/usr/local/src/lua-5.4.3/src \
prefix=/usr/local/haproxy    # 注意修改lua源码目录
make install PREFIX=/usr/local/haproxy
cp haproxy /usr/sbin/

cat >> /lib/systemd/system/haproxy.service <<EOF
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
EOF

useradd haproxy -s /sbin/nologin
mkdir -p /var/lib/haproxy/
cat >> /etc/haproxy/haproxy.cfg <<EOF
global
    chroot /usr/local/haproxy
    user haproxy
    group haproxy
    maxconn 5000
    daemon
    pidfile /var/lib/haproxy/haproxy.pid
    stats socket /tmp/haproxy-fe.sock mode 666 level admin

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    option  httpclose
    retries 3
    maxconn 4000
    timeout connect 5000
    timeout client  50000
    timeout server  50000

listen stats
    mode http
    bind *:8001
    stats uri /
    stats admin if TRUE
    stats refresh 10s

listen harbor_ha
    bind HARBOR_VIP:PORT
    mode http
    balance source
    server harbor1 HARBOR1_IP:PORT check inter 2s fall 3 rise 5
    server harbor2 HARBOR2_IP:PORT check inter 2s fall 3 rise 5
EOF

systemctl start haproxy
vim /etc/docker/daemon.json
{
 "insecure-registries":["HARBOR_VIP:PORT"]
}
systemctl restart docker
docker-compose start
docker login HARBOR_VIP:PORT -uadmin
docker login.jpg

5.3 测试harbor的高可用

  • 推送一个镜像
docker pull alpine:latest
docker tag alpine HARBOR_VIP:PORT/PROJECT/alpine:latest
docker push HARBOR_VIP:PORT/PROJECT/alpine:latest
  • 拉取镜像测试
docker pull HARBOR_VIP:PORT/PROJECT/alpine:latest
pull image.jpg
  • 停掉一个harbor拉取镜像测试
docker-compose stop
docker-compose ps
docker pull HARBOR_VIP:PORT/PROJECT/alpine:latest
pull image.jpg
  • 停掉两个harbor拉取镜像测试
docker-compose stop
docker-compose ps
docker pull HARBOR_VIP:PORT/PROJECT/alpine:latest
stop two pull image.jpg
  • 起一个harbor拉取镜像测试


    start one pull image.jpg

    搭建完成,完结撒花❀❀❀!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容