Docker

什么是容器礼搁?

本質(zhì)上是一個容器
是一個被隔離的環(huán)境
隔離的環(huán)境擁有自己的系統(tǒng)文件梳星,ip地址秀存,主機名等
容器就是在隔離的環(huán)境運行的一個進程,如果進程停止,容器就會銷毀。隔離的環(huán)境擁有自己的系統(tǒng)文件瑰妄,ip地址,主機名等

容器和虛擬化的區(qū)別

linux容器技術(shù)映砖,容器虛擬化和kvm虛擬化的區(qū)別
 
kvm虛擬化: 需要硬件的支持间坐,需要模擬硬件,可以運行不同的操作系統(tǒng)邑退,啟動時間分鐘級(開機啟動流程)
linux開機啟動流程: 
bios開機硬件自檢 根據(jù)bios設(shè)置的優(yōu)先啟動項boot 網(wǎng)卡 硬盤 u盤 光驅(qū)
讀取mbr引導 2T UEFI(gpt分區(qū)) mbr硬盤分區(qū)信息竹宋,內(nèi)核加載路徑, 
加載內(nèi)核 啟動第一個進程/sbin/init systemd 
系統(tǒng)初始化完成 運行服務(nginx,httpd地技,mysql)

容器啟動流程: 共用宿主機內(nèi)核: 第一個進程直接啟動服務(nginx蜈七,httpd,mysql)

容器:共用宿主機內(nèi)核莫矗,輕量級飒硅,損耗少,啟動快作谚,性能高三娩,只能運行l(wèi)inux系統(tǒng)
虛擬機:需要硬件的支持,需要模擬硬件妹懒,需要走開機啟動流程尽棕,可以運行不同的操作系統(tǒng)

容器技術(shù)的發(fā)展過程:

    1.chroot技術(shù),新建一個子系統(tǒng)(擁有自己完整的系統(tǒng)文件)
參考資料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/ chang root
    2.linux容器(lxc) linux container(namespaces 命名空間 隔離環(huán)境 及cgroups 資源限制)

容器的類型
 lxc:進程多彬伦,需要初始化化系統(tǒng)滔悉,然后在啟動服務進程
 docker:直接啟動進程服務,
 rkt:

Docker容器

Docker是通過進程虛擬化技術(shù)(namespaces及cgroupscpu单绑、內(nèi)存回官、磁盤io等)來提供容器的資源隔離與安全保障等。
由于Docker通過操作系統(tǒng)層的虛擬化實現(xiàn)隔離搂橙,所以Docker容器在運行時歉提,不需要類似虛擬機(VM)額外的操作系統(tǒng)開銷,提高資源利用率区转。
namespace  資源隔離
cgroups    進程的資源限制 CPU 硬盤IO
kvm       虛擬磁盤文件苔巨,資源隔離
kvm       資源限制,--cpus --memory

docker 初期把lxc二次開發(fā)废离,后期自己研發(fā)的系統(tǒng)libcontainer

docker的主要組成部分

docker是傳統(tǒng)的CS架構(gòu)分為docker client和docker server,向mysql一樣
docker主要組件有:鏡像侄泽、容器、倉庫, 網(wǎng)絡蜻韭,存儲
啟動容器必須需要一個鏡像悼尾,倉庫中只存儲鏡像
容器---鏡像---倉庫
一次構(gòu)建,處處運行
docker是一種軟件的打包技術(shù)

安裝Docker

centos7.6   2G   10.0.0.11  docker01    host解析
centos7.6   2G   10.0.0.12  docker02    host解析

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y(ce是社區(qū)辦ee是企業(yè)版)

systemctl start docker   啟動容器服務
systemctl enable docker  開機自啟

Docker的鏡像管理

鏡像命令=docker image tab鍵補全查看
容器命令=docker container tab鍵補全查看

docker search +需要的鏡像名稱  搜索鏡像
選鏡像的建議:
1肖方,優(yōu)先考慮官方
2闺魏,stars數(shù)量多

官方鏡像倉庫地址:hub.docker.com
?docker pull(push) 獲取鏡像和上傳鏡像
?鏡像加速器:阿里云加速器,daocloud加速器俯画,中科大加速器析桥,Docker 中國官方鏡像加速:https://registry.docker-cn.com
?
配置docker鏡像加速
vi  /etc/docker/daemon.json
{
 "registry-mirrors": ["https://registry.docker-cn.com"] 
}
    
