使用docker 搭建 centos7
環(huán)境:
主機(jī)環(huán)境:windows 10專業(yè)版
一框咙、安裝docker
Hub.docker.com官網(wǎng)下載 docker for windows
表示已經(jīng)運(yùn)行起來(lái)考榨,使用注冊(cè)的賬號(hào)進(jìn)行登錄蛔外,顯示docker is running表示windows環(huán)境下已經(jīng)開(kāi)始運(yùn)行
二、拉取鏡像
Docker 在 windows下安裝完成后會(huì)同時(shí)安裝一個(gè)shell環(huán)境
與cmd功能一樣
使用 docker images 查看當(dāng)前有哪些鏡像文件
在hub.docker.com上選擇好鏡像后
使用鏡像的 pull 命令就可以進(jìn)行下載
下載完成就可以使用 docker images看到下載到本地的鏡像文件
三猎贴、運(yùn)行鏡像搁吓,映射端口
啟動(dòng)鏡像,在啟動(dòng)鏡像的時(shí)候可以進(jìn)行端口映射
啟動(dòng)動(dòng)命令:
docker run -d -it -p 805:80 -p 5002:5000 -p 10027:22 -p 20001:8888 -p 8001:8000 --name centos-django --privileged=true -e LANG=zh_CN.utf8 licw1986/centos-django /usr/sbin/init
--privileged=true
/usr/sbin/init
這兩行主要解決容器中使用systemctl去啟動(dòng)服務(wù)時(shí)出現(xiàn)D_Bus錯(cuò)誤的問(wèn)題
-d: 后臺(tái)運(yùn)行
-it: 組合使用寓娩,創(chuàng)建一個(gè)偽終端
-p: 端口映射叛氨,本機(jī)端口:容器端口
--name: 容器名呼渣,(需要注意命名規(guī)范,可自己定義 寞埠,only [a-zA-Z0-9][a-zA-Z0-9_.-])
-e:防止亂碼屁置,編碼格式
最后跟上下載下來(lái)的鏡像名
鏡像啟動(dòng)成功后會(huì)返回一串id號(hào),特別長(zhǎng)
通過(guò) docker ps –a查看當(dāng)前docker 中哪些鏡像正在運(yùn)行
第一次初始化的時(shí)候仁连,使用run蓝角,后來(lái)都是用start
docker start container Id
啟動(dòng)后,在次進(jìn)入
docker exec -it id bash
重啟
docker restart id
停止
docker stop id
刪除
docker rm id
注意:刪除前需要停止鏡像
四饭冬、安裝容器內(nèi)運(yùn)行環(huán)境
根據(jù)所需要的開(kāi)發(fā)項(xiàng)目進(jìn)行環(huán)境搭建使鹅,與一般機(jī)器配置無(wú)異,如果需要圖形化界面需要另外安裝插件
由于本人需要運(yùn)行django項(xiàng)目伍伤,所以配置的環(huán)境主要是
Django==1.8.2
mysql-connector-python==8.0.12
mysqlclient==1.3.13
Pillow==5.2.0
protobuf==3.6.1
six==1.11.0
uWSGI==2.0.17.1
nginx:
nginx version: nginx/1.12.2
Mysql的坑和uwsgi的坑并徘,請(qǐng)看下面專門描述的坑點(diǎn)
五、主機(jī)與容器間資源傳輸
Windows機(jī)器與容器間傳輸文件扰魂,由于是文本界面麦乞,無(wú)法像圖形界面一樣使用CV大法,一切靠命令
直接上代碼
sudo docker cp txcrm2:/home/log/production.log /system/logs ##仔細(xì)看 txcrm2是鏡像id 劝评,后面就是文件路徑以及復(fù)制到宿主機(jī)的文件路徑
從主機(jī)復(fù)制到容器sudo docker cp host_path containerID:container_path
從容器復(fù)制到主機(jī)sudo docker cp containerID:container_path host_path
最后拷貝到本地使用scp
六姐直、容器安裝+配置 uwsgi
安裝uwsgi確實(shí)花了點(diǎn)功夫,都在處理些奇怪的坑蒋畜,但好在已經(jīng)配完声畏,遇到的坑在后面進(jìn)行了描述
配置uwsgi
進(jìn)入的項(xiàng)目文件夾,新建一個(gè)uwsgi.ini的配置文件
啟動(dòng)uswsgi uwsgi –ini uwsgi.ini
這里也有一點(diǎn)小坑姻成,就是你在啟動(dòng)uwsgi的時(shí)候插龄,會(huì)在當(dāng)前所在目錄去創(chuàng)建uwsgi.pid和uwsgi.log,這個(gè)可以能過(guò)uwsgi的配置文件去固定一個(gè)位置進(jìn)行保存
Uwsgi 停止
Uwsgi –stop uwsgi.pid
可以通過(guò)瀏覽器直接訪問(wèn)測(cè)試uwsgi是否啟動(dòng)成功
七科展、容器安裝+ 配置nginx
Nginx安容易多了均牢。直接使用yum install nginx就可以安裝成功
Nginx start /etc/nginx/nginx.conf 啟動(dòng)
Nginx stop 停止
Nginx –s reload 重啟nginx服務(wù)
配置nginx
Upstream 主要用來(lái)做負(fù)載均衡
其中 location 是定義路由,如果使用location = / 是屬于精準(zhǔn)匹配才睹,不加 = 就相當(dāng)于正則匹配 proxy_pass 轉(zhuǎn)發(fā)服務(wù)到哪里徘跪, 后面拼接一定要加上http:// 否則也是不成功的,這里要注意琅攘,縮進(jìn)無(wú)所謂垮庐,能看明白就行,但語(yǔ)法千萬(wàn)不能錯(cuò)坞琴,一個(gè)單詞錯(cuò)就沒(méi)法啟動(dòng)了(本人粗心大意在這里出了錯(cuò))
如果出錯(cuò):可以使用 systemctl status nginx.service查看錯(cuò)誤信息
靜態(tài)文件nginx是無(wú)法從項(xiàng)目中獲取的哨查。需要 自己創(chuàng)建靜態(tài)文件夾,項(xiàng)目中使用python manage.py collectstatic
八置济、負(fù)載均衡
這里其實(shí)就是在upstream 當(dāng)中加入多一條server信息解恰,nginx會(huì)自動(dòng)進(jìn)行選擇轉(zhuǎn)發(fā)
九锋八、Docker提交保存鏡像
1浙于、保存:docker commit 鏡像id 自定命名护盈, 保存自定義名時(shí)最好保存格式為:賬戶名/鏡像名 方便上傳時(shí)不需要再更改
2、登錄docker login
一般如果在軟件中已經(jīng)登錄羞酗,這里可以不用登錄了腐宋,可以當(dāng)成驗(yàn)證是否成功登錄check一下
3、如果是第一次準(zhǔn)備上傳鏡像需要先到 hub.docker.com中登錄創(chuàng)建一個(gè)鏡像倉(cāng)庫(kù)
PS:全英文環(huán)境檀轨,E文不好的朋友可以用chrome的翻譯功能胸竞,大致沒(méi)毛病
按照步驟一步步操作就好了
3、上傳自定鏡像
首先查看一下本地的鏡像有哪些
docker push 鏡像名:tag
出現(xiàn)進(jìn)度條参萄,就成功了卫枝,等待就可以
十、坑點(diǎn)
1讹挎、 windows下docker下載校赤,需要注冊(cè)
2、 通過(guò)nginx轉(zhuǎn)發(fā)時(shí)筒溃,會(huì)丟失掉端口的問(wèn)題
http://elim.iteye.com/blog/2286952马篮,
在配置nginx時(shí),server內(nèi)設(shè)置:
proxy_set_header Host $host怜奖,
host是不帶端口號(hào)的浑测,將其改為proxy_set_header Host $host:805,問(wèn)題得以解決歪玲,其中805是docker容器映射到本機(jī)的端口
3迁央、 安裝環(huán)境時(shí),mysql-python是不支持python3的滥崩,所以需要更換其它方式來(lái)進(jìn)行數(shù)據(jù)庫(kù)交互工作(在這個(gè)地方折騰了很久)
我在這里使用了mysql官方提供的 mysql-connect-python 和 mysqlclient
還可以安裝pymysql
將項(xiàng)目的初始化文件中加入
Import pymysql
Pymsql.install_as_MySQLdb()
更改連接方式使用pymsql進(jìn)行連接
另外最好使用離線包安裝mysql
4岖圈、 安裝uwsgi
安裝uwsgi的時(shí)候,使用pip3 install uwsgi 明明是已經(jīng)安裝完成夭委,顯示安裝成功幅狮,pip freeze也可以看到安裝的版本號(hào),仍然提示uwsgi命令無(wú)法找到株灸,多次測(cè)試之后還是不行崇摄。最后去到uwsgi的安裝目錄下面查看,確實(shí)已經(jīng)安裝成功慌烧,而且目錄下面是可以啟動(dòng)的逐抑,為了方便,做了了軟鏈接屹蚊,測(cè)試成功厕氨,這里安裝uwsgi使用的是離線包安裝
5进每、 用docker運(yùn)行service 時(shí)會(huì)報(bào)錯(cuò),centos中服務(wù)啟動(dòng)和關(guān)閉使用systemctl
但是命斧,問(wèn)題在于使用docker 的時(shí)候田晚,systemctl是用不了的,需要在run時(shí)加入兩條命令国葬,說(shuō)實(shí)話原理我沒(méi)搞懂贤徒,反正把問(wèn)題解決就行了
加入的命令是:
--privileged=true
/usr/sbin/init
這兩行主要解決容器中使用systemctl去啟動(dòng)服務(wù)時(shí)出現(xiàn)D_Bus錯(cuò)誤的問(wèn)題
重新啟動(dòng)容器就正常了
6、 無(wú)關(guān)docker的坑…… 在項(xiàng)目中生成靜態(tài)文件時(shí)出的錯(cuò)汇四,也提一下
使用python manage.py collectstatic的時(shí)候確認(rèn)要求輸入 yes or no接奈,自己傻輸入的是y, 然后、通孽、序宦、、就傻了