當前位置:首頁 » 文件傳輸 » 外部訪問docker集群
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

外部訪問docker集群

發布時間: 2022-05-26 15:25:39

1. 如何從零開始搭建Docker Swarm集群

檢查節點Docker配置 1. 打開Docker配置文件(示例是centos 7) vim /etc/sysconfig/docker 2. 添加-H tcp://0.0.0.0:2375到OPTIONS OPTIONS='-g /cutome-path/docker -H tcp://0.0.0.0:2375' 3. CentOS6.6 需要另外添加-H unix:///var/run/docker.sock OPTIONS='-g /mnt/docker -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock' 分別給A、B節點安裝swarm $ docker pull swarm 生成集群token(一次) $ docker run --rm swarm create 其中就是我們將要創建集群的token 添加節點A、B到集群 $ docker run -d swarm join --addr=192.168.20.1:2375 token:// $ docker run -d swarm join --addr=192.168.20.2:2375 token:// 列出集群A、B節點 $ docker run --rm swarm list token:// 192.168.20.1:2375 192.168.20.2:2375 集群管理: 在任何一台主機A、B或者C(C:192.168.20.3)上開啟管理程序。例如在C主機開啟: $ docker run -d -p 8888:2375 swarm manage token:// 現在你就可以在主機C上管理集群A、B: $ docker -H 192.168.20.3:8888 info $ docker -H 192.168.20.3:8888 ps $ docker -H 192.168.20.3:8888 logs ... 在集群上運行容器 $ docker -H 192.168.20.3:8888 run -d --name web1 nginx $ docker -H 192.168.20.3:8888 run -d --name web2 nginx $ docker -H 192.168.20.3:8888 run -d --name web3 nginx $ docker -H 192.168.20.3:8888 run -d --name web4 nginx $ docker -H 192.168.20.3:8888 run -d --name web5 nginx 查看集群A、B內的容器 $ docker -H 192.168.20.3:8888 ps -a 結果如下:

2. 集群外部怎麼訪問 docker容器

Docker容器運行後,如何進入容器進行操作呢?起初我是用SSH。如果只啟動一個容器,用SSH還能應付,只需要將容器的22埠映射到本機的一個埠即可。當我啟動了五個容器後,每個容器默認是沒有配置SSH Server的,安裝配置SSHD,映射容器SSH埠,實在是麻煩。 我發現很多Docker鏡像都是沒有安裝SSHD服務的,難道有其他方法進入Docker容器?有很多種方法,包括使用 docker attach 命令或 nsenter 工具等。
使用 attach 命令有時候並不方便。當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。
nsenter 可以訪問另一個進程的名字空間。
為了連接到容器,你還需要找到容器的第一個進程的 PID,可以通過下面的命令獲取。
PID=$(docker inspect –format 「{{ .State.Pid }}」 <container>) //將<container>換成你的容器id
通過這個 PID,就可以連接到這個容器:

3. 如何解決Docker容器與外部主機通信的問題

由於容器里可以訪問該服務,所以服務是啟動了的;在宿主機可以訪問容器中的nginx歡迎界面,說明宿主機可以訪問容器中80埠的服務

4. 請教docker有什麼好方法,給容器映射一個外部可以獨立訪問的ip

綁定公網IP有多種方法:
1、把埠用 --publish forward 進容器里,或者說把埠發布出來。如 docker run -p 80:80 nginx
2、把某個虛擬或物理 interface bridge 進容器里,可以用一個叫 pipework 的工具:
3、直接不對容器網路做虛擬化/隔離,用 --net=host
浮動IP
浮動IP目前沒有成熟的方案,在我看來,一個是自己寫agent來通過iptables自動完成漂移,另一個是寄希望於官方的libnetwork

5. 如何配置一個 Docker Swarm 原生集群

如何配置一個 Docker Swarm 原生集群