官方pull      docker pull     centos:6.8(沒有指定版本,默認會下載最新版)
私有倉庫pull    docker pull     daocloud.io/huangzhichong/alpine-cn:latest

Docker的基本命令

docker search +需要的鏡像名稱  搜索鏡像
?docker pull(push)nginx:1.41(指定版本不加1.41 不指定就是下載最新版本)  獲取鏡像和上傳鏡像
docker version   查看版本信息
docker info      顯示 Docker 系統(tǒng)信息艰垂,包括鏡像和容器數(shù)
?docker images   例子  docker image  ls  查看鏡像列表
?docker rmi      例子:docker image rm centos:latest    刪除鏡像(如果鏡像正在被使用 是刪除不了的)
docker image prune   批量刪除不用的鏡像
?docker save     例子:docker image save centos:v2(名稱加版本) -o docker-centos7.4.tar.gz(必須壓縮包形式)    導出鏡像
?docker load     例子:docker image load -i docker-centos7.4.tar.gz   導入鏡像
docker history +鏡像名    查看鏡像的分層
docker start 9d1be7dd2dc8(主機ID)  啟動容器
docker stop +ID或名字       停止容器
docker kill  +ID或名字   殺死容器
docker ps(-a -l  -q)   查看容器列表(-a 查看所有  -l查看第一個容器 -q查看所有容器的id)
docker ps --no-trunc     查看容器啟動的詳情
docker container ls (-a -l  -q)  查看容器列表 泡仗,同上
docker container rm ID或者名稱      刪除容器(container可以省略)
docker container rm -f ID    強制刪除
docker rm -f `docker ps -a -q`   批量刪除 不管死活
docker container prune   批量刪除不用的容器
docker cp /opt 9d1be7dd2dc8:/opt   從宿主機上拷貝文件到容器中
docker inspect  +鏡像或者容器   查看鏡像和容器的詳細信息
docker image build --network=host(使用宿主機網(wǎng)路) -t centos_nginx:v1 /dockerfile/nginx/    構(gòu)建鏡像

Docker的管理和啟動

docker run -d(放在后臺) -p(端口映射) 80(宿主機的端口):80(容器的端口) nginx:1.4  創(chuàng)建并開啟容器
-d(放在后臺)
-p(端口映射)
-v(掛載宿主機的目錄到容器目錄中,必須目錄對目錄材泄,文件對文件)例/opt/index.html:/etc/nginx/index.html

docker run -it(分配交互式終端)  (--name test)指定容器的名字  centos:v1 /bin/bash (登錄容器的初始命令)  運行時進入容器
-it(分配交互式終端)
--name 指定容器的名字(不怎么用)
/bin/bash (登錄容器的初始命令)

Ctrl+d 退出容器
Ctrl+p,Ctrl+q 退出容器()

進入正在運行的容器
docker exec -it  容器id或容器名字 /bin/bash(/bin/sh)   
docker attach +ID(使用同一個終端)  偷偷離開的快捷鍵ctrl+p,ctrl+q  盡量不要使用

總結(jié):docker容器內(nèi)的第一個進程(初始命令)必須一直處于前臺運行的狀態(tài)(必須夯拙诨馈),否則這個容器拉宗,就會處于退出狀態(tài)峦树!
在宿主機上啟動容器讓他夯主,并在容器內(nèi)也要讓服務夯主旦事,不然容器就會死掉

Docker 容器的網(wǎng)絡訪問

我們把docker 啟動時 系統(tǒng)會默認把內(nèi)核轉(zhuǎn)發(fā)打開魁巩,并配置iptables的規(guī)則
[root@docker01 ~]# sysctl -a |grep ipv4 |grep forward
net.ipv4.ip_forward = 1
[root@docker01 ~]# sysctl net.ipv4.ip_forward=1

[root@docker01 ~]# iptables -t nat -L -n
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0           
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:3306
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:80

多個容器都想使用8080端口
需要在宿主機上增加一塊網(wǎng)卡
[root@docker01 ~]# ifconfig eth0:1 10.0.0.13/24 up
docker run -d -p 10.0.0.13:8080:80 nginx:1.4 
docker run -d -p 10.0.0.11:8080:80 nginx:1.4

