當前位置:首頁 » 雲伺服器 » docker搭建伺服器業務

docker搭建伺服器業務

發布時間: 2023-04-16 20:57:03

A. Docker從零搭建分布式伺服器群

1、有2台伺服器A和B,系統為centos7
2、有一個分布式的服務端需要部署在A和B上,其中A為主服務,B負責子服務
3、A和B需要在一個網路環境下能互相連接通信
4、A需要暴露2001和4001埠給外網客戶端進行連接
5、2台機器都提供一個賬戶名為"my"的賬號用顫山於給對方ssh登錄用

參考 https://www.runoob.com/docker/docker-tutorial.html

我們使用 docker run 來創建容器並運行,此時容器在後台運行
我們使用 docker exec 來進入容器內的伺服器

此時我們的已經登錄進了A伺服器,接下來在A伺服器上我們進行服務安裝通用的基礎配置,目的是以後將A伺服器作為鏡像快速搭建B\C\D\E伺服器

查看 cd /etc/ssh 目錄如果沒有則需要執行下面安裝:

配置 vi /etc/ssh/sshd_config ,將以下幾項打開

配置完畢後我們啟動sshd服務

然後檢查sshd啟動情況

A伺服器的配置基本完成了,現在我們退出A伺服器
在我們主機上進行下指租面的操作

由於我們接下來需要將A、B伺服器放在一個網路環境下,這里我們先創建一個網路,命名為myNet

用我們製作的鏡像重新創建一次伺服器A和B,並且讓他們加入我們之前創建的網路myNet內,並實現A服唯洞兆務器暴露2001和4001埠給外網也就是docker外的機器訪問

現在我們已經創建好了A和B伺服器,由於他們在myNet網路下,互相可以通過容器名來訪問,不需要通過IP了,我們嘗試從B伺服器去ssh A伺服器並且用my賬號

現在我們A和B伺服器就像在區域網一樣,不用關心對方IP使用別名即可連接了,並且A對外暴露了埠2001和4001供外部連接

B. linux下docker基礎環境搭建

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 報錯:curl: (6) Could not resolve host: get.docker.com; 未知的錯誤

# 解決:cat /etc/resolv.conf 里加了個 nameserver 8.8.8.8

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

驗證安裝:docker-compose --version

# compose 那個亞馬遜的老是下載不了,可換對應地址:

sudo curl -L https://get.cloud.io/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose


查看docker版本: docker --version

啟動docker: systemctl start docker 或者 service docker start

停止docker: systemctl stop docker

查看docker鏡像文件: docker images

查看docker內容器: docker ps -a


修改 /etc/dockers 文件下的配置文件 daemon.json (配置作用參考附錄)

操作完成後需要重啟docker: systemctl restart docker



服務端安裝git:yum install git

拉取一下文件和命令:git clone http://172.16.1.35/demo/demo-dockers.git

查看本地和遠端版本:git branch -a

切換本地分支為dev:git checkout -b dev origin/dev

啟動docker:service docker start

後 執行文件中的shell:./init.sh all (包含:mysql,mongo,redis,solr,activemq,tomcat)

刪除多下載的鏡像:docker rmi --force 3068f6bb852e

容器列表: docker ps -a

進入某個容器:docker exec -it [CONTAINER ID] /bin/bash

查看某個容器進程:docker top [NAMES]




查看 demo-dockers 目錄下 java-runtime 文件位置下有對應幾個項目配置文件 application-alpha.yml



修改配置文件後,需要重新啟動對應java項目,執行啟動腳本 ./init-java-runtime.sh + [項目名或者all]



獲取鏡像文件的地址:http://172.18.5.112:5001/repository/demo/ 查找對應需要的鏡像包



更換鏡像文件: vi java-runtime.yml 內,image後的對應項目後跟的包名中



重啟對應項目: ./init-java-runtime.sh [項目名]



查看對應項目啟動log: docker logs -f --tail 500 [生成的容器名稱]

(容器重啟:docker restart [容器id或名稱])



