Docker 是 Docker.Inc 公司開源的一個基於 LXC技術之上構建的Container容器引擎, 源代碼託管在 GitHub 上, 基於Go語言並聽從Apache2.0協議開源。
Docker是經過內核虛擬化技術(namespaces及cgroups等)來提供容器的資源隔離與安全保障等。因爲Docker經過操做系統層的虛擬化實現隔離,因此Docker容器在運行時,不須要相似虛擬機(VM)額外的操做系統開銷,提升資源利用率。php
Mount Namespace - 用於隔離文件系統的掛載點 UTS Namespace - 用於隔離 HostName 和 DomianName IPC Namespace - 用於隔離進程間通訊 PID Namespace - 用於隔離進程
控制組(cgroups)是 Linux 內核的一個特性,主要用來對共享資源進行隔離、限制、審計等。只有css
能控制分配到容器的資源,才能避免當多個容器同時運行時的對系統資源的競爭。html
控制組技術最先是由 Google 的程序員在 2006 年提出,Linux 內核自 2.6.24 開始支持。html5
控制組能夠提供對容器的內存、CPU、磁盤 IO 等資源的限制和審計管理。node
Image(鏡像):
那麼鏡像究竟是什麼呢?Docker 鏡像能夠看做是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。
Container(容器)
容器(Container)的定義和鏡像(Image)幾乎如出一轍,也是一堆層的統一視角,惟一區別在於容器的最上面那一層是可讀可寫的。
Repository(倉庫)
鏡像倉庫是 Docker 用來集中存放鏡像文件的地方,相似於咱們以前經常使用的代碼倉庫。
一般,一個倉庫會包含同一個軟件不一樣版本的鏡像,而標籤就經常使用於對應該軟件的各個版本 。
咱們能夠經過 <倉庫名> : <標籤> 的格式來指定具體是這個軟件哪一個版本的鏡像。若是不給出標籤,將以 Latest 做爲默認標籤。
python
docker是傳統的CS架構分爲docker client和docker server
Docker 客戶端是 Docker 用戶與 Docker 交互的主要方式。當您使用 Docker 命令行運行命令時,Docker 客戶端將這些命令發送給服務器端,服務端將執行這些命令。
Docker 命令使用 Docker API 。Docker 客戶端能夠與多個服務端進行通訊。linux
組件:鏡像,容器,倉庫,網路,存儲nginx
鏡像:把系統文件打包git
這裏咱們使用清華源:
https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
操做步驟:程序員
yum remove docker docker-common docker-selinux docker-engine yum install -y yum-utils device-mapper-persistent-data lvm2 wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#' /etc/yum.repos.d/docker-ce.repo #更新yum緩存 yum makecache fast yum install docker-ce -y docker version systemctl start docker 上傳安裝包, yum localinstall '*.rpm'
官網地址 https://www.daocloud.io/mirror 加速命令 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io 須要重啓docker 阿里鏡像加速地址 https://cr.console.aliyun.com/cn-hangzhou/instances/repositories 加速命令 mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"] } EOF systemctl daemon-reload systemctl restart docker
思路:
1.開啓yum緩存
2.全新環境安裝docker
3.將緩存的包所有打包出來
4.安裝的時候使用rpm -ivh *.rpm方式安裝
運行一個Hello world
docker run alpine /bin/echo "Hello world"
選擇鏡像建議:
1.優先選擇官方的
2.選擇星星多的
docker search centos #搜索鏡像全部的版本號.jq是一個json格式化工具 yum install jq curl -s https://registry.hub.docker.com/v1/repositories/centos/tags|jq
docker pull centos docker pull busybox docker pull busybox:1.29
docker images
docker rmi centos:7 docker images|awk 'NR>1{print "docker rmi "$3}'|bash docker rmi $(docker images|awk 'NR>1{print $3}') docker rmi $(docker images -q)
docker save -o centos.tar centos:latest
docker load < centos.tar
docker run -d -p 80:80 nginx #啓動一個容器並保持不退出 並自定義命名 docker run --name mydocker -t -i centos /bin/bash #啓動一個容器並保持不退出 docker run -it -d centos:7 /bin/bash #啓動並進入容器,啓動一個終端,pid爲1 docker run -it centos:7 /bin/bash #啓動一個已經中止的容器 docker start 容器ID -d放後臺 -p端口映射 #system管理啓動 docker run -d -it --privileged nginx-1 /usr/sbin/init
docker stop 容器的ID #批量中止全部運行的容器 docker stop $(docker ps -q)
#查看當前正在運行的容器 docker ps #查看正在運行以及中止運行的容器 docker ps -a docker ps -q docker ps -aq #查看容器的詳細信息 docker inspect 容器ID
docker exec會分配一個新的終端tty #進入已經運行的容器 docker exec -it 容器ID /bin/bash #啓動並進入容器,啓動一個終端,pid爲1 docker run -it centos:7 /bin/bash docker attach會使用同一個終端 docker attach 容器ID
刪除單個容器
docker rm 容器ID
批量刪除容器
docker rm $(docker ps -aq)
docker run -P :80 -d nginx:latest
-p 宿主機端口:容器端口
docker run -p 8080:80 -d nginx:latest -p 80:80 -p 443:443 -p 宿主機IP:宿主機端口:容器端口
若是想多個容器使用8080端口,能夠經過添加多個IP地址實現
ifconfig eth0:1 10.0.1.13 up docker run -d -p 10.0.1.11:8080:80 nginx:latest docker run -d -p 10.0.1.13:8080:80 nginx:latest
進入容器裏修改站點目錄,而後訪問測試
docker exec -it bdb2a4e7e24d /bin/bash echo "web01" > /usr/share/nginx/html/index.html docker exec -it 31c1de138dda /bin/bash echo "web02" > /usr/share/nginx/html/index.html
訪問測試:
[root@docker01 ~]# curl 10.0.1.11:8080 web02 [root@docker01 ~]# curl 10.0.1.13:8080 web01
-v 宿主機目錄:容器內目錄
下面咱們來建立一個html5小遊戲
mkdir /data/xiaoniao -p cd /data/ unzip xiaoniaofeifei.zip -d xiaoniao /
docker run -d -p 80:80 -v /data/xiaoniao:/usr/share/nginx/html nginx:latest docker ps
10.0.1.11
--volumes-from (跟某一個已經存在的容器掛載相同的卷)
查看當前容器有哪些卷
docker volume ls
下面咱們利用容器卷建立一個小遊戲
docker run -d -p 8080:80 --volume xiaoniao:/usr/share/nginx/html nginx:latest docker volume ls
docker volume inspect xiaoniao
\cp -a /data/xiaoniao/* /var/lib/docker/volumes/xiaoniao/_data/
docker run -d -p 8090:80 --volume xiaoniao:/usr/share/nginx/html nginx:latest
c7_nginx:v1
基於Centos7建立自定義nginx鏡像 1.拉取一個基礎鏡像 docker run --name myc7 -it centos:7 /bin/bash 2.安裝nginx cat > /etc/yum.repos.d/nginx.repo<<EOF [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF yum install nginx 3.基於自定義的容器生成新的鏡像 docker commit myc7 c7_nginx:v1 4.查看是否生成新鏡像 docker images 5.基於自定義的nginx鏡像建立新的容器並指定映射端口 docker run --name mynginx -itd -p 80:80 c7_nginx:v1 nginx -g "daemon off;" 6.查看容器是否運行並在windows訪問測試 docker ps 10.0.0.51 7.進入容器查看進程 docker exec -it mynginx /bin/bash ps aux nginx -s stop 8.重啓啓動容器測試是否能夠訪問 docker start mynginx 10.0.0.51 有報錯,能夠換國內源安裝 docker cp /etc/yum.repos.d/CentOS-Base.repo b1965575341b:/etc/yum.repos.d/ docker cp /etc/yum.repos.d/CentOS-epel.repo b1965575341b:/etc/yum.repos.d/
項目要求:
一個容器實現:
訪問8080端口跳轉到xiaoniao
訪問8090跳轉到game
數據目錄,配置文件,日誌文件都以映射掛載的方式實現
1.建立數據目錄 mkdir /code cd /code 2.編寫Nginx配置文件 cat >game.conf<<EOF server { listen 8080; server_name localhost; location / { root /opt/xiaoniao/; index index.html index.htm; } } server { listen 8090; server_name localhost; location / { root /opt/game/; index index.html index.htm; } } EOF 3.上傳代碼目錄並解壓 tar zxf xiaoniao.tar.gz tar zxf game.tar.gz 4.關鍵容器並掛載 docker run -d \ -p 8080:8080 \ -p 8090:8090 \ -v /code/game/:/opt/game/ \ -v /code/xiaoniao/:/opt/xiaoniao/ \ -v /code/game.conf:/etc/nginx/conf.d/game.conf \ -v /var/log/nginx/:/var/log/nginx/ \ c7_nginx:v1 \ nginx -g "daemon off;" 5.訪問測試 10.0.0.51:8080 10.0.0.52:8090
下面咱們基於centos容器製做一個新鏡像,並安裝nginx服務
docker run -it centos:7 /bin/bash yum install wget install openssh-clients -y rm -rf /etc/yum.repos.d/* wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo cat >/etc/yum.repos.d/nginx.repo<<EOF [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key EOF yum makecache fast yum install nginx -y scp -r 10.0.1.51:/data/* /opt/ mv /opt/game.conf /etc/nginx/conf.d/ docker ps docker commit 容器ID game:v1 docker images docker save game:v1 > game-v1.tar docker load < game-v1.tar docker run -p 8080:8080 -p 8090:8090 -d game:v1 nginx -g 'daemon off;'
docker run -it -d -p 80:80 centos:7 /bin/bash docker exec -it ed90a5662ac4 /bin/bash
0.初始化 使用阿里源 groupadd www -g 1000 useradd www -u 1000 -g 1000 -M -s /sbin/nologin rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 1.安裝依賴環境 nginx+php cat>/etc/yum.repos.d/nginx.repo<<EOF [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF yum makecache fast yum install nginx php-fpm php-mbstring php-gd unzip -y 2.配置Nginx和php rm -rf /etc/nginx/conf.d/default.conf sed -i '/^user/c user www;' /etc/nginx/nginx.conf sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf sed -i '/daemonize/s#no#yes#g' /etc/php-fpm.conf cat >/etc/nginx/conf.d/kod.conf<<EOF server { server_name localhost; listen 80; root /code; index index.php index.html; location ~ \.php\$ { root /code; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; include fastcgi_params; } } EOF 3.配置代碼 mkdir /code cd /code curl -o kodexplorer4.40.zip http://static.kodcloud.com/update/download/kodexplorer4.40.zip unzip kodexplorer4.40.zip chown -R www:www /code 4.啓動腳本 cd /root cat >init.sh<<EOF #!/bin/bash php-fpm -c /etc/php.ini -y /etc/php-fpm.conf nginx -g 'daemon off;' EOF chmod +x init.sh 5.測試 方法一: #若前面沒有映射端口,執行腳本用curl測試 sh init.sh 重開端口測試 [root@d0c987bcefa2 code]# curl -I 127.0.0.1 方法二: 登陸web 10.0.0.51測試 6.宿主機操做 #生成鏡像 docker commit ed90a5662ac4 my_kod:v1 #基於新生成的鏡像.啓動容器 docker run -p 80:80 -d my_kod:v1 /bin/bash /root/init.sh
Docker經過對於在Dockerfile中的一系列指令的順序解析實現自動的image的構建 經過使用build命令,根據Dockerfiel的描述來構建鏡像 經過源代碼路徑的方式 經過標準輸入流的方式 Dockerfile指令: 只支持Docker本身定義的一套指令,不支持自定義 大小寫不敏感,可是建議所有使用大寫 根據Dockerfile的內容順序執行 FROM: FROM {base鏡像} 必須放在DOckerfile的第一行,表示從哪一個baseimage開始構建 MAINTAINER: 可選的,用來標識image做者的地方 RUN: 每個RUN指令都會是在一個新的container裏面運行,並提交爲一個image做爲下一個RUN的base 一個Dockerfile中能夠包含多個RUN,按定義順序執行 RUN支持兩種運行方式: RUN <cmd> 這個會看成/bin/sh -c 「cmd」 運行 RUN [「executable」,「arg1」,。。],Docker把他看成json的順序來解析,所以必須使用雙引號,並且executable須要是完整路徑 RUN 都是啓動一個容器、執行命令、而後提交存儲層文件變動。第一層 RUN command1 的執行僅僅是當前進程,一個內存上的變化而已,其結果不會形成任何文件。而到第二層的時候,啓動的是一個全新的容器,跟第一層的容器更徹底不要緊,天然不可能繼承前一層構建過程當中的內存變化。而若是須要將兩條命令或者多條命令聯合起來執行須要加上&&。如:cd /usr/local/src && wget xxxxxxx CMD: CMD的做用是做爲執行container時候的默認行爲(容器默認的啓動命令) 當運行container的時候聲明瞭command,則再也不用image中的CMD默認所定義的命令 一個Dockerfile中只能有一個有效的CMD,當定義多個CMD的時候,只有最後一個纔會起做用 CMD定義的三種方式: CMD <cmd> 這個會看成/bin/sh -c "cmd"來執行 CMD ["executable","arg1",....] CMD ["arg1","arg2"],這個時候CMD做爲ENTRYPOINT的參數 EXPOSE 聲明端口 格式爲 EXPOSE <端口1> [<端口2>...]。 EXPOSE 指令是聲明運行時容器提供服務端口,這只是一個聲明,在運行時並不會由於這個聲明應用就會開啓這個端口的服務。在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射;另外一個用處則是在運行時使用隨機端口映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的端口。 entrypoint: entrypoint的做用是,把整個container變成了一個可執行的文件,這樣不可以經過替換CMD的方法來改變建立container的方式。可是能夠經過參數傳遞的方法影響到container內部 每一個Dockerfile只可以包含一個entrypoint,多個entrypoint只有最後一個有效 當定義了entrypoint之後,CMD只可以做爲參數進行傳遞 entrypoint定義方式: entrypoint ["executable","arg1","arg2"],這種定義方式下,CMD能夠經過json的方式來定義entrypoint的參數,能夠經過在運行container的時候經過指定command的方式傳遞參數 entrypoint <cmd>,看成/bin/bash -c "cmd"運行命令 ADD & COPY: 當在源代碼構建的方式下,能夠經過ADD和COPY的方式,把host上的文件或者目錄複製到image中 ADD和COPY的源必須在context路徑下 當src爲網絡URL的狀況下,ADD指令能夠把它下載到dest的指定位置,這個在任何build的方式下均可以work ADD相對COPY還有一個多的功能,可以進行自動解壓壓縮包 ENV: ENV key value 用來設置環境變量,後續的RUN可使用它所建立的環境變量 當建立基於該鏡像的container的時候,會自動擁有設置的環境變量 WORKDIR: 用來指定當前工做目錄(或者稱爲當前目錄) 當使用相對目錄的狀況下,採用上一個WORKDIR指定的目錄做爲基準 USER: 指定UID或者username,來決定運行RUN指令的用戶 ONBUILD: ONBUILD做爲一個trigger的標記,能夠用來trigger任何Dockerfile中的指令 能夠定義多個ONBUILD指令 當下一個鏡像B使用鏡像A做爲base的時候,在FROM A指令前,會先按照順序執行在構建A時候定義的ONBUILD指令 ONBUILD <DOCKERFILE 指令> <content> VOLUME: 用來建立一個在image以外的mount point,用來在多個container之間實現數據共享 運行使用json array的方式定義多個volume VOLUME ["/var/data1","/var/data2"] 或者plain text的狀況下定義多個VOLUME指令
1.建立目錄 mkdir /root/dockerfile_kod/{code,conf,repo} -p 2.拷貝文件到指定目錄 docker cp afc35bc7f8a1:/root/init.sh /root/dockerfile_kod/conf/ #構建好的目錄結構 [root@db01 ~]# tree dockerfile_kod/ dockerfile_kod/ ├── build.sh ├── code │ └── kodexplorer4.40.zip ├── conf │ ├── init.sh │ ├── kod.conf │ ├── nginx.conf │ ├── php-fpm.conf │ └── www.conf ├── dockerfile └── repo ├── CentOS-Base.repo ├── epel.repo └── nginx.repo
[root@db01 dockerfile_kod]# cat dockerfile #0.基礎鏡像 FROM centos:7 #1.初始化操做 RUN groupadd www -g 1000 RUN useradd www -u 1000 -g 1000 -M -s /sbin/nologin RUN rm -rf /etc/yum.repos.d/* ADD repo/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo ADD repo/epel.repo /etc/yum.repos.d/epel.repo ADD repo/nginx.repo /etc/yum.repos.d/nginx.repo #2.安裝依賴環境 nginx+php RUN yum makecache fast RUN yum install nginx php-fpm php-mbstring php-gd unzip -y RUN yum clean all #3.配置Nginx和php RUN rm -rf /etc/nginx/conf.d/default.conf ADD conf/nginx.conf /etc/nginx/nginx.conf ADD conf/kod.conf /etc/nginx/conf.d/kod.conf ADD conf/php-fpm.conf /etc/php-fpm.conf ADD conf/www.conf /etc/php-fpm.d/www.conf #4.配置代碼 RUN mkdir /code WORKDIR /code ADD code/kodexplorer4.40.zip /code/kodexplorer4.40.zip RUN unzip kodexplorer4.40.zip RUN chown -R www:www /code #5.複製啓動腳本 ADD conf/init.sh /root/init.sh #6.啓動命令 CMD ["/bin/bash","/root/init.sh"]
[root@docker01 ~/dockerfile/kod]# docker build --network=host -t centos_kod:v1 . [root@docker01 ~/dockerfile/kod]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos_kod v1 87071ea7c86b 2 minutes ago 465MB
[root@docker01 ~/dockerfile/kod]# docker run -d -p 80:80 centos_kod:v1 4d1007d7194d434248762e5aca76070206643f0f0f533f2112d0359b25fe7ba0
[root@db01 dockerfile_kod]# cat build.sh #!/bin/bash docker stop $(docker ps -qa) docker rm $(docker ps -qa) docker build --network=host -t my_kod:v2 . docker run -p 80:80 -d my_kod:v2
第一步:安裝docker和docker-compose 第二步:下載harbor-offline-installer-v1.9.0-rc1.tgz 第三步:上傳到/opt,並解壓 第四步:修改harbor.yml配置文件 hostname = 10.0.0.11 harbor_admin_password = 123456 第五步:執行install.sh
1.下載軟件包 cd /opt wget https://github.com/goharbor/harbor/releases/download/v1.9.3/harbor-offline- installer-v1.9.3.tgz 上傳包 tar xf harbor-offline-installer-v1.9.0-rc1.tgz 2.修改配置 vim harbor.yml hostname: 10.0.0.51 harbor_admin_password: 123456 3.下載docker-compose,編排工具 yum install docker-compose -y 4.安裝harbor 中止80端口執行 ./install.sh 查看編排狀態 cd /opt/harbor docker-compose ps 登陸:web 10.0.0.51 建立linux項目 5.修改鏡像名稱(鏡像的ID) docker tag ae21150e3af8 10.0.0.51/linux/my_kod:v2 docker images 6.修改docker配置添加信任倉庫 cat >/etc/docker/daemon.json<<EOF { "registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"], "insecure-registries": ["http://10.0.0.51"] } EOF #重啓docker systemctl restart docker docker-compose ps docker-compose stop docker-compose up -d 7.docker登陸到harbor docker login 10.0.0.51 8.上傳鏡像到私有倉庫 docker push 10.0.0.51/linux/my_kod:v2 9.客戶端使用倉庫下載鏡像 刪除已有的:注意.先停容器,在刪除容器,鏡像 docker pull 10.0.0.51/linux/my_kod:v2
[root@docker02 ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["http://hub-mirror.c.163.com"], "insecure-registries": ["http://10.0.1.11"], "insecure-registries": ["https://10.0.1.11"] } [root@docker02 ~]# docker pull 10.0.1.11/linux/centos_kod:v1
前提:新起一個容器,容器內操做 1.初始化 rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 2.安裝python依賴 yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor gcc python-devel python -m pip install --upgrade --force pip -i https://pypi.tuna.tsinghua.edu.cn/simple pip install setuptools==33.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple 3.安裝python的Django環境 cd /opt/ git clone git://github.com/retspen/webvirtmgr.git cd webvirtmgr pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple [root@402aca4eaa81 webvirtmgr]# chmod +x manage.py ./manage.py syncdb ./manage.py collectstatic 4.安裝Nginx cat>/etc/yum.repos.d/nginx.repo<<EOF [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF yum makecache fast yum install nginx -y yum clean all 5.配置Nginx和代碼 mkdir /code mv /opt/webvirtmgr /code/ chown -R nginx:nginx /code rm -rf /etc/nginx/conf.d/default.conf cat >/etc/nginx/conf.d/webvirtmgr.conf<<EOF server { listen 80 default_server; server_name localhost; access_log /var/log/nginx/webvirtmgr_access_log; location /static/ { root /code/webvirtmgr; expires max; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-for \$proxy_add_x_forwarded_for; proxy_set_header Host \$host:\$server_port; proxy_set_header X-Forwarded-Proto \$scheme; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; client_max_body_size 1024M; } } EOF nginx -t nginx ss -lntup 6.配置Supervisor cat >/etc/supervisord.d/webvirtmgr.ini<<EOF [program:webvirtmgr] command=/usr/bin/python /code/webvirtmgr/manage.py run_gunicorn -c /code/webvirtmgr/conf/gunicorn.conf.py directory=/code/webvirtmgr autostart=true autorestart=true logfile=/var/log/supervisor/webvirtmgr.log log_stderr=true user=nginx [program:webvirtmgr-console] command=/usr/bin/python /code/webvirtmgr/console/webvirtmgr-console directory=/code/webvirtmgr autostart=true autorestart=true stdout_logfile=/var/log/supervisor/webvirtmgr-console.log redirect_stderr=true user=nginx [program:nginx] command=nginx -g 'daemon off;' autostart=true autorestart=true stdout_logfile=/var/log/supervisor/nginx.log redirect_stderr=true EOF sed -i "s#nodaemon=false#nodaemon=true#g" /etc/supervisord.conf supervisord -c /etc/supervisord.conf supervisorctl status 7.建立用戶 mkdir /var/cache/nginx/.ssh/ -p chown -R nginx:nginx /var/cache/nginx/ su - nginx -s /bin/bash ssh-keygen touch ~/.ssh/config && echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config chmod 0600 ~/.ssh/config ssh-copy-id root@10.0.0.12 8.提交新鏡像 docker commit 402aca4eaa81 mykvm:v1 9.運行新容器,注意:其餘端口有時會跳轉, docker run --name mykvm3 -p 80:80 -it -d mykvm:v1 supervisord -c /etc/supervisord.conf
1.docker自帶的監控命令 docker container ps :查看正在運行的容器 docker container top +容器的id :知道某個容器運行了哪些進程 docker container stats +容器的id :顯示每一個容器各類資源使用狀況 2.cAdvisor+ prometheus+ grafana組件介紹 組件介紹: 在不一樣頁面之間跳轉,而且只能監控一個host,這難免讓人質疑他的實用性,但cAdvisor有一個亮點是能夠將監控到的數據導出給第三方工具,有這些工具進一步加工處理。 因此咱們能夠把cAdvisor定位爲一個監控數據收集器,收集和導出數據是他的強項,而非展現數據。 cAdvisor支持不少第三方工具,其中就包含prometheus #prometheus Prometheus是一個很是優秀的監控工具。提供了監控數據蒐集,存儲,處理,可視化和告警一系列完整的解決方案。包含組件 Node Exporter :負責收集host硬件和操做系統數據,以容器的形式運行在全部host上 cAdvisor :負責收集容器數據,以容器的形式運行在全部host上 #grafana grafana是一款支持多種數據源的圖形展現工具 3.部署 #地址規劃: 10.0.0.51 cAdvisor+ Node Exporter +prometheus+ grafana 10.0.0.52 cAdvisor+ Node Exporter #docker01的配置文件: mkdir prometheus cd prometheus #上傳壓縮包 docker load < 壓縮包 cat >docker-compose.yml<<EOF version: '3.2' services: prometheus: image: prom/prometheus:latest container_name: prometheus ports: - 9090:9090 command: - --config.file=/etc/prometheus/prometheus.yml volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro depends_on: - cadvisor node-exporter: image: prom/node-exporter:latest container_name: node_exporter ports: - 9100:9100 cadvisor: image: google/cadvisor:latest container_name: cadvisor ports: - 8080:8080 volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro grafana: image: grafana/grafana:latest container_name: grafana ports: - 3000:3000 EOF #prometheus配置文件 cat >prometheus.yml <<EOF scrape_configs: - job_name: cadvisor scrape_interval: 5s static_configs: - targets: - 10.0.0.51:8080 - 10.0.0.52:8080 - job_name: prometheus scrape_interval: 5s static_configs: - targets: - 10.0.0.51:9090 - job_name: node_exporter scrape_interval: 5s static_configs: - targets: - 10.0.0.51:9100 - 10.0.0.52:9100 EOF #docker02配置文件: cat >docker-compose.yml<<EOF version: '3.2' services: node-exporter: image: prom/node-exporter:latest container_name: node_exporter ports: - 9100:9100 cadvisor: image: google/cadvisor:latest container_name: cadvisor ports: - 8080:8080 volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro EOF 4.運行 ntpdate time1.aliyun.com docker-compose up -d 5.檢查 http://10.0.0.51:8080/metrics http://10.0.0.51:9100/metrics http://10.0.0.51:9090 http://10.0.0.51:3000
登陸:10.0.0.51:3000
帳號:admin 密碼;admin
配置源地址
下載