note

docker

$ systemctl start docker

執行上禮拜安裝好的有httpd image的docker

$ docker run -it 

-d是讓容器在背景執行,這邊下的是跑httpd伺服器,讓伺服器在前景執行

$ docker run -d  centos:0.01 /usr/sbin/apachectl -D FOREGROUND

test local port

先測試本地的port有沒有人用

$ netstat -tunlp | grep 8080

使用port binding讓docker和我們的host進行綁定,把docker裡面port 80的httpd綁到我們指定的port

$ docker run -d -p 8080:80 centos:0.01 /usr/sbin/apachectl -D FOREGROUND 

使用docker ps查看有沒有成功連線到本機,下圖可以看到8080->80,代表綁定成功,可以在http://192.168.42.131:8080 (IP:port)中看到網頁伺服器

$ docker ps 

build web in container

新增網頁

  1. 進到容器裡面,然後進行編輯

     $ docker exec -it [name or container ID] bash
     # docker exec -it b05 bash
     $ cd /var/www/html
     $ echo "hi 123" > hi.htm
    
  2. 把資料夾連結到docker(推薦),資料和網站是分離的

    $ docker run -d -p 8000:80 -v /home/user/class/webs/myweb:/var/www/html --name myweb centos:0.01 /usr/sbin/apachectl -DFOREGROUND  
    

web load balancing

我們可以使用這個方法(法2),讓本地端架設很多個網站,這樣就可以達到附載均衡

$ docker run -d -p 8001:80 -v /home/user/class/webs/web1:/var/www/html --name web1 centos:0.01 /usr/sbin/apachectl -DFOREGROUND
$ docker run -d -p 8002:80 -v /home/user/class/webs/web2:/var/www/html --name web2 centos:0.01 /usr/sbin/apachectl -DFOREGROUND
....

擴容(scale up),建立多個伺服器,讓單個伺服器負擔不會太重

create_docker_httpd.sh: 創造5個容器,開啟5個httpd網頁伺服器,使用的頁面都同一個,如果要用多個網頁的話,可以把i變量放到-v後面的路徑上

#!/usr/bin/bash

for i in {1..5}
do 
    portno=`expr 8000 + $i`
    docker run -d -p $portno:80 -v /home/user/class/webs/web2:/var/www/html centos:0.01 /usr/sbin/apachectl -DFOREGROUND
done
$ chmod +x create_docker_httpd.sh

virtual IP

LB(load balancer): 附載均衡器,有虛擬IP,外面的人連線到這個IP後,自動選擇後面的伺服器進行連線

參考網頁: ref1ref2

$ yum install haproxy openssl-devel
$ cd /etc/

vim /etc/haproxy/haproxy.cfg

添加下面的選項到文件最後面

frontend: 綁定host port

backend: 後面的連結伺服器

defaults
  mode http
  timeout client 10s
  timeout connect 5s
  timeout server 10s
  timeout http-request 10s

frontend myfrontend
  bind 0.0.0.0:8080
  default_backend myservers

backend myservers
  balance roundrobin
  server server1 192.168.42.131:8001
  server server2 192.168.42.131:8002
  server server3 192.168.42.131:8003
  server server4 192.168.42.131:8004
  server server5 192.168.42.131:8005

啟動附載均衡器

$ systemctl start haproxy

查看是否有執行在port 8080

$ netstat -tunlp | grep 8080

docker_backup

打包鏡像檔案

$ docker save centos:0.01 > centos_web.tar

匯入鏡像檔案

$ docker load centos:0.01 < centos_web.tar

上傳鏡像到 docker hub,完整名稱由三個部分組成 [存儲位置IP](官方可省略)/[擁有者](官方可省略)/[docker名稱:tag],我們傳到官方,所以不用寫存儲位置IP

$ docker tag [ImageID] chungyen/centos:0.01
$ docker login  # 登入docker
$ docker push chungyen/centos:0.01  # 推鏡像
$ docker rmi centos:0.01            # 刪除本地鏡像
$ docker pull chungyen/centos:0.01  # 拉鏡像

else

複製資料夾

$ cp -R [dir] [name]

創建多個資料夾

$ mkdir web{1..5}

刪除所有執行過的container

$ docker rm -f `docker ps -a -q`  # 顯示所有ID,然後刪掉所有docker container
$ rpm -qa | grep httpd