{

"authorization-plugins": [],//訪問授權插件

"data-root": "",//docker數據持久化存儲的根目錄

"dns": [],//DNS伺服器

"dns-opts": [],//DNS配置選項,如埠等

"dns-search": [],//DNS搜索域名

"exec-opts": [],//執行選項

"exec-root": "",//執行狀態的文件的根目錄

"experimental": false,//是否開啟試驗性特性

"storage-driver": "",//存儲驅動器

"storage-opts": [],//存儲選項

"labels": [],//鍵值對式標記docker元數據

"live-restore": true,//dockerd掛掉是否保活容器(避免了docker服務異常而造成容器退出)

"log-driver": "",//容器日誌的驅動器

"log-opts": {},//容器日誌的選項

"mtu": 0,//設置容器網路MTU(最大傳輸單元)

"pidfile": "",//daemon PID文件的位置

"cluster-store": "",//集群存儲系統的URL

"cluster-store-opts": {},//配置集群存儲

"cluster-advertise": "",//對外的地址名稱

"max-concurrent-downloads": 3,//設置每個pull進程的最大並發

"max-concurrent-uploads": 5,//設置每個push進程的最大並發

"default-shm-size": "64M",//設置默認共享內存的大小

"shutdown-timeout": 15,//設置關閉的超時時限(who?)

"debug": true,//開啟調試模式

"hosts": [],//監聽地址(?)

"log-level": "",//日誌級別

"tls": true,//開啟傳輸層安全協議TLS

"tlsverify": true,//開啟輸層安全協議並驗證遠程地址

"tlscacert": "",//CA簽名文件路徑

"tlscert": "",//TLS證書文件路徑

"tlskey": "",//TLS密鑰文件路徑

"swarm-default-advertise-addr": "",//swarm對外地址

"api-cors-header": "",//設置CORS(跨域資源共享-Cross-origin resource sharing)頭

"selinux-enabled": false,//開啟selinux(用戶、進程、應用、文件的強制訪問控制)

"userns-remap": "",//給用戶命名空間設置 用戶/組

"group": "",//docker所在組

"cgroup-parent": "",//設置所有容器的cgroup的父類(?)

"default-ulimits": {},//設置所有容器的ulimit

"init": false,//容器執行初始化,來轉發信號或控制(reap)進程

"init-path": "/usr/libexec/docker-init",//docker-init文件的路徑

"ipv6": false,//開啟IPV6網路

"iptables": false,//開啟防火牆規則

"ip-forward": false,//開啟net.ipv4.ip_forward

"ip-masq": false,//開啟ip掩蔽(IP封包通過路由器或防火牆時重寫源IP地址或目的IP地址的技術)

"userland-proxy": false,//用戶空間代理

"userland-proxy-path": "/usr/libexec/docker-proxy",//用戶空間代理路徑

"ip": "0.0.0.0",//默認IP

"bridge": "",//將容器依附(attach)到橋接網路上的橋標識

"bip": "",//指定橋接ip

"fixed-cidr": "",//(ipv4)子網劃分,即限制ip地址分配范圍,用以控制容器所屬網段實現容器間(同一主機或不同主機間)的網路訪問

"fixed-cidr-v6": "",//(ipv6)子網劃分

"default-gateway": "",//默認網關

"default-gateway-v6": "",//默認ipv6網關

"icc": false,//容器間通信

"raw-logs": false,//原始日誌(無顏色、全時間戳)

"allow-nondistributable-artifacts": [],//不對外分發的產品提交的registry倉庫

"registry-mirrors": [],//registry倉庫鏡像

"seccomp-profile": "",//seccomp配置文件

"insecure-registries": [],//非https的registry地址

"no-new-privileges": false,//禁止新優先順序(??)

"default-runtime": "runc",//OCI聯盟(The Open Container Initiative)默認運行時環境

"oom-score-adjust": -500,//內存溢出被殺死的優先順序(-1000~1000)

"node-generic-resources": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],//對外公布的資源節點

"runtimes": {//運行時

"cc-runtime": {

"path": "/usr/bin/cc-runtime"

},

"custom": {

"path": "/usr/local/bin/my-runc-replacement",

"runtimeArgs": [

"–debug"]

}

}

}



服務端安裝git:yum install git

拉取一下文件和命令:git clone http://172.16.1.35/gchat/gaga-dockers.git

指定分支克隆git clone -b dev-1 http://172.16.1.35/gchat/gaga-dockers.git

查看本地和遠端版本:git branch -a

切換本地分支為dev:git checkout -b dev origin/dev

啟動docker:service docker start

後 執行文件中的shell:./init.sh all (順序:mysql,mongo,redis,solr,activemq,tomcat)

刪除多下載的鏡像:docker rmi --force 3068f6bb852e

容器列表: docker ps -a

