摘要:目前只能重新啟動(dòng)一個(gè)容器停止上面的容器可以比較一下與中命令的變化但此時(shí)服務(wù)是停止的,并沒有在后臺(tái)運(yùn)行,訪問無效。
只看標(biāo)題還不是很明顯,本文實(shí)現(xiàn)docker的這樣一種比較常用的功能:通過docker run啟動(dòng)一個(gè)容器后,容器中已經(jīng)運(yùn)行了一個(gè)后臺(tái)進(jìn)程(這里以監(jiān)聽80端口的nginx為例),同時(shí)進(jìn)入一個(gè)shell終端可供操作,而不受限于只能在前臺(tái)運(yùn)行nginx與運(yùn)行shell終端之間的一種。這個(gè)例子實(shí)現(xiàn)了,那么其他類似的運(yùn)行多任務(wù)docker就可以以此類推。另外本文還提供了一種在docker容器內(nèi)部安裝軟件(vim)的方法,對于定制自己需要的鏡像大有幫助。
你可能需要先閱讀docker專題(2):docker常用管理命令(上)、docker專題(2):docker常用管理命令(下)來理解更多。
# docker images|grep nginx nginx 1.7.6 561ed4952ef0 10 days ago 100 MB2. 根據(jù)官方指示啟動(dòng)這個(gè)容器
先做好自己要顯示的頁面 # echo "This is nginx official container running
static files:/tmp/doccker/index.html" > /tmp/docker/index.html
使用官方image啟動(dòng)一個(gè)容器,名字nginx_dist,把host的目錄(包含剛才的html)映射到容器中nginx server的root,綁定80端口:
# docker run --name nginx_dist -v /tmp/docker:/usr/share/nginx/html:ro > -p 80:80 -d nginx:1.7.6 1b10b08d7905517a26c72ce8b17b719aaea5e5eac0889263db8b017427e3c8f7 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1b10b08d7905 nginx:1 nginx -g "daemon off 51 seconds ago Up 48 seconds 443/tcp, 0.0.0.0:80->80/tcp nginx_dist
此時(shí)通過瀏覽器訪問主機(jī)http://host_ip:port/就可以看到結(jié)果了:
熟悉一下docker的命令。
查看容器中運(yùn)行著哪些進(jìn)程 # docker top nginx_dist UID PID PPID C STIME TTY TIME CMD root 24378 18471 0 15:25 ? 00:00:00 nginx: master process nginx -g daemon off; 101 24433 24378 0 15:25 ? 00:00:00 nginx: worker process 查看容器IP和主機(jī)等信息 # docker inspect nginx_dist |grep 172.17 "Gateway": "172.17.42.1", "IPAddress": "172.17.42.6", 連接到容器上,--sig-proxy可以保證 Ctrl+D、Ctrl+C 不會(huì)退出 # docker attach --sig-proxy=false nginx_dist xxx.xx.xx.xx - - [03/Nov/2014:07:39:52 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36" "-" Ctrl+C4. 容器改造—在容器內(nèi)部安裝vim
這里有個(gè)未解決的問題,能否有辦法在上面已經(jīng)啟動(dòng)的container的基礎(chǔ)上執(zhí)行命令?官方?jīng)]有這樣的支持。
目前只能重新啟動(dòng)一個(gè)容器(停止上面的nginx_dist容器)
可以比較一下與2中命令的變化 # docker run --name nginx_bash_vim -v /tmp/docker:/usr/share/nginx/html:ro > -p 80:80 -i -t nginx:1.7.6 > /bin/bash root@3911d1104c3f:/#
但此時(shí)nginx服務(wù)是停止的,并沒有在后臺(tái)運(yùn)行,訪問http://host_ip:port/無效。為了后面編輯配置文件方便,我們先把vim安裝好。
容器內(nèi)部的網(wǎng)絡(luò)與容器外部是相同的,并與host具有相同的DNS,所以可以使用公網(wǎng)軟件(cat /etc/apt/sources.list)鏡像源來安裝。
如果需要代理:export http_proxy=http://proxy_server:port # apt-get clean # apt-get update # apt-get install vim Reading package lists... Done ... After this operation, 25.2 MB of additional disk space will be used. Do you want to continue [Y/n]? y ... Setting up vim (2:7.3.547-7) ... ...5. 讓nginx在后臺(tái)運(yùn)行,前臺(tái)提供shell終端
實(shí)現(xiàn)這一步的方法有許多種,比如
5.1 手動(dòng)運(yùn)行/usr/sbin/nginx -c /etc/nginx/nginx.conf也就是用第4步的方法先啟動(dòng)到/bin/bash,再手動(dòng)運(yùn)行/usr/sbin/nginx -c /etc/nginx/nginx.conf或service nginx start,很容易想到,但太麻煩。
5.2 通過Dockerfile來build將裝好vim的容器提交成新的image,然后通過Dockerfile來自定義要啟動(dòng)哪些服務(wù)。關(guān)于Dockerfile后面我也會(huì)寫文章來多帶帶介紹其語法。
在主機(jī)下運(yùn)行 # docker commit -m "nginx 14.10 with bash,vim" nginx_bash_vim seanlook/nginx:bash_vim a06ab41a6565f0dbd5d35d44cb441d1a166beaae3bc49bffcb09d334a1e77a5c 使用Dockerfile來建立一個(gè)新的鏡像,加入啟動(dòng)到容器是運(yùn)行的命令 # vi Dockerfile FROM seanlook/nginx:bash_vim ENTRYPOINT /usr/sbin/nginx -c /etc/nginx/nginx.conf && /bin/bash build新image,tag為bash_vim_Df # docker build -t seanlook/nginx:bash_vim_Df . Sending build context to Docker daemon 73.45 MB Sending build context to Docker daemon Step 0 : FROM seanlook/nginx:bash_vim ---> aa8516fa0bb7 Step 1 : EXPOSE 80 ---> Using cache ---> fece07e2b515 Step 2 : ENTRYPOINT /usr/sbin/nginx -c /etc/nginx/nginx.conf && /bin/bash ---> Running in e08963fd5afb ---> d9bbd13f5066 Removing intermediate container e08963fd5afb Successfully built d9bbd13f5066 --> 新image id # docker images |grep "bash_vim" seanlook/nginx bash_vim_Df d9bbd13f5066 About an hour ago 125.9 MB seanlook/nginx bash_vim aa8516fa0bb7 About an hour ago 125.9 MB 運(yùn)行由Dockerfile創(chuàng)建的image # docker run --name nginx_bash_vim_Df -v /tmp/docker:/usr/share/nginx/html:ro > -i -t -p 8080:80 > d9bbd13f5066 --> 或seanlook/nginx:bash_vim_Df
最后一條docker run之后就會(huì)自動(dòng)進(jìn)入bash終端,同時(shí)發(fā)現(xiàn)nginx服務(wù)也啟動(dòng)了,可以通過vim來編輯配置文件。
5.3 修改容器的/etc/bash.bashrc這是投機(jī)取巧但不失為最簡單的一種辦法,見Run a service automatically in a docker container。
啟動(dòng)剛安裝完vim的那個(gè)容器(不必用run) # docker start nginx_bash_vim 連接到終端上 # docker attach nginx_bash_vim root@3911d1104c3f:/# vi /etc/bash.bashrc # added by mis_zx for auto-service nginx --> 在最后加入 /usr/sbin/nginx -c /etc/nginx/nginx.conf
保存后直接Ctrl+D退出,在start就可以訪問了,如果要進(jìn)入終端就attach,如果需要可以commit成一個(gè)鏡像。
5.4 聽說有一種通過supervisor來管理docker容器的多個(gè)任務(wù),有時(shí)間會(huì)研究一下在Docker里使用(支持鏡像繼承的)supervisor管理進(jìn)程
從上面的操作中可以看出,start是可以保留run啟動(dòng)時(shí)的參數(shù)如-v、-p,而commit之后如果沒在Dockerfile中指定,下次啟動(dòng)依然需要帶上目錄、端口的映射參數(shù)。
另外提一點(diǎn), docker run -i -t seanlook/nginx:bash_vim啟動(dòng)便會(huì)同時(shí)進(jìn)入一個(gè)shell界面(但沒有啟動(dòng)nginx),因?yàn)樗摹扒吧怼比萜魇窃趕hell交互界面下run來的,但也沒有保留-v、-p指定的映射關(guān)系。
原文鏈接地址:http://seanlook.com/2014/11/03/docker-run-container-with-shell-daemon_process/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/26349.html
摘要:本文承接專題常用管理命令上。按照指示的順序進(jìn)行即可。將同一的所有,合并為一個(gè)新的新建一個(gè),保留舊的那條記錄查看容器的信息命令可以查看容器的端口開啟及綁定容器啟動(dòng)后執(zhí)行的。其他命令還有一些如等不是很常用的命令,比較簡單,請參考官網(wǎng)。 本文承接docker專題(2):docker常用管理命令(上)。 1. 開啟/停止/重啟container(start/stop/restart) 容器...
摘要:每次在命令行中輸入一串命令,敲入回車,終端進(jìn)程都會(huì)一個(gè)子進(jìn)程,用來執(zhí)行輸入的命令,終端進(jìn)程通過系統(tǒng)調(diào)用監(jiān)聽子進(jìn)程退出,同時(shí)通過暴露的輸出子進(jìn)程執(zhí)行信息。父進(jìn)程通過創(chuàng)建該的實(shí)現(xiàn)向子進(jìn)程從設(shè)備的輸入輸出。 背景 terminal(命令行)作為本地IDE普遍擁有的功能,對項(xiàng)目的git操作以及文件操作有著非常強(qiáng)大的支持。對于WebIDE,在沒有web偽終端的情況下,僅僅提供封裝的命令行接口是完...
摘要:嘗試目標(biāo)下一步是連接前端和序列化服務(wù),實(shí)現(xiàn)在前端圖表中讀取傳感器發(fā)送的數(shù)據(jù)。序列化服務(wù)對應(yīng)的更新后前端程序位于面臨的挑戰(zhàn)是啟動(dòng)數(shù)據(jù)庫前端程序序列化服務(wù)。系統(tǒng)啟動(dòng)費(fèi)后,可以使用腳本下用檢查運(yùn)行狀態(tài)。 整體架構(gòu) showImg(https://segmentfault.com/img/remote/1460000016938721?w=389&h=426); 這章節(jié)我們將為系統(tǒng)建立一個(gè)簡單...
摘要:此命令下載測試鏡像并在容器中運(yùn)行它。國內(nèi)很多云服務(wù)商都提供了加速器服務(wù),例如阿里云加速器注冊用戶并且申請加速器,會(huì)獲得如這樣的地址。獲取鏡像阿里云鏡像庫上有大量的高質(zhì)量的鏡像可以用,這里我們就說一下怎么獲取這些鏡像并運(yùn)行。 showImg(https://segmentfault.com/img/remote/1460000012924583); 這篇文章是我學(xué)習(xí) Docker 的記錄...
摘要:與命令不同,使用命令只能創(chuàng)建容器而并不啟動(dòng)選項(xiàng)鏡像名稱命令參數(shù)將標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸出標(biāo)準(zhǔn)錯(cuò)誤鏈接到容器向容器的添加主機(jī)名與地址設(shè)置資源分配。輸入命令退出后,容器不會(huì)停止,而會(huì)繼續(xù)運(yùn)行。命令命令用于以格式顯示容器與鏡像的詳細(xì) docker命令詳解 前言 從技術(shù)老大那里聽說了docker,閑下來之后就簡單了解了一下,發(fā)現(xiàn)真的是一個(gè)好用的不得了的工具。遂周末去圖書館找了下相關(guān)資料,學(xué)習(xí)下姿勢。說...
閱讀 2655·2021-11-23 09:51
閱讀 1644·2021-11-22 13:54
閱讀 2782·2021-11-18 10:02
閱讀 936·2021-08-16 10:57
閱讀 3554·2021-08-03 14:03
閱讀 1873·2019-08-30 15:54
閱讀 3527·2019-08-23 14:39
閱讀 598·2019-08-23 14:26