嗨,大家好。今天我們來學一學Swarm相關的內容吧,我們將學習通過Swarm來創建Docker原生集群。Docker Swarm是用於Docker的原生集群項目,它可以將一個Docker主機池轉換成單個的虛擬主機。Swarm工作於標準的Docker API,所以任何可以和Docker守護進程通信的工具都可以使用Swarm來透明地伸縮到多個主機上。就像其它Docker項目一樣,Swarm遵循「內置電池,並可拆卸」的原則(LCTT 譯註:batteries included,內置電池原來是 Python 圈裡面對 Python 的一種贊譽,指自給自足,無需外求的豐富環境;but removable,並可拆卸應該指的是非強制耦合)。它附帶有一個開箱即用的簡單的後端調度程序,而且作為初始開發套件,也為其開發了一個可插拔不同後端的API。其目標在於為一些簡單的使用情況提供一個平滑的、開箱即用的體驗,並且它允許切換為更強大的後端,如Mesos,以用於大規模生產環境部署。Swarm配置和使用極其簡單。

這里給大家提供Swarm 0.2開箱的即用一些特性。
Swarm 0.2.0大約85%與Docker引擎兼容。
它支持資源管理。
它具有一些帶有限制和類同功能的高級調度特性。
它支持多個發現後端(hubs,consul,etcd,zookeeper)
它使用TLS加密方法進行安全通信和驗證。
那麼,我們來看一看Swarm的一些相當簡單而簡用的使用步驟吧。

1. 運行Swarm的先決條件
我們必須在所有節點安裝Docker 1.4.0或更高版本。雖然各個節點的IP地址不需要要公共地址,但是Swarm管理器必須可以通過網路訪問各個節點。
注意:Swarm當前還處於beta版本,因此功能特性等還有可能發生改變,我們不推薦你在生產環境中使用。

2. 創建Swarm集群
現在,我們將通過運行下面的命令來創建Swarm集群。各個節點都將運行一個swarm節點代理,該代理會注冊、監控相關的Docker守護進程,並更新發現後端獲取的節點狀態。下面的命令會返回一個唯一的集群ID標記,在啟動節點上的Swarm代理時會用到它。
在集群管理器上運行:
# docker run swarm create

Creating Swarm Cluster

3. 啟動各個節點上的Docker守護進程
我們需要登錄進我們將用來創建集群的每個節點,並在其上使用-H標記啟動Docker守護進程。它會保證Swarm管理器能夠通過TCP訪問到各個節點上的Docker遠程API。要啟動Docker守護進程,我們需要在各個節點內部運行以下命令。
# docker -H tcp://0.0.0.0:2375 -d

Starting Docker Daemon

4. 添加節點
在啟用Docker守護進程後,我們需要添加Swarm節點到發現服務,我們必須確保節點IP可從Swarm管理器訪問到。要完成該操作,我們需要在各個節點上運行以下命令。
# docker run -d swarm join --addr=<node_ip>:2375 token://<cluster_id>

Adding Nodes to Cluster
注意:我們需要用步驟2中獲取到的節點IP地址和集群ID替換這里的<node_ip>和<cluster_id>。

5. 開啟Swarm管理器
現在,由於我們已經獲得了連接到集群的節點,我們將啟動swarm管理器。我們需要在集群管理器中運行以下命令。
# docker run -d -p <swarm_port>:2375 swarm manage token://<cluster_id>

Starting Swarm Manager

6. 檢查配置
一旦管理運行起來後,我們可以通過運行以下命令來檢查配置。
# docker -H tcp://<manager_ip:manager_port> info

Accessing Swarm Clusters
注意:我們需要替換<manager_ip:manager_port>為運行swarm管理器的主機的IP地址和埠。

7. 使用docker CLI來訪問節點
在一切都像上面說得那樣完美地完成後,這一部分是Docker Swarm最為重要的部分。我們可以使用Docker CLI來訪問節點,並在節點上運行容器。
# docker -H tcp://<manager_ip:manager_port> info
# docker -H tcp://<manager_ip:manager_port> run ...

8. 監聽集群中的節點
我們可以使用swarm list命令來獲取所有運行中節點的列表。
# docker run --rm swarm list token://<cluster_id>

Listing Swarm Nodes

