背景
因為需要使用一個在32bit debian系統中的一個c庫作為webserver的一個子進程,但是現在32位操作系統的服務器太少了。所以這次選擇使用docker封裝應用棧來完成功能。
實驗
Ubuntu安裝Docker
Docker目前只能安裝在64位CPU架構的計算機上,同時需要Linux內核為3.10及以上的版本
-
檢查Linux系統內核
$ uname -r 4.8.0-22-generic
-
更新系統源
$ sudo apt-get update
-
更新Https和CA證書
$ sudo apt-get install apt-transport-https ca-certificates
-
添加新的GPG Key
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
-
添加Docker源
$ echo "deb https://apt.dockerproject.org/repo ### main" | sudo tee /etc/apt/sources.list.d/docker.list
這邊可以根據Ubuntu版本修改Docker的源,在###處添加即可。該源文件在/etc/apt/sources.list.d/docker.list
- Ubuntu Xenial 16.04: ubuntu-xenial
- Ubuntu Wily 15.10: ubuntu-wily
- Ubuntu Trusty 14.04: ubuntu-trusty
- Ubuntu Precise 12.04: ubuntu-precise
-
更新系統源
$ sudo apt-get update
-
校驗APT是否正在拉取爭取的源。
$ apt-cache policy docker-engine docker-engine: Installed: 1.12.2-0~trusty Candidate: 1.12.2-0~trusty Version table: *** 1.12.2-0~trusty 0 500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages 100 /var/lib/dpkg/status 1.12.1-0~trusty 0 500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages 1.12.0-0~trusty 0 500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages 1.11.2-0~trusty 0 500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages 1.11.1-0~trusty 0 500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages
-
安裝linux-image-extra-*包
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
-
更新系統源
$ sudo apt-get update
-
安裝Docker
$ sudo apt-get install docker-engine
-
啟動Docker Daemon
$ sudo service docker start
-
校驗Docker是否安裝正確。
$ sudo docker run hello-world
修改國內源
目前因為墻的原因,使用國外的源速度還是很慢的,而且經常斷線。所以最好換成國內的源,國內的有daoCloud、阿里等,我現在使用daoCloud
-
修改配置文件
$ vim /etc/default/docker DOCKER_OPTS="--registry-mirror=http://aad0405c.m.daocloud.io"
-
重啟docker服務
$ service docker restart
配置節點
-
首先我需要一個32bit debian系統
$ docker pull 32bit/debian
-
然后通過這個鏡像創建容器并且配置容器
// 以交互模式通過鏡像啟動容器,并打開容器的/bin/bash $ docker run -it 32bit/debian /bin/bash
-
進去之后肯定先修改一下debian的源
$ vi /etc/apt/sources.list deb http://mirrors.163.com/debian jessie main non-free contrib deb http://mirrors.163.com/debian jessie-proposed-updates main contrib non-free deb http://mirrors.163.com/debian-security jessie/updates main contrib non-free deb http://security.debian.org jessie/updates main contrib non-free $ apt-get update
使用wget把我需要的c庫先拉下來
-
然后發現鏡像里是不自帶make、g++環境以及一些編譯環境flex、yacc的,先安裝一下
$ apt-get install make g++ byacc flex
安裝好了之后,編譯是沒有問題的,那么庫的環境就配好了,再配一下webserver的環境就行了,這里不贅述。因為目前我沒有更好的辦法把webserver與c庫解耦到兩個容器當中,所以暫時把他們放在一個容器中,對外開發webserver的端口。
一切就緒以后,我就需要把現在這個容器再打包成一個鏡像并將它發布,遷移至服務器上。
打包發布鏡像
-
在該容器當中一切都配置好以后,先exit退出容器,然后將容器制作成新的鏡像。
// 查看所有的容器 $ docker ps -a // 找到自己需要打包的容器的id $ docker commit <your-repertory-id> <your-image-name>
-
然后這邊我是通過daocloud進行發布
// 先使用daocloud賬戶登錄 $ docker login daocloud.io Username: Password: // 先對鏡像打一個標記 $ docker tag <your-image> daocloud.io/<your-repertory>/<your-image>:<tag> // 再將鏡像推送到遠端的倉庫 $ docker push daocloud.io/<your-repertory>/<your-image>:<tag>