-p ip::containerPort(隨機端口)
?-p hostPort:containerPort/udp
?-p 10.0.0.100::53/udp   使用宿主機的10.0.0.100這個ip地址的隨機端口的udp協(xié)議映射容器的udp53端口
?-p 81:80 –p 443:443 可以指定多個-p
docker run -d -P nginx:1.4(自動隨機端口映射)

服務器一掛起容器就會上不了網(wǎng)
我們在宿主機上編輯內(nèi)核轉(zhuǎn)發(fā)配置文件
vim /etc/sysctl.conf
net.ipv4.ip_forward=1  尾部添加

sysctl -p 命令行引用一下即可

docker啟動之后報錯,上不了網(wǎng)
docker run -it -p 81:81 centos:6.9
WARNING: IPv4 forwarding is disabled. Networking will not work.

在宿主機上 
echo net.ipv4.ip_forward=1>>/usrb/sysctl.d/00-system.conf


再重啟network和docker服務
systemctl restart network && systemctl restart docker

docker的數(shù)據(jù)卷管理

docker volume ls 查看卷
docker volume inspect +卷名  查看卷的詳細信息和位置

宿主上xiaonian目錄是空的,容器會把對應自己目錄下的東西拷貝到宿主機上姐浮,兩個目錄會互相同步對方差異的文件谷遂,
docker run -d -p 80:80 -v xiaoniao:/opt nginx:latest 
卷可以共用
docker run -d -p 81:80 -v xiaoniao:/opt nginx:latest 

數(shù)據(jù)卷容器
?   --volumes-from(跟某一個已經(jīng)存在的容器掛載相同的卷)
docker run -d -p 80:80 --volumes-from +容器名 +鏡像    跟那個容器掛同樣的鏡像來運行這個容器


基于nginx啟動一個容器,監(jiān)聽80和81卖鲤,訪問80肾扰,出現(xiàn)nginx默認歡迎首頁畴嘶,訪問81,出現(xiàn)小鳥集晚。(基于nginx多端口的多站點窗悯。)
1)把小鳥飛飛的配置文件寫好放在opt下 通過-v參數(shù) 把宿主機上的配置文件放到容器中  代碼也是一樣 (文件是實時對應的 宿主機一改動 容器也會被修改)
docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf  -v /opt/xiaoniao:/opt nginx:latest 

2)先啟動容器 把宿主機opt下的代碼放到容器的opt下 把宿主機的的配置文件放到容器的對應站點目錄 (文件是實時對應的 宿主機一改動 容器也會被修改)
docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao:/opt nginx:latest 
docker container cp xiaoniao.conf 2b5c61d6780:/etc/nginx/conf.d/xiaoniao.conf
Ctrl +d 
docker restart 2b5c61d678  重啟容器即可

制作Docker鏡像

1)啟動一個基礎(chǔ)容器(centos 或者別的系統(tǒng))
docker run -it -p 80:80  centos:6.9 加上端口可以邊寫邊測試 

正常安裝所需要的服務
yum install nginx php-fpm....
配置
啟動


2)把容器提交為鏡像
docker commit 5a9a6ea1713b(ID) wordpress:v1 
查看docker images

3)測試鏡像功能是否可用
docker run -it -d -p 80:80  -p 3306:3306 wordpress 
但是啟動了容器服務沒起來
進入容器
docker exec -it 5a9a6ea1713b /bin/bash
手動啟動服務
service php-fpm start
service mysqld start 
nginx -g 'daemon off;' 讓服務夯主

我們可以在容器里寫個腳本,使用容器就變得方便偷拔,不用再進入容器手動啟動服務
vi /init.sh
#!/bin/bash
service php-fpm start
service mysqld start 
nginx -g "daemon off;"

測試瀏覽器搜索 頁面正常
docker run -it -d -p 80:80  -p 3306:3306 wordpress sh /init.sh 

Dockerfile自動構(gòu)建docker鏡像

1)手動搭建鏡像
2)根據(jù)手動搭建鏡像  根據(jù)歷史命令構(gòu)建dockerdile
3)使用dockerfile構(gòu)建鏡像
4)測試鏡像