尾聲
Swarm真的是一個有著相當不錯的功能的docker,它可以用於創建和管理集群。它相當易於配置和使用,當我們在它上面使用限制器和類同器時它更為出色。高級調度程序是一個相當不錯的特性,它可以應用過濾器來通過埠、標簽、健康狀況來排除節點,並且它使用策略來挑選最佳節點。那麼,如果你有任何問題、評論、反饋,請在下面的評論框中寫出來吧,好讓我們知道哪些材料需要補充或改進。謝謝大家了!盡情享受吧 :-)
Ubuntu 15.04下安裝Docker http://www.linuxidc.com/Linux/2015-07/120444.htm
配置 Docker 鏡像下載的本地 mirror 服務 http://www.linuxidc.com/Linux/2015-07/120061.htm
Docker安裝應用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm
在 Docker 中使用 Mysql http://www.linuxidc.com/Linux/2014-01/95354.htm
在Ubuntu Trusty 14.04 (LTS) (64-bit)安裝Docker http://www.linuxidc.com/Linux/2014-10/108184.htm
Docker安裝應用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm
Ubuntu 14.04安裝Docker http://www.linuxidc.com/linux/2014-08/105656.htm
阿里雲CentOS 6.5 模板上安裝 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm

6. 如何搭建原生態Docker集群

檢查節點Docker配置
1. 打開Docker配置文件(示例是centos 7)
vim /etc/sysconfig/docker

2. 添加-H tcp://0.0.0.0:2375到OPTIONS
OPTIONS='-g /cutome-path/docker -H tcp://0.0.0.0:2375'

3. CentOS6.6 需要另外添加-H unix:///var/run/docker.sock
OPTIONS='-g /mnt/docker -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'

分別給A、B節點安裝swarm
$ docker pull swarm

生成集群token(一次)
$ docker run --rm swarm create


其中就是我們將要創建集群的token

添加節點A、B到集群
$ docker run -d swarm join --addr=192.168.20.1:2375 token://

$ docker run -d swarm join --addr=192.168.20.2:2375 token://

列出集群A、B節點
$ docker run --rm swarm list token://

192.168.20.1:2375
192.168.20.2:2375

集群管理:
在任何一台主機A、B或者C(C:192.168.20.3)上開啟管理程序。例如在C主機開啟:
$ docker run -d -p 8888:2375 swarm manage token://

現在你就可以在主機C上管理集群A、B:
$ docker -H 192.168.20.3:8888 info
$ docker -H 192.168.20.3:8888 ps
$ docker -H 192.168.20.3:8888 logs ...

在集群上運行容器
$ docker -H 192.168.20.3:8888 run -d --name web1 nginx
$ docker -H 192.168.20.3:8888 run -d --name web2 nginx
$ docker -H 192.168.20.3:8888 run -d --name web3 nginx
$ docker -H 192.168.20.3:8888 run -d --name web4 nginx
$ docker -H 192.168.20.3:8888 run -d --name web5 nginx

查看集群A、B內的容器
$ docker -H 192.168.20.3:8888 ps -a

7. Docker的mysql集群節點可以正常創建,但無法正常連接到宿主機的mysql應該如何解決



Ambari是Apache的開源項目,它幫助用戶在GUI頁面上簡單的部署、管理、監控Hadoop集群環境。Ambari支持的Hadoop組件包括HDFS、Hive、HBase、Spark、Yarn等,HortonWorks官方也是採用Ambari來完成自家HDP套件的安裝、管理及監控的。除了預置的組件之外,Ambari還支持自定義組件的安裝,同時,支持RESTful的API,繼而可以通過命令行等方式調用Ambari來完成一些自動化的任務。

本文共分為兩部分,第一部分介紹如何在Docker虛擬化環境中部署Ambari;第二部分介紹如何基於Ambari來部署和管理Hadoop集群。

### 環境信息
* Docker發行版:Docker for Mac
* Docker版本:17.06.2-ce
* Docker容器OS:Ubuntu 14.04
* Ambari版本:2.5.2.0

