本文簡要說明在Ubuntu Docker環境搭建Open×××服務的步驟和須要注意和考慮的問題。在宿主機上直接搭建Open×××能夠參閱《CentOS6.7安裝Open×××服務端》,文章中的版本比較老,能夠參考Open××× GitHub查看最新的搭建方法。linux
注:本文假設讀者具有Linux網絡及運維基礎、路由交換、Docker、基本的英語等相關技能,如需得到幫助可在本文下方留言處留言。git
環境與先決條件:github
1.服務端:Ubuntu 14 LTSdocker
2.服務端:Docker Server/Client version 1.13.1,API version: 1.26ubuntu
3.服務端與客戶端時間保持一致bash
4.客戶端操做系統不做要求,Linux\Windows\Mac OSX均可以服務器
服務端基本信息:網絡
安裝Docker服務端app
安裝Docker很簡單,主要是要區分Ubuntu版本和認真參閱Docker文檔,此處簡單列下命令,一帶而過:運維
# Install docker engine on Ubuntu 16 LTS and Ubuntu 14 LTS sudo apt-get update sudo apt-get install -y --no-install-recommends \ apt-transport-https \ ca-certificates \ curl \ software-properties-common curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add - sudo apt-get install apt-transport-https ca-certificates sudo apt-key adv \ --keyserver hkp://ha.pool.sks-keyservers.net:80 \ --recv-keys 58118E89F3A912897C070ADBF76221572C52609D # echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list sudo add-apt-repository \ "deb https://apt.dockerproject.org/repo/ \ ubuntu-$(lsb_release -cs) \ main" apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D sudo apt-get update -y apt-cache policy docker-engine apt-cache madison docker-engine sudo apt-get upgrade -y sudo reboot # For Ubuntu 14.04 LTS # sudo apt-get install linux-p_w_picpath-generic-lts-xenial linux-generic-lts-xenial # sudo reboot sudo apt-get install -y --no-install-recommends \ linux-p_w_picpath-extra-$(uname -r) \ linux-p_w_picpath-extra-virtual # # use next cmd line to decrease time for install docker-engine # wget -c https://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.13.1-0~ubuntu-trusty_amd64.deb # sudo apt-get install -y aufs-tools cgroup-lite libltdl7 libsystemd-journal0 # sudo dpkg -i docker-engine_1.13.1-0~ubuntu-trusty_amd64.deb sudo apt-get install docker-engine -y sudo sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"/g' /etc/default/grub sudo update-grub sudo service docker restart || sudo systemctl restart docker.service sudo service docker status || sudo systemctl status docker.service # sudo groupadd docker sudo usermod -aG docker $USER sudo groups $USER # Install docker Client utilities cd /tmp; wget -c https://www.kernel.org/pub/linux/utils/util-linux/v2.29/util-linux-2.29.tar.gz tar xzvf util-linux-2.29.tar.gz cd util-linux-2.29 ./configure --without-ncurses && make nsenter sudo cp nsenter '/usr/local/bin' cd rm -rf /tmp/util-linux-2.29 wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker; echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc
使用的Docker鏡像是來自https://store.docker.com/community/p_w_picpaths/kylemanna/open***,文檔很清晰,能夠參考它的github,https://github.com/kylemanna/docker-open***,更爲詳細的文檔在https://github.com/kylemanna/docker-open***/tree/master/docs
部署Open×××容器關鍵點
部署Open×××容器很簡單,只須要注意查看docker容器運行日誌(docker logs <container id> | <container name>)和宿主機須要開啓的內核參數。
臨時調整內核參數可使用下面三行命令:
sudo sysctl -w net.ipv4.conf.default.accept_source_route=1
sudo sysctl -w net.ipv4.conf.all.rp_filter=0
sudo sysctl -w net.ipv4.ip_forward=1
永久調整能夠編輯 sysctl.conf以及include目錄(/etc/sysctl.d/)下的自定義文件( End-users can use 60-*.conf and above, or use /etc/sysctl.conf directly),也可參考/etc/sysctl.d/README文件得到配置內核參數的最佳實踐。
更爲須要注意的是,最新版本的Docker增長了Linux Capabilities(可容許普通用戶和進程執行一些root才能執行的特殊權限),須要設置正確的的cap參數,NET_RAW和NET_ADMIN,由於默認策略是Drop,在docker run時使用--cap-add NET_ADMIN --cap-add NET_RAW參數添加。具體的能夠參考:https://docs.docker.com/engine/reference/run/#/runtime-privilege-and-linux-capabilities
服務端簡要的步驟以下:
# References: # https://store.docker.com/community/p_w_picpaths/kylemanna/open*** # https://github.com/kylemanna/docker-open*** # https://github.com/kylemanna/docker-open***/tree/master/docs # Create Open××× container persistent storage using docker volume O×××_DATA="o***-data" docker volume create --name $O×××_DATA # Generate Open××× Server configuration file docker run -v $O×××_DATA:/etc/open*** --rm kylemanna/open*** o***_genconfig -u tcp://<ip address or fqdn> # Initialize Open××× Server PKI docker run -v $O×××_DATA:/etc/open*** --rm -it kylemanna/open*** o***_initpki # Adjust Linux host kernel configutration sudo sysctl -w net.ipv4.conf.default.accept_source_route=1 sudo sysctl -w net.ipv4.conf.all.rp_filter=0 sudo sysctl -w net.ipv4.ip_forward=1 # Create Open××× Server container # https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities # NET_RAW Use RAW and PACKET sockets. Such as "iptables" # NET_ADMIN Perform various network-related operations. docker run -v $O×××_DATA:/etc/open*** -d --name "open***" --hostname="open***" -v /etc/localtime:/etc/localtime -p 1194:1194 --cap-add NET_ADMIN --cap-add NET_RAW kylemanna/open*** # Gen Open××× client configuration file docker run -v $O×××_DATA:/etc/open*** --rm -it kylemanna/open*** easyrsa build-client-full dinggd nopass docker run -v $O×××_DATA:/etc/open*** --rm kylemanna/open*** o***_getclient dinggd > dinggd.o*** # Get Open××× Client List docker run --rm -it -v $O×××_DATA:/etc/open*** kylemanna/open*** o***_listclients # Revoking Client Certificates docker run --rm -it -v $O×××_DATA:/etc/open*** kylemanna/open*** easyrsa revoke dinggd docker run --rm -it -v $O×××_DATA:/etc/open*** kylemanna/open*** easyrsa gen-crl
經過上述步驟後,會在當前目錄下得到dinggd.o***配置文件(dinggd是Open×××用戶的用戶名),能夠直接用於Open×××客戶端配置文件。
這個鏡像的優勢是:
1.服務器證書以及客戶端證書、key是放在Open×××的客戶端配置文件中的,大大提升了文件系統整潔性,一個用戶安裝Open×××客戶端後,只須要一個Open×××客戶端配置文件就能夠完成整個Open×××鏈接操做;
2.利用docker容器中的腳本&命令能夠很方便的添加、刪除客戶端用戶,對於Open×××的管理者來講配置簡單,使用方便;
這個鏡像的缺點是:
1.默認不打印日誌到數據存儲(這個操做是能夠配置的,如在服務端配置文件中添加log /var/log/open***/open***.log和log-append /var/log/open***/open***.log)
2.另一個缺點是默認生成的客戶端的日誌一樣也是打印到syslog中,這個也是能夠配置的,配置與上近同。
簡要的排錯技巧:
1.逐個排除法排除,先排除服務器端,包括服務器端的配置文件的合法性,留意docker 容器的啓動日誌中的報錯
2.服務端須要正確設置內核參數,根據Docker Server版本的不一樣注意Linux cap的參數配置,參照本文上文提示
3.排除服務端問題後,檢查路由器、防火牆和代理設置,NAT環境下認真設置正確的端口轉發
4.排除客戶端問題,認真查看系統日誌或自定義的Open×××客戶端日誌,檢查路由器、防火牆和代理設置
5.注意客戶端和服務端時間一致的問題
tag: Open×××容器化,Open×××故障排除,Open×××常見問題
--end--