国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

docker如何創建一個運行后臺進程的容器并同時提供shell終端

hikui / 2258人閱讀

摘要:目前只能重新啟動一個容器停止上面的容器可以比較一下與中命令的變化但此時服務是停止的,并沒有在后臺運行,訪問無效。

只看標題還不是很明顯,本文實現docker的這樣一種比較常用的功能:通過docker run啟動一個容器后,容器中已經運行了一個后臺進程(這里以監聽80端口的nginx為例),同時進入一個shell終端可供操作,而不受限于只能在前臺運行nginx與運行shell終端之間的一種。這個例子實現了,那么其他類似的運行多任務docker就可以以此類推。另外本文還提供了一種在docker容器內部安裝軟件(vim)的方法,對于定制自己需要的鏡像大有幫助。
你可能需要先閱讀docker專題(2):docker常用管理命令(上)、docker專題(2):docker常用管理命令(下)來理解更多。

1. 已經pull了官方的nginx 1.7.6的鏡像(也可以從私服獲取)
# docker images|grep nginx
nginx              1.7.6          561ed4952ef0     10 days ago         100 MB
2. 根據官方指示啟動這個容器
先做好自己要顯示的頁面
# echo "

This is nginx official container running


static files:/tmp/doccker/index.html" > /tmp/docker/index.html

使用官方image啟動一個容器,名字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

此時通過瀏覽器訪問主機http://host_ip:port/就可以看到結果了:

3. 查看這個容器的信息

熟悉一下docker的命令。

查看容器中運行著哪些進程
# 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和主機等信息
# docker inspect nginx_dist |grep 172.17
        "Gateway": "172.17.42.1",
        "IPAddress": "172.17.42.6",

連接到容器上,--sig-proxy可以保證 Ctrl+D、Ctrl+C 不會退出
# 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+C
4. 容器改造—在容器內部安裝vim

這里有個未解決的問題,能否有辦法在上面已經啟動的container的基礎上執行命令?官方沒有這樣的支持。
目前只能重新啟動一個容器(停止上面的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:/# 

但此時nginx服務是停止的,并沒有在后臺運行,訪問http://host_ip:port/無效。為了后面編輯配置文件方便,我們先把vim安裝好。
容器內部的網絡與容器外部是相同的,并與host具有相同的DNS,所以可以使用公網軟件(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在后臺運行,前臺提供shell終端

實現這一步的方法有許多種,比如

5.1 手動運行/usr/sbin/nginx -c /etc/nginx/nginx.conf

也就是用第4步的方法先啟動到/bin/bash,再手動運行/usr/sbin/nginx -c /etc/nginx/nginx.confservice nginx start,很容易想到,但太麻煩。

5.2 通過Dockerfilebuild

將裝好vim的容器提交成新的image,然后通過Dockerfile來自定義要啟動哪些服務。關于Dockerfile后面我也會寫文章來多帶帶介紹其語法。

在主機下運行
# docker commit -m "nginx 14.10 with bash,vim" nginx_bash_vim seanlook/nginx:bash_vim
a06ab41a6565f0dbd5d35d44cb441d1a166beaae3bc49bffcb09d334a1e77a5c

使用Dockerfile來建立一個新的鏡像,加入啟動到容器是運行的命令
# 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

運行由Dockerfile創建的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之后就會自動進入bash終端,同時發現nginx服務也啟動了,可以通過vim來編輯配置文件。

5.3 修改容器的/etc/bash.bashrc

這是投機取巧但不失為最簡單的一種辦法,見Run a service automatically in a docker container。

啟動剛安裝完vim的那個容器(不必用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就可以訪問了,如果要進入終端就attach,如果需要可以commit成一個鏡像。

5.4 聽說有一種通過supervisor來管理docker容器的多個任務,有時間會研究一下

在Docker里使用(支持鏡像繼承的)supervisor管理進程

從上面的操作中可以看出,start是可以保留run啟動時的參數如-v-p,而commit之后如果沒在Dockerfile中指定,下次啟動依然需要帶上目錄、端口的映射參數。
另外提一點, docker run -i -t seanlook/nginx:bash_vim啟動便會同時進入一個shell界面(但沒有啟動nginx),因為它的“前身”容器是在shell交互界面下run來的,但也沒有保留-v-p指定的映射關系。


原文鏈接地址:http://seanlook.com/2014/11/03/docker-run-container-with-shell-daemon_process/


文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/26349.html

相關文章

  • docker專題(2):docker常用管理命令(下)

    摘要:本文承接專題常用管理命令上。按照指示的順序進行即可。將同一的所有,合并為一個新的新建一個,保留舊的那條記錄查看容器的信息命令可以查看容器的端口開啟及綁定容器啟動后執行的。其他命令還有一些如等不是很常用的命令,比較簡單,請參考官網。 本文承接docker專題(2):docker常用管理命令(上)。 1. 開啟/停止/重啟container(start/stop/restart) 容器...

    duan199226 評論0 收藏0
  • 支持多用戶web終端實現及安全保障(nodejs)

    摘要:每次在命令行中輸入一串命令,敲入回車,終端進程都會一個子進程,用來執行輸入的命令,終端進程通過系統調用監聽子進程退出,同時通過暴露的輸出子進程執行信息。父進程通過創建該的實現向子進程從設備的輸入輸出。 背景 terminal(命令行)作為本地IDE普遍擁有的功能,對項目的git操作以及文件操作有著非常強大的支持。對于WebIDE,在沒有web偽終端的情況下,僅僅提供封裝的命令行接口是完...

    kaka 評論0 收藏0
  • 按步搭建簡單IoT微服務(2)

    摘要:嘗試目標下一步是連接前端和序列化服務,實現在前端圖表中讀取傳感器發送的數據。序列化服務對應的更新后前端程序位于面臨的挑戰是啟動數據庫前端程序序列化服務。系統啟動費后,可以使用腳本下用檢查運行狀態。 整體架構 showImg(https://segmentfault.com/img/remote/1460000016938721?w=389&h=426); 這章節我們將為系統建立一個簡單...

    shiyang6017 評論0 收藏0
  • 從零開始學習 Docker

    摘要:此命令下載測試鏡像并在容器中運行它。國內很多云服務商都提供了加速器服務,例如阿里云加速器注冊用戶并且申請加速器,會獲得如這樣的地址。獲取鏡像阿里云鏡像庫上有大量的高質量的鏡像可以用,這里我們就說一下怎么獲取這些鏡像并運行。 showImg(https://segmentfault.com/img/remote/1460000012924583); 這篇文章是我學習 Docker 的記錄...

    lily_wang 評論0 收藏0
  • docker命令詳解

    摘要:與命令不同,使用命令只能創建容器而并不啟動選項鏡像名稱命令參數將標準輸入標準輸出標準錯誤鏈接到容器向容器的添加主機名與地址設置資源分配。輸入命令退出后,容器不會停止,而會繼續運行。命令命令用于以格式顯示容器與鏡像的詳細 docker命令詳解 前言 從技術老大那里聽說了docker,閑下來之后就簡單了解了一下,發現真的是一個好用的不得了的工具。遂周末去圖書館找了下相關資料,學習下姿勢。說...

    mayaohua 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<