進入某個容器:docker exec -it [CONTAINER ID] /bin/bash

查看某個容器進程:docker top [NAMES]


# 查看是否安裝了tomcat: rpm -qa | grep tomcat

# 查找文件:find / -name tomcat

# 切換Tomcat目錄:cd /usr/local/tomcat/bin

# 關閉Tomcat:./shutdown.sh

# 查看docker中的java版本:docker exec container_name java -version


git拉代碼:git clone [email protected]:gchat/gaga-server.git

查看遠端分支:git branch -r

創建本地dev分支 並切換到dev分支:git checkout -b dev origin/dev

查看本地分支:git branch

切換回眸分支:git checkout master


查看所有JDK在系統中位置:/usr/libexec/java_home -V


參考地址: https://www.runoob.com/docker/docker-command-manual.html

查找docker 安裝包:yum list installed | grep docker

停掉docker:systemctl stop docker

刪除對應文件:yum remove docker.x86_64 docker-client.x86_64 docker-common.x86_64 -y

查看下docker rpm源:rpm -qa | grep docker

刪除對應路徑:rm -rf /var/lib/docker

注釋:

本次也是由於業務需要,需要重新搭建新的測試伺服器,這也是搭建中的一個插曲,後續會使用 Jenkins 進行相關的持續集成,大家一起學習分享!~

C. 使用 OpenResty Docker 鏡像快速搭建 Web 伺服器

在日常工作中經常需要搭建 Web 伺服器和反向代理伺服器,用於測試和生產的情況都有。雖然用於測試的場景有很多便捷的方法,但是在向生產環境遷移時會導致有些工作不能復用。綜合看起來,還是用 Nginx 最為方便。本文嘗試提供一些配置模板。

需要提前了解的內容:

選擇 OpenResty 的原因:

OpenResty 默認安裝位置:

安裝目錄中 Nginx 相關文件:

默認服務指向 Web 文件夾

映射關系:

默認 配置文件 位置(後續的配置會覆蓋這里的內容):

在絕大多數情況,覆蓋上面的配置文件就可以了。

但是,這些配置文件的內容,只能是包含在 http 段內的配置,並不能作為完整的配置文件使用。

比如:

可以包含: upstream 、 server

不能包含: tcp

完整配置文件位置:

配置文件相關信息:

https://github.com/openresty/docker-openresty/blob/master/README.md#nginx-config-files

鏡像默認配置為到 /etc/nginx/conf.d/ 讀取配置,所以要把配置文件放到這里。其餘的掛載或埠映射根據需要進行。

假設需要建立如下服務:

(1)通過 http://localhost:20000/shared1/ 訪問 /tmp/webroot/shared1

(2)通過 http://localhost:20000/shared2/ 訪問 /tmp/webroot/myshare

(3)通過 http://localhost:20000// 訪問 http://www..com

配置文件:

啟動命令行:

詳情參考: docker-openresty - Docker tooling for OpenResty - Nginx Config Files

模擬為應用提供多級反向代理,查看訪問鏈路。簡單分為三部分:

使用 Docker Compose 來配置並串聯各容器,文件較多,訪問 GitHub 查看。

(完)

D. 如何創建一個docker service 服務

1. 運行一個Docker實例
Docker首先會嘗試從本地取得並運行所需的鏡像,如果在本地主機上沒有發現,它就會從Docker公共注冊中心拉取。這里,我們將會拉取鏡像並在 Docker 容器中創建一個Fedora實例,並連接到它的 tty 上的bash shell。
# docker run -i -t fedora bash

2.安裝Apache網路伺服器
現在,在我們的Fedora基本鏡像實例准備好後,我們將會開始互動式地安裝Apache網路伺服器,而不是為它創建Dockerfile。為了做到這點,我們需要在終端或者shell運行以下命令。
# yum update

# yum install httpd

退出容器的 tty。
# exit

3.保存鏡像
現在,我們要去保存在Fedora實例里做的修改。要做到這個,我們首先需要知道實例的容器ID。而為了得到ID,我們又需要運行以下命令(LCTT 譯註:在容器外執行該命令)。
# docker ps -a

然後,我們會保存這些改變為一個新的鏡像,請運行以下命令。
# docker commit c16378f943fe fedora-httpd

這里,修改已經通過使用容器ID保存起來了,鏡像名字叫fedora-httpd。為了確認新的鏡像是否在運行,我們將運行以下命令。
# docker images