全程在宿主上
[root@docker01 ~]# mkdir /dockerfile     創(chuàng)建dockerfile的目錄
[root@docker01 ~]# cd /dockerfile/      
[root@docker01 dockerfile]# mkdir nginx   鏡像名稱對應目錄(每個鏡像創(chuàng)建不同的名稱蒋院,不能混合使用)
[root@docker01 dockerfile]# cd nginx
[root@docker01 nginx]# vim dockerfile   名稱必須是dockerfile不然構(gòu)建鏡像找不到dockerfile文件會失敗
FROM centos:6.9   
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum install nginx -y
CMD ["nginx","-g","daemon off;"]

docker image build --network=host(使用宿主機網(wǎng)路) -t(指定構(gòu)建鏡像名字) centos_nginx:v1 /dockerfile/nginx/(找這個目錄下的dockerfile文件)   構(gòu)建鏡像

docker run -d -p 8080:80 centos_nginx:v1   測試鏡像

dockerfile常用指令:(每一個指令都會產(chǎn)生利益臨時的容器) 不能出現(xiàn)交互式的問題 不然就會出現(xiàn)問題

FROM         指定基礎(chǔ)鏡像 FROM centos:6.9
MAINTAINER  指定維護者信息,可以沒有
LABLE       描述莲绰,標簽
RUN         在命令前面加上RUN即可 例如 RUN yum install nginx -y
ADD         從宿主機上把文件拷貝到指定目錄并覆蓋原來文件(會自動解壓tar包)   (盡量把代碼放到跟dockerfile 文件一起 然后ADD /opt/code /usr/share/nginx/html 把宿主機上代碼 目錄下的文件 放到容器的對應目錄  )


WORKDIR     設(shè)置當前工作目錄   例如  WORKDIR /usr/share/nginx/html(后面執(zhí)行的操作都在這個目錄中)
VOLUME      設(shè)置卷欺旧,掛載主機目錄  VOLUME /usr/share/nginx/html  把容器上的內(nèi)容持久化到 宿主機上 通過docker container inspect 2283cdaf9600 |grep -i volume  可以查看目錄

EXPOSE      指定對外的端口(和-P 隨機端口一起使用)   例如 EXPOSE 22 80 (會把docker鏡像映射到宿主機的隨機端口)
CMD         容易被替換 語法 CMD ["nginx","-g","daemon off;"](原命令nginx -g 'daemon off';)
dockerfile其他指令: 
COPY        復制文件(不會解壓tar包) COPY /opt/xiaoniao /code/xiaoniao 把宿主機這個目錄下的內(nèi)容放到容器的對應目錄
ENV         環(huán)境變量 在dockerfile中指定$MYSQL_ROOT 我們在啟動容器時需要 --env "MYSQL_ROOT=123456"  指定環(huán)境變量
ENTRYPOINT  容器啟動后執(zhí)行的命令(無法被替換,啟容器的時候指定的命令蛤签,會被當成參數(shù))
        (ADD /dockerfile/xiaoniao/init.sh /init.sh     
        ENTRYPOINT ["/bin/bash","/init.sh"]) 會無視用戶在啟動容器時 輸入不相關(guān)的命令

docker鏡像的分層(kvm 鏈接克隆辞友,寫時復制的特性)

鏡像分層的好處:復用,節(jié)省磁盤空間,相同的內(nèi)容只需加載一份到內(nèi)存顷啼。
修改dockerfile之后踏枣,再次構(gòu)建速度快
docker history +鏡像 查看鏡像的分層

dockerfile 優(yōu)化:

1:盡可能選擇體積小linux,alpine

2:盡可能合并RUN指令钙蒙,清理無用的文件(yum緩存茵瀑,源碼包) 
    RUN yum install nginx -y  && \
        yum install php -y && \
        yum clean all
    
3:修改dockerfile,把變化的內(nèi)容盡可能放在dockerfile結(jié)尾

4: 使用.dockerignore躬厌,減少不必要的文件ADD 
    在dockerfile配置文件同目錄下 把一些不需要ADD的文件寫到.dockerignore 中 (或者把不需要的東西移到別的目錄下)
    vim .dockerignore 
    xiaoniao.tar.gz 

容器間的互聯(lián)(--link 是單方向的B碜颉!?甘)(每次link一下 就會在容器中做一下hosts解析)

先啟動一個容器
docker run -d --name nginx nginx:v1
我們在啟動一個容器
docker run -it --link nginx(要link的容器名稱):nginx(這是在新容器里的別名)) +鏡像 /bin/bash
進入容器直接可以
curl -I http://nginx
ping nginx