Docker環境准備

  • 拉取Docker鏡像:在宿主機上執行命令docker pull ubuntu:14.04從遠端倉庫中獲取Ubuntu的鏡像,也可以獲取其他OS的鏡像,本文以Ubuntu為例

  • 啟動Docker容器:執行如下命令,以ubuntu:14.04鏡像為基礎啟動容器:
    docker run -itd --name ambari_new -p 8080:8080 -p 3306:3306 -v /Users/yuxiaolei/Workspace/dockerShared:/dockerShared ubuntu:14.04 /bin/bash

  • 由於Ambari啟動Web程序的時候佔用8080埠,因此要從Docker宿主機上訪問Ambari頁面,需要通過參數 -p 來制定埠映射;
    作為新手,筆者在容器內部署好Ambari之後,才發現Web頁面的8080埠和MySQL的3306埠(可選)沒有暴露給Docker宿主機,也就沒法從宿主機上通過瀏覽器來登陸Ambari,因此必須想辦法在已有容器上開放埠。

    有兩個方法:
    1)如果宿主機為Linux系統,則修改iptables防火牆來指定埠映射規則;
    2)如果是非Linux系統,可以將已裝Ambari的容器commit為新的鏡像,再基於該鏡像創建新的容器。此時,就可以在docker run命令中添加參數 -p 來指定埠映射了。

    還有一個問題,Ambari將其數據存儲資料庫中,支持MySQL、PostgreSQL等資料庫;容器內安裝MySQL之後,基於上一步創建的新容器里,會發現MySQL啟動不起來,執行命令/etc/init.d/mysql restart啟動失敗,在/var/log/mysql/error.log日誌文件中列印有170802 14:02:59 [ERROR] Fatal error: Can't open and lock privilege tables: Got error 140 from storage engine的錯誤,經過網上查資料,需要在創建容器的時候添加參數-v /var/lib/mysql將MySQL數據存儲路徑聲明為數據卷,即可解決問題。
    啟動容器之後,執行命令docker exec -it ambari /bin/bash進入容器內部。

    Ambari安裝

  • 配置Ubuntu的軟體倉庫源:
    國內建議採用阿里雲的軟體源,在root賬號下用vim打開/etc/apt/sources.list文件,刪除文件所有內容,粘貼如下內容:

    deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

    執行命令apt-get update完成軟體列表更新

  • 安裝Ambari所依賴的軟體

    apt-get install software-properties-common
    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java8-installer
    sudo apt-get install oracle-java8-set-default
    完成安裝之後,在 ~/.bashrc 文件末尾添加命令 `export JAVA_HOME=/usr/lib/jvm/java-8-oracle ` 以配置JAVA\_HOME 環境變數。
    create database ambari;use ambari;GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root_password' WITH GRANT OPTION;FLUSH PRIVILEGES;exit;
    由於Ambari的數據存儲在MySQL資料庫中,這里為Ambari單獨創建了database,並為其賦了完全控制許可權;說明:假設MySQL資料庫root用戶的密碼為:root\_password
    修改 `/etc/mysql/my.conf`,將`skip-external-locking`注釋掉,並確保 `bind-address = 0.0.0.0` 配置,以使MySQL可被遠程主機訪問。
    執行命令`/etc/init.d/mysql restart`重啟MySQL 服務。
  • 時間同步伺服器ntp:執行命令apt-get install ntp安裝ntp時間同步伺服器,以便於集群環境中各節點的時鍾一致;執行命令sudo service ntp restart重啟ntp服務。

  • MySQL:執行命令apt-get install mysql-server安裝MySQL伺服器,安裝完成後執行命令mysql -uroot -proot進入MySQL客戶端,執行如下SQL代碼:

  • Oracle JDK:逐條執行如下命令,以添加WebUpd8團隊(https://launchpad.net/~webupd8team/+archive/ubuntu/java)提供的Oracle JDK倉庫源,並從該倉庫安裝JDK:

  • 下載Ambari倉庫文件

  • 進入cd /etc/apt/sources.list.d目錄,執行命令wget http://public-repo-1.hortonworks.com/ambari/ubuntu14/2.x/updates/2.5.2.0/ambari.list從HortonWorks倉庫中下載Ambari源文件,下載後切勿修改list文件名;

  • 執行命令apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD以信任遠端倉庫的GPG簽名

  • 執行命令apt-get update更新Ambari軟體源

  • 執行命令apt-get install ambari安裝Ambari套件,由於軟體包較大(700多MB),這里情耐心等待,不過apt-get支持斷點下載,網路終端後重新執行命令時不會從零開始下載

  • 配置Ambari:

  • 執行命令mysql -uroot -proot進入MySQL客戶端,執行命令source ambari進入ambari的資料庫,並執行命令source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql來完成Ambari的資料庫表初始化操作;

  • 執行命令ambari-server setup啟動Ambari的引導式配置操作,根據指導做配置即可。需要注意的是,JDK不要選擇由Ambari從網路下載,應該選擇自定義路徑,然後輸入/usr/lib/jvm/java-8-oracle即可;

  • 啟動Ambari:執行命令ambari-server start,啟動日誌存儲路徑為/var/log/ambari-server/ambari-server.log

  • 啟動之後,由於我們之前做了Docker容器的埠映射,因此可以在宿主機上打開瀏覽器輸入http://localhost:8080即可訪問Ambari登陸頁面

  • 登陸用戶名和密碼均為admin,登陸之後就可以看到Ambari的首頁了,如下圖:
    {% asset_img

8. docker相當於一個Linux上虛擬機嗎可以在docker上放置網站,提供外部訪問嗎

當前,Docker內部使用的是Linux容器技術(LXC),這是運行在與它的宿主機器同樣的操作系統上。這准許它可以和宿主機器共享許多系統資源。它也會使用AuFS作為文件系統,也為你管理網路。
AuFS是一個層狀的文件系統,因此你可以有一個只讀部分和一個只寫部分,然後將二者組合起來。你可以使系統的共同的部分用作只讀,那塊是被所有容器共享,並且給每個容器自己的可寫區域

Mitisky
翻譯於 3年前
3人頂

頂 翻譯得不錯哦!
好吧,讓我們假設你有一個容器鏡像(image)容量是1GB,如果你想用一個完整的虛擬機來裝載,你得需要容量的大小是1GB乘上你需要虛擬機的數量。但使用Linux容器虛擬化技術(LXC)和AuFS,你可以共享1GB容量,如果你需要1000個容器,假設他們都運行在同樣的系統影像上,你仍然可以用稍微比1GB多一點的空間來給容器系統,
一個完整的虛擬化系統得到了分給它的自有全部資源,只有最小的共享。你獲得了更多的隔離,但是這是很龐大的(需要更多的資源)
使用Linux容器虛擬化技術(LXC),隔離性方面有所缺失,但是他們更加輕量,而且需要更少資源。所以你可以輕松運行1000個容器在一個宿主機器上,甚至眼都不眨。試著用Xen來實現那個,我想除非你有一個超級強大的主機,不然我看是不可能的了

Mitisky
翻譯於 3年前
2人頂

頂 翻譯得不錯哦!
一個完整的虛擬系統通常得用幾分鍾去啟動,linux容器虛擬技術(LXC)只要數秒,甚至有時時間更短。
對於每種虛擬系統都有反對者和支持者。如果你希望一個完全隔離的和資源有保障的環境,那麼完全的虛擬機是你的選擇。如果你只希望進程之間相互隔離,並且希望大量運行他們在一個合理大小的宿主機器上。那麼linux容器虛擬技術(LXC)是你的選擇。

9. 怎麼用虛擬機搭建docker集群

與安裝Docker Compose相似,你可以從GitHub的release分支中獲取Machine的二進制安裝文件,也可以下載源代碼自己編譯安裝或者安裝Docker ToolBox,ToolBox打包了所有的Docker工具,提供UI界面的安裝。

例如,在OS X 機器上,你可以在Github上獲取安裝文件,並存儲在 /usr/local/bin/docker-machine路徑下,然後賦予可執行許可權,可以通過測試版本的方式測試是否安裝正確。例如:
$ sudo curl -L https://github.com/docker/machine/releases/download/v0.6.0/
docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine

$ sudo chmod +x /usr/local/bin/docker-machine

$ docker-machine version

10. docker 訪問不了外部網路嗎

宿主機啟docker候 docker0 虛擬網卡容器都通外面通信