4. 添加內容到新的鏡像
我們自己新的Fedora Apache鏡像正成功的運行,現在我們想添加一些我們網站的網頁內容到Apache網路伺服器,使得網站能夠開箱即用。為做到這點,我們需要創建一個新的Dockerfile,它會處理從復制網頁內容到啟用80埠的所有操作。要達到這樣的目的,我們需要使用我們最喜歡的文本編輯器創建Dockerfile文件,像下面演示的一樣。
# nano Dockerfile
現在,我們需要添加以下的命令行到文件中。
FROM fedora-httpd
ADD mysite.tar /tmp/
RUN mv /tmp/mysite/* /var/www/html
EXPOSE 80
ENTRYPOINT [ "/usr/sbin/httpd" ]
CMD [ "-D", "FOREGROUND" ]

這里,上述的Dockerfile中,放在mysite.tar里的網頁內容會自動解壓到/tmp/文件夾里。然後,整個站點會被移動到Apache的網頁根目錄/var/www/html/,命令expose 80會打開80埠,這樣網站就能正常訪問了。其次,入口點放在了/usr/sbin/https裡面,保證Apache伺服器能夠執行。

5. 構建並運行一個容器
現在,我們要用剛剛創建的Dockerfile創建我們的容器,以便將我們的網站添加到上面。為做到這,我們需要運行以下命令。
# docker build -rm -t mysite .

建立好我們的新容器後,我們需要要用下面的命令來運行容器。
# docker run -d -P mysite

E. 在一個區域網中(沒有dhcp服務)用docker搭建一個dhcp伺服器

1、使用的鏡像
sudo docker pull networkboot/dhcpd

2、測試的區域網拓撲結構如下:h為 DHCP伺服器,ovs交換機s1、s2、s3各連著一台等待分配ip地址的主機。

3、h DHCP伺服器通過一對暴露於root namespace 的veth pair相連,具體操作如下
3.1、生成交換機s1、s2、s3
sudo ovs-vsctl add-br s1sudo ovs-vsctl add-br s2sudo ovs-vsctl add-br s3

3.2、創建veth pair 即 v1-v2
sudo ip link add v1 type veth peer name v2

3.3、**up
sudo ip link set dev v1 upsudo ip link set dev v2 up

3.4、給v1配置ip及子網掩碼
sudo ifconfig v1 192.168.1.254 netmask 255.255.255.0

3.5、生成DHCP伺服器,監聽v1 ,掛載本地data文件夾,data裡面中只有dhcpd.conf文件
sudo docker run -it \--rm --net host \--init \--name=dhcpServer1 \-v ~/emxbook/docker-dhcpd/data:/data \networkboot/dhcpd v1

dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {option routers 192.168.1.1;option subnet-mask 255.255.255.0;option domain-name "emx.local";option domain-name-servers 8.8.8.8;range 192.168.1.2 192.168.1.100;}

3.5、將v2連接到交換機上
sudo ovs-vsctl add-port s1 v2

3.6、交換機s1、s2、s3彼此相連
sudo ovs-vsctl add-port s1 s1p1sudo ovs-vsctl set Interface s1p1 type=patchsudo ovs-vsctl set Interface s1p1 options:peer=s2p1sudo ovs-vsctl add-port s2 s2p1sudo ovs-vsctl set Interface s2p1 type=patchsudo ovs-vsctl set Interface s2p1 options:peer=s1p1sudo ovs-vsctl add-port s1 s1p2sudo ovs-vsctl set Interface s1p2 type=patchsudo ovs-vsctl set Interface s1p2 options:peer=s3p1sudo ovs-vsctl add-port s3 s3p1sudo ovs-vsctl set Interface s3p1 type=patchsudo ovs-vsctl set Interface s3p1 options:peer=s1p2

3.7、創建主機h1、h2、h3,並將其連接到交換機上,其中ubunut:5是添加了基本net-tools、isc-dhcp-client,創建的時候記得使用 --cap-add=NET_ADMIN
sudo docker run -itd --network=none --name=h1 --cap-add=NET_ADMIN ubuntu:5sudo docker run -itd --network=none --name=h2 --cap-add=NET_ADMIN ubuntu:5sudo docker run -itd --network=none --name=h3 --cap-add=NET_ADMIN ubuntu:5sudo ovs-docker add-port s1 eth1 h1sudo ovs-docker add-port s2 eth1 h2sudo ovs-docker add-port s3 eth1 h3

3.8、可以使用floot-light控制交換機s1、s2、s3交換機(選擇)
sudo ovs-vsctl set-controller s1 tcp:127.0.0.1:6653sudo ovs-vsctl set-controller s2 tcp:127.0.0.1:6653sudo ovs-vsctl set-controller s3 tcp:127.0.0.1:6653

4、使用dhclient eht1 向DHCP伺服器申請
4.1、申請ip之前

4.2、申請ip(伺服器端界面)

4.3申請ip之後,h1(192.168.1.38):

同理,h2(192.168.1.39):

h3(192.168.1.40):

5、測試
5.1、h1 ping h2(192.168.1.39):

5.2、h2 ping h3(192.168.1.40):

6、最後拓撲結構圖,ip分配之後的拓撲結構:DHCP伺服器(192.168.1.6)、h1(192.168.1.38)、h2(192.168.1.39)、h3(192.168.1.40)

7、代碼匯總參考
sudo ovs-vsctl add-br s1sudo ovs-vsctl add-br s2sudo ovs-vsctl add-br s3sudo ip link add v1 type veth peer name v2sudo ip link set dev v1 upsudo ip link set dev v2 upsudo ifconfig v1 192.168.1.6 netmask 255.255.255.0sudo docker run -it \--rm --net host \--init \--name=dhcpServer \-v ~/emxbook/docker-dhcpd/data:/data \networkboot/dhcpd v1sudo ovs-vsctl add-port s1 v2sudo ovs-vsctl add-port s1 s1p1sudo ovs-vsctl set Interface s1p1 type=patchsudo ovs-vsctl set Interface s1p1 options:peer=s2p1sudo ovs-vsctl add-port s2 s2p1sudo ovs-vsctl set Interface s2p1 type=patchsudo ovs-vsctl set Interface s2p1 options:peer=s1p1sudo ovs-vsctl add-port s1 s1p2sudo ovs-vsctl set Interface s1p2 type=patchsudo ovs-vsctl set Interface s1p2 options:peer=s3p1sudo ovs-vsctl add-port s3 s3p1sudo ovs-vsctl set Interface s3p1 type=patchsudo ovs-vsctl set Interface s3p1 options:peer=s1p2sudo docker run -itd --network=none --name=h1 --cap-add=NET_ADMIN ubuntu:5sudo docker run -itd --network=none --name=h2 --cap-add=NET_ADMIN ubuntu:5sudo docker run -itd --network=none --name=h3 --cap-add=NET_ADMIN ubuntu:5sudo ovs-docker add-port s1 eth1 h1sudo ovs-docker add-port s2 eth1 h2sudo ovs-docker add-port s3 eth1 h3sudo ovs-vsctl set-controller s1 tcp:127.0.0.1:6653sudo ovs-vsctl set-controller s2 tcp:127.0.0.1:6653sudo ovs-vsctl set-controller s3 tcp:127.0.0.1:6653

F. docker 搭建文件伺服器

version: '3' //docker-compose 版本 3.x

services:  //服務的配置信息

    FileServer: //自己定義的服務

        image: nginx:latest  //使用的鏡像名

        container_name: 'FileData' // docker容器名

        restart: always //重啟策略 always 總是重新啟動

        ports: - '8003:8003'  //映射埠信息 宿主埠:容器埠

        volumes: // 定義了卷信息,提供給 services 中的 具體容器使用

            - './nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf' // 用戶自己指定的目錄:映射目錄

            - './nginx/log:/var/log/nginx'

            - './file:/usr/share/nginx/file'

            - './web:/usr/share/nginx/html'    //其他html連接目錄

        command: /bin/bash -c "nginx -g 'daemon off;'"  //覆蓋容器啟動後默認執行的命令

autoindex on; //是否顯示文件目錄 on顯示  off 關閉顯示

autoindex_exact_size on; // 顯示文件確切大小 on 顯示位元組單位 off 顯示出文件的大概大小,單位是KB或者MB或者GB

autoindex_localtime on; //默認為off,顯示的文件時間為GMT時間 ;改為on後,顯示的文件時間為文件的伺服器時間

charset utf-8,gbk; //顯示的字元集

server{ //服務配置

    listen 8003; // 監聽埠 ,也可以加上IP地址,如,listen 127.0.0.1:8080;

    server_name _; //定義網站域名,可以寫多個,用空格分隔。

    //匹配規則,在server{}里可以有很多location配置段

    //root/alias 是指定文件路徑的兩種方式 alias 相當於重定向路徑

     //使用alias,目錄名後面一定要加「/」

    location / { //location 後面跟的搜索路徑

        root /usr/share/nginx/file; //指定文件服務地址 這里的目錄是 yml 文件里配置的映射目錄

    }

    location /web/{ 

        alias /usr/share/nginx/; //多個location 的時候這里只需要指定映射目錄的上級目錄就行了

        index index.html index.htm; //配置默認首頁

    }

}

G. 使用docker搭建STUN/TURN伺服器

前言     STUN,首先在RFC3489中定義,作為一個完整的NAT穿透解決方案,英文全稱是Simple Traversal of UDP Through NATs,即簡單的用UDP穿透NAT。     TURN,首先在RFC5766中定義,英文全稱是Traversal Using Relays around NAT:Relay Extensions to Session Traversal Utilities for NAT,即使用中繼穿透NAT:STUN的擴展       簡單的說,TURN與STURN的共同點都是通過修改應用層中的私網地址達到NAT穿透的效果,異同點是TURN是通過兩方通訊的「中間人」方式實現穿透。     ICE的全稱Interactive Connectivity Establ.shment(互動式連接建立),由IETF的MMUSIC工作組開發出來的,它所提供的是一種框架,使各種NAT穿透技術可以實現統一。     STUN和TURN伺服器和ICE可以參考閱讀: P2P技術詳解(三):P2P技術之STUN、TURN、ICE詳解     本文介紹如何通過DOCKER搭建STUN和TURN伺服器,步驟如下 1:創建Dockerfile,內容如下: FROM      ubuntu:14.04 MAINTAINER Patxi Gortázar <[email protected]> RUN apt-get update && apt-get install -y \   curl \   libevent-core-2.0-5 \   libevent-extra-2.0-5 \   libevent-openssl-2.0-5 \   libevent-pthreads-2.0-5 \   libhiredis0.10 \   libmysqlclient18 \   libpq5 \   telnet \   wget RUN wget http://turnserver.open-sys.org/downloads/v4.4.2.2/turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz \   && tar xzf turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz \   && dpkg -i coturn_4.4.2.2-1_amd64.deb COPY ./turnserver.sh /turnserver.sh ENV TURN_USERNAME test ENV TURN_PASSWORD test ENV REALM kurento.org ENV NAT true EXPOSE 3478 3478/udp ENTRYPOINT ["/turnserver.sh"] 2:創建turnserver.sh,內容如下 #!/bin/bash set-e if[$NAT="true"-a-z"$EXTERNAL_IP"];then #Try to get public IP PUBLIC_IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4)||echo"No public ip found on http://169.254.169.254/latest/meta-data/public-ipv4" if[-z"$PUBLIC_IP"];then PUBLIC_IP=$(curl http://icanhazip.com)||exit1 fi #Try to get private IP PRIVATE_IP=$(ifconfig|awk'/inet addr/{print substr($2,6)}'|grep -v 127.0.0.1)||exit1 exportEXTERNAL_IP="$PUBLIC_IP/$PRIVATE_IP" echo"Starting turn server with external IP:$EXTERNAL_IP" fi echo'min-port=49152'>/etc/turnserver.conf echo'max-port=65535'>>/etc/turnserver.conf echo'fingerprint'>>/etc/turnserver.conf echo'lt-cred-mech'>>/etc/turnserver.conf echo"realm=$REALM">>/etc/turnserver.conf echo'log-file stdout'>>/etc/turnserver.conf echo"user=$TURN_USERNAME:$TURN_PASSWORD">>/etc/turnserver.conf [$NAT="true"]&&echo"external-ip=$EXTERNAL_IP">>/etc/turnserver.conf exec/usr/bin/turnserver"$@" 3:使用docker build 創建鏡像,執行結果如下 [root@www]# docker build -t teststurn_1 . Sending build context to Docker daemon  4.096kB Step 1/11 : FROM      ubuntu:14.04 ---> 6e4f1fe62ff1 Step 2/11 : MAINTAINER Patxi Gortázar <[email protected]> ---> Using cache ---> 4460f9f84053 Step 3/11 : RUN apt-get update && apt-get install -y  curl  libevent-core-2.0-5  libevent-extra-2.0-5  libevent-openssl-2.0-5  libevent-pthreads-2.0-5  libhiredis0.10  libmysqlclient18  libpq5  telnet  wget ---> Using cache ---> 05ed9ced48a5 Step 4/11 : RUN wget http://turnserver.open-sys.org/downloads/v4.4.2.2/turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz  && tar xzf turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz  && dpkg -i coturn_4.4.2.2-1_amd64.deb ---> Using cache ---> d82ed28fdac9 Step 5/11 : COPY ./turnserver.sh /turnserver.sh ---> Using cache ---> 1d37a488282c Step 6/11 : ENV TURN_USERNAME test ---> Running in bfd88f08db42 Removing intermediate container bfd88f08db42 ---> cf8af0504b95 Step 7/11 : ENV TURN_PASSWORD test ---> Running in b8ef33b7c213 Removing intermediate container b8ef33b7c213 ---> 32a832f23169 Step 8/11 : ENV REALM kurento.org ---> Running in bbe129edf5b3 Removing intermediate container bbe129edf5b3 ---> 21fdfe34689b Step 9/11 : ENV NAT true ---> Running in 5bdfe8555d5e Removing intermediate container 5bdfe8555d5e ---> dc7fc896841c Step 10/11 : EXPOSE 3478 3478/udp ---> Running in 67aaa1966f68 Removing intermediate container 67aaa1966f68 ---> a12646ed45ff Step 11/11 : ENTRYPOINT ["/turnserver.sh"] ---> Running in b8fc2ff09265 Removing intermediate container b8fc2ff09265 ---> f5e5acad0f81 Successfully built f5e5acad0f81 Successfully tagged teststurn_1:latest 執行完後可以看到自己創建的鏡像名稱為teststurn_1  4:啟動docker的鏡像,並開啟埠3478      docker run -d -p 3478:3478 -p 3478:3478/udp teststurn_1    啟動後需要等待一兩分鍾才能測試順暢 5:測試伺服器效果     打開 https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/  並輸入自己的本機IP和埠,分別測試兩種協議服務是否生效

H. 使用Docker鏡像搭建webrtc AppRTC 測試伺服器

參考這篇消州文章: https://blog.piasy.com/2017/06/17/out-of-the-box-webrtc-dev-env/index.html -> AppRTC-Server 一章

主要說下注意事項:
docker 鏡像pull 下來之後,運行命令如下:

其中態銷 <server public IP> 改為自己服拿閉蔽務器的地址

配置完成之後基本就可以正常運行了,另外要注意的是,docker 埠映射中防火牆有沒有禁用相關的埠,若相關埠沒有開,則手動打開,自行查詢吧。

I. 三步搭建私有Docker Registry(V2)伺服器

網上方法千奇百怪,長篇大論看得心累,所以我希望三步之內解決這件事,那麼開始吧。

你需要安裝1.6.0以上的版本的 Docker 。

如果要使用域名綁定私有倉庫,必須開啟SSL。

生成下面文字即為成功:

克隆倉庫。

編輯配置。

模板如下:

移動你的證書到 cert/ 目錄。

備份一下原文件,使用https配置。

然後 vim nginx.conf ,要改的地方很少,如下:

沒有問題的話已經運行起來了~~

現在你可以通過域名pull鏡像了:

新建一個文件夾以便管理。

填寫下面的內容到docker-compose.yml:

移動證書到自定義目錄:

然後配置Nginx文件即可:

域名修改一下,復制粘貼即可。

現在你可以通過域名pull鏡像了:

官方文檔: Deploying a registry server

熱點內容
app什麼情況下找不到伺服器 發布:2025-05-12 15:46:25 瀏覽:713
php跳過if 發布:2025-05-12 15:34:29 瀏覽:466
不定時演算法 發布:2025-05-12 15:30:16 瀏覽:129
c語言延時1ms程序 發布:2025-05-12 15:01:30 瀏覽:163
動物園靈長類動物配置什麼植物 發布:2025-05-12 14:49:59 瀏覽:732
wifi密碼設置什麼好 發布:2025-05-12 14:49:17 瀏覽:147
三位數乘兩位數速演算法 發布:2025-05-12 13:05:48 瀏覽:396
暴風影音緩存在哪裡 發布:2025-05-12 12:42:03 瀏覽:539
access資料庫exe 發布:2025-05-12 12:39:04 瀏覽:627
五開的配置是什麼 發布:2025-05-12 12:36:37 瀏覽:363