使用docker運行zabbix-server
docker run --name mysql-server -t \
?      -e MYSQL_DATABASE(環(huán)境變量在容器中指定)="zabbix" \
?      -e MYSQL_USER="zabbix" \
?      -e MYSQL_PASSWORD="zabbix_pwd" \
?      -e MYSQL_ROOT_PASSWORD="root_pwd" \
?      -d mysql:5.7 \
?      --character-set-server=utf8 --collation-server=utf8_bin

docker run --name zabbix-java-gateway -t \
?      -d zabbix/zabbix-java-gateway:latest

docker run --name zabbix-server-mysql -t \
?      -e DB_SERVER_HOST="mysql-server" \
?      -e MYSQL_DATABASE="zabbix" \
?      -e MYSQL_USER="zabbix" \
?      -e MYSQL_PASSWORD="zabbix_pwd" \
?      -e MYSQL_ROOT_PASSWORD="root_pwd" \
?      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
?      --link mysql-server:mysql \
?      --link zabbix-java-gateway:zabbix-java-gateway \
?      -p 10051:10051 \
?      -d zabbix/zabbix-server-mysql:latest

docker run --name zabbix-web-nginx-mysql -t \
?      -e DB_SERVER_HOST="mysql-server" \
?      -e MYSQL_DATABASE="zabbix" \
?      -e MYSQL_USER="zabbix" \
?      -e MYSQL_PASSWORD="zabbix_pwd" \
?      -e MYSQL_ROOT_PASSWORD="root_pwd" \
?      --link mysql-server:mysql \
?      --link zabbix-server-mysql:zabbix-server \
?      -p 80:80 \
?      -d zabbix/zabbix-web-nginx-mysql:latest

普通的registry (私有倉庫) (如果上傳的鏡像名稱一致會把原有的給覆蓋掉 )

先拉取regitry官方倉庫的鏡像
docker pull registry
docker load -i registry.tar.gz  導入鏡像

關(guān)于docker registry的安裝鸿捧,可以說簡單的不能再簡單了,docker run一個容器就好了疙渣,也就是一條命令的事
docker run -d -p 5000:5000 --restart=always(重啟docker 會自動拉取這個容器) --name registry -v /opt/myregistry:/var/lib/registry registry

格式:docker tag 源鏡像名字:版本 私有倉庫地址/鏡像名字:版本
例如:
docker tag centos:6.10(鏡像名) 10.0.0.11:5000/centos:6.10(打完標簽的名字)
push上傳
docker push 10.0.0.11:5000/centos:6.10

默認上傳肯定報錯匙奴!(因為它只走https協(xié)議 在docker配置文件中 讓他走http協(xié)議)
The push refers to a repository [10.0.0.11:5000/centos:6.10]
Get https://10.0.0.11:5000/v1/_ping: http: server gave HTTP response to HTTPS client

解決辦法:

把自己的私有鏡像倉庫加到信任的倉庫列表中。(最好所有容器宿主機都加 妄荔,不然push的時候會報錯)
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.11:5000"]
}

systemctl restart docker

直接使用私有倉庫的鏡像
docker run -d -p 80:80 10.0.0.11:5000/nginx:v1 

刪除鏡像
1)進入docker registry的容器中
docker exec -it registry /bin/sh
2) 刪除repo
rm -fr /var/lib/registry/docker/registry/v2/repositories/nginx
3) 清楚掉blob
registry garbage-collect /etc/docker/registry/config.yml

 
帶認證的registry
yum install httpd-tools -y     下載生成密碼的工具htpasswd
mkdir /opt/registry-var/auth/ -p    創(chuàng)建認證用戶的目錄
htpasswd -Bbn oldboy 123456 >> /opt/registry-var/auth/htpasswd    添加用戶名和密碼

 啟動容器
docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry

提示:上傳下載鏡像都需要登陸哦
docker login 10.0.0.11:5000  登錄
oldboy
123456
docker logout 10.0.0.11:5000登出

詳細https://www.qstack.com.cn/archives/350.html

docker-compose(單機版的容器編排工具)

yum install -y docker-compose(需要epel源)

先pull 下載鏡像
導入鏡像

mkdir /docker-compose/wordpress   創(chuàng)建項目目錄
vi /docker-compose/wordpress/docker-compose.yml   存放文件只能是yml 或者yaml 結(jié)尾的文件 

version: '3'

services:
   db:  (啟動第一個容器)
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:  第二個容器
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - web_data:/var/www/html
     ports:
       - "80:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:    卷
    db_data:
    web_data:  

啟動的命令 并放到后臺
docker-compose up -d 
關(guān)閉
docker-compose down

如果mysql容器死掉
docker-compose start db 根據(jù)劇本的db名稱啟動

重啟所有服務
docker-compose restart  重啟所有的容器服務

重啟docker服務泼菌,容器全部退出 解決的辦法

方法一:docker run  --restart=always  啟動容器是加上--restart=always 這個參數(shù) (docker服務啟動這個容器就會被拉起)

方法二:"live-restore": true            不建議使用 (宿主機已關(guān)機 容器就會死掉)
docker server配置文件/etc/docker/daemon.json參考
{
 "registry-mirrors": ["http://b7a9017d.m.daocloud.io"],
 "insecure-registries":["10.0.0.11:5000"],
 "live-restore": true
}

docker run -d -p 80:80 10.0.0.11:5000/nginx:v1 sleep 7200秒 

Docker網(wǎng)絡類型

查看容器的網(wǎng)絡類型
docker container inspect ID 或者主機名 

None:不為容器配置任何網(wǎng)絡功能,      --network=none
Container:與另一個運行中的容器共享Network Namespace啦租,  --network container:ID(K8S) 
Host:與宿主機共享Network Namespace哗伯,--network=host  性能最高 (端口容易沖突,IP地址一樣)
Bridge:Docker設(shè)計的NAT網(wǎng)絡模型      默認就是橋接網(wǎng)絡

Docker跨宿主機容器之間的通信macvlan

默認一個物理網(wǎng)卡篷角,只有一個物理mac地址焊刹,虛擬多個mac地址
創(chuàng)建macvlan網(wǎng)絡(容器宿主機都需要執(zhí)行 才能網(wǎng)絡互通)
docker network create --driver(指定網(wǎng)絡類型) macvlan --subnet(網(wǎng)絡范圍) 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0(基于那塊網(wǎng)卡做橋接) macvlan_1(網(wǎng)絡名字)

創(chuàng)建使用macvlan網(wǎng)絡的容器
docker run -it --network macvlan_1(指定網(wǎng)絡類型) --hostname web01(指定名字) --ip 10.0.0.200(指定ip地址) busybox:v1

##設(shè)置eth0的網(wǎng)卡為混雜模式 (ubantu 需要設(shè)置)
ip link set eth1 promisc on   

Dcoker跨主機容器通信之overlay

docker01
vim  /etc/docker/daemon.json   添加配置文件內(nèi)容
{
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.11:8500",(放在哪個主機上)
  "cluster-advertise": "10.0.0.11:2376"(添加宿主機的節(jié)點 10.0.0.12:2376)
}
02上:
vim  /etc/docker/daemon.json   添加配置文件內(nèi)容
{
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.11:8500",(放在哪個主機上)
  "cluster-advertise": "10.0.0.12:2376"
}
后面步驟一樣改啟動配置文件   不用啟動progrium/consul

然后修改docker的啟動配置文件
vim /usr/lib/systemd/system/docker.service 
修改前
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
修改后
ExecStart=/usr/bin/dockerd  --containerd=/run/containerd/containerd.sock

重載守護進程
systemctl daemon-reload 
重啟docker服務
systemctl restart docker

先拉取progrium/consul鏡像
然后倒入鏡像
啟動鏡像
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
consul:kv類型的存儲數(shù)據(jù)庫(key:value)

瀏覽器訪問10.0.0.11:8500 端口


docker network ls  查看網(wǎng)絡的類型

2)創(chuàng)建overlay網(wǎng)絡(加入節(jié)點的主機會自動添加 只需要在11上執(zhí)行即可)
docker network create -d overlay --subnet 172.16.1.0/24 --gateway 172.16.1.254  ol1

3)啟動容器測試(兩臺主機)
docker run -it --network ol1 --name oldboy04  busybox /bin/sh
每個容器有兩塊網(wǎng)卡,eth0實現(xiàn)容器間的通訊,eth1實現(xiàn)容器訪問外網(wǎng)
docker01
docker run -it --network ol1 --name oldboy04  busybox /bin/sh
docker02
docker run -it --network ol1 --name oldboy05  busybox /bin/sh  (主機名不能沖突,IP會自動分配)
/ # ping oldboy04
PING oldboy05 (172.16.1.1): 56 data bytes
64 bytes from 172.16.1.1: seq=0 ttl=64 time=0.364 ms

Docker企業(yè)級鏡像倉庫harbor(vmware 中國團隊)

第一步:安裝docker和docker-compose

第二步:下載harbor-offline-installer-v1.8.0.tgz

第三步:上傳到/opt,并解壓
cd /opt/
[root@docker01 opt]# tar xf harbor-offline-installer-v1.5.1.tgz
[root@docker01 opt]# cd harbor/
[root@docker01 harbor]# vim harbor.cfg

第四步:修改harbor.cfg配置文件
hostname = 10.0.0.11 (如果有域名使用域名)
harbor_admin_password = 123456   登錄頁面的密碼 用戶為admin

第五步:執(zhí)行install.sh

如果某一個容器沒起來可以查看docker-compose.yml
查看對應服務的容器名稱 
docker-compose +定義的容器名稱

訪問10.0.0.11即可  端口在vim docker-compose.yml 中修改nginx 端口

10.0.0.12上傳鏡像
修改docker配置文件
[root@docker02 ~]# vim /etc/docker/daemon.json
"insecure-registries": ["10.0.0.11"],  修改私有倉庫的ip不用加端口

先把鏡像打標簽
docker tag busybox:latest 10.0.0.11/library/busyboy:v1
docker login   登錄
docker push 10.0.0.11/library/busyboy:v1   上傳鏡像
docker pull 10.0.0.11/library/busyboy:v1   下載鏡像
docker logout 10.0.0.11   登出



配置harbor的證書 https
上傳證書到任意目錄
hostname = blog.qstack.com.cn
ui_url_protocol = https
ssl_cert = /opt/zheng/Nginx/1_blog.qstack.com.cn_bundle.crt
ssl_cert_key = /opt/zheng/Nginx/2_blog.qstack.com.cn.key

別人在上傳鏡像登錄需要 (別的docker配置文件不需要在調(diào)整)
[root@docker02 ~]# docker login blog.qstack.com.cn
[root@docker02 ~]# docker tag busybox:latest blog.qstack.com.cn/library/busyboy:v2 打標簽
[root@docker02 ~]# docker push blog.qstack.com.cn/library/busyboy:v2 上傳鏡像
下載無需登錄
[root@docker02 ~]# docker pull blog.qstack.com.cn/library/busyboy:v2   下載鏡像


1.8  https的 設(shè)置
https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市虐块,隨后出現(xiàn)的幾起案子俩滥,更是在濱河造成了極大的恐慌,老刑警劉巖非凌,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件举农,死亡現(xiàn)場離奇詭異,居然都是意外死亡敞嗡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門航背,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喉悴,“玉大人,你說我怎么就攤上這事玖媚』啵” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵今魔,是天一觀的道長勺像。 經(jīng)常有香客問我,道長错森,這世上最難降的妖魔是什么吟宦? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮涩维,結(jié)果婚禮上殃姓,老公的妹妹穿的比我還像新娘。我一直安慰自己瓦阐,他們只是感情好蜗侈,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睡蟋,像睡著了一般踏幻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戳杀,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天该面,我揣著相機與錄音,去河邊找鬼豺瘤。 笑死吆倦,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的坐求。 我是一名探鬼主播蚕泽,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了须妻?” 一聲冷哼從身側(cè)響起仔蝌,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荒吏,沒想到半個月后敛惊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡绰更,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年瞧挤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片儡湾。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡特恬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出徐钠,到底是詐尸還是另有隱情癌刽,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布尝丐,位于F島的核電站显拜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏爹袁。R本人自食惡果不足惜远荠,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呢簸。 院中可真熱鬧矮台,春花似錦、人聲如沸根时。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛤迎。三九已至确虱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間替裆,已是汗流浹背校辩。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辆童,地道東北人宜咒。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像把鉴,于是被迫代替她去往敵國和親故黑。 傳聞我的和親對象是個殘疾皇子儿咱,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容