1. tmoe快速上手命令
tmoe快睜笑高速上手命令啟動命令和進入悉尺容器命令。
1、TMOE啟動命令:升吵bashc(curlLhttps:雙斜gitee.com或mo2或linux或raw或2或2)。
2、進入容器命令:tmoepm或ca(p指proot容器,c指chroot容器)。
2. 如何控制docker里的linux系統
您可以使用Docker CLI工具來控制Docker容器內的Linux系統。您可以執行以下步驟來控制容器:
啟動容器:臘辯通過運行 docker run 命令啟動容器。
進入容器:使用 docker exec 命令進入正在運行的容器。
執行命令:在容器內森神執行Linux命令,如 ls,cat,apt-get 等。
停止此局虧容器:使用 docker stop 命令停止正在運行的容器。
刪除容器:使用 docker rm 命令刪除不再需要的容器。
這些是控制Docker容器的基本步驟。更多信息,請查看Docker官方文檔。
3. Docker容器進入退出的幾種方式
重啟httpd(service httpd restart)和rados
在生產環境中排除了使用docker attach命令進入容器之後,相信大家第一個想到的就是ssh。在鏡像(或容器)中安裝SSH Server,這樣就能保證多人進入,但是使用了Docker容器之後不建議使用ssh進入到Docker容器內。關於為什麼不建議使用,請參考如下文章:
為什麼不需要在 Docker 容器中運行 sshd
在上面兩種方式都不適合的情況下,還有一種比較方便的方法,即使用nsenter進入Docker容器。關於什麼是nsenter請參考如下文章:
https://github.com/jpetazzo/nsenter
在了解了什麼是nsenter之後,系統默認將我們需局殲要的nsenter安裝到主機中
如果沒有安裝的話,按下面步驟安裝即可(注意是主機而非容器或鏡像)
具體的安裝命令如下:
安裝好nsenter之後可以查看一下該命令的使用。
nsenter可以訪問另一個進程的名稱空間。所以為了連接到某個容器我們還需要獲取該容器的第一個進程的PID。可以使用docker inspect 命令來拿到該PID。
docker inspect命令使用如下:
inspect命令可以分層級顯示一個鏡像或容器的信息。比如我們當前有一個正在運行的容器
可以使用docker inspect來查看該容器的詳細信息。
由其該信息非常多,此處只截取了其中一部分進行展示。如果要顯示該容器第一個進行的PID可以使用如下方式
在拿到該進程PID之後我們就可以使用nsenter命令訪問該容器了。
其中的3326即剛桐喚沖才拿到的進程的PID
當然,如果你認為每次都輸入那麼多參數太麻煩的話,網上也有鏈裂許多做好的腳本供大家使用。
地址如下:
http://yeasy.gitbooks.io/docker_practice/content/container/enter.html
http://www.tuicool.com/articles/eYnUBrR
四、使用docker exec進入Docker容器
除了上面幾種做法之外,docker在1.3.X版本之後還提供了一個新的命令exec用於進入容器,這種方式相對更簡單一些,下面我們來看一下該命令的使用:
接下來我們使用該命令進入一個已經在運行的容器
4. docker常用命令
1、 service docker start // 啟動docker
2、 docker images // 查看docker所安裝的鏡像
3、 docker search [name] 查詢某個鏡像 例如查詢mysql docker search mysql
4、 docker pull [name] 拉取某個鏡像 例如mysql docker pull mysql
5、 docker pull [name] [:tag] tag版本肢鍵號 如果不寫默認拉取最新的版本
例如: docker pull mysql:5.7
6、 docker rmi [imgaeId] 刪除命令,imageId是鏡像id
2.1 新建一個新的容器 docker pull centos
2.2 docker run [可選參數] image名字
參數說明
--name="Name" 給容器命名
-d 後台方式運行
-p [主機埠]:[容器埠] 指定容器的埠 例如啟動tomcat 命令: docker run -p 8081:8080 tomcat 解釋:8081是對外訪問(伺服器)的埠。8080是docker裡面的tomcat埠. tomcat是鏡像拉取下來後的名字. 例:若別人訪問。IP+8081埠才能訪問到tomcat啟動的項目
-P 大寫P是隨機指定埠
-it 與容器交互,就是進入到容器裡面
命令: docker run -it [鏡像名稱] /bin/bash 例子: docker run -it centos /bin/bash
docker ps 查看運行派行中的容器
docker ps -q 只查詢運行容器的編號,一般與下面-a合並使用, docker ps -aq
docker ps -a 查看曾經運行過的容器
docker ps -a -n=1 加上-n可以指定查詢最近幾個運行的容器、
Ctrl+p+q 這樣退出就不會停止容器
docker rm -f [容器id] 指定刪除某個運行的容器
docker rm -f $(docker ps -aq) 刪除全部運行的容器
docker start [容器id] 啟動容器
docker restart [容器id] 重啟容器
docker stop [容器id] 停止容器
docker kill [容器id] 強制停止容器
docker run -d [鏡像名] 例如: docker run -d centos
但是有問題, docker ps 查詢不到運行的容器
原因:docker容器用後台運行,就必須要有一個前台進程,docker發現沒有應用,所以就自動停止
docker logs -tf --tail 10 [容器id]
t的意思是時間戳,f保留日誌列印窗口,tail持續列印,10列印最後10條
docker top [容器id]
docker inspect [容器id]
方式一: docker exec -it [containt_id] /bin/bash // 進入該鏡像內部
docker cp [容器id]:[容器路徑] [主機路歷帶巧徑]
5. 使用busybox鏡像創建容器啟動容器並查看容器狀態的命令是什麼
1. 創建並缺昌啟動容器 docker create命寬扮閉令來創建容器 $ docker create -it --name=busybox busybox 1 容器啟動有兩種方式: 使用docker start命令基於
2. 終止容器 容器停止用docker stop 命令。格式為: docker stop [-t]|–time[=10]. 該命令首先會向運行中的容器發送SIGTERM信號,如果
3. 進慎裂入容器 處於運行狀態的容器可以通過docker
6. 進入tomcat容器內部的命令
進入tomcat容器告告內部的命令是dockerrun。容器指的是實現了一定功能櫻蔽的組件,可以管理其他組件的生命周期。一個容器可能管理其他容器,也可能被其他容器管理。容器通常會形成一個層級關系。Tomcat是一個免費的開放源代碼襪頌明的Web應用伺服器,屬於輕量級應用伺服器,是Apache軟體基金會(ApacheSoftwareFoundation)的Jakarta項目中的一個核心項目。
7. docker下容器怎麼執行命令
Docker中我們一般會有兩種執行命令的方式,一種是直接進入容器的命令行,在終端執行並查看結果,一種是在後台執行,並不會在終端查看結果。
1、進入容器命令行
su root
docker run -i -t ubuntu:16.04/bin/bash#或者執行下面這句docker run -it ubuntu:16.04/bin/bash
-i和-t的作用是幫助你進入交互模式,如果不加這部分,你將無法進入容器內部,更別說使用命令行了。/bin/bash的意思就是使用容器的命令行來輸入命令。執行結果如下:
root@7d150a0fb029:/#
root後面跟的就是容器id,表明你已經進入容器,可以輸入命令了,你可以輸入一些常用命令試試:
root@7d150a0fb029:/# docker run -i -t ubuntu:16.04 /bin/bash
結果輸出了鏡像的內核版本信息:
Linux version 4.13.0-36-generic (buildd@lgw01-amd64-033)(gcc version 5.4.020160609(Ubuntu5.4.0-6ubuntu1~16.04.9))#40~16.04.1-Ubuntu SMP Fri Feb 16 23:25:58 UTC 2018
通過exit可退出容器。
2、後台執行命令
輸入下面的代碼,-d表示的就是後台運行,這點可以直接通過docker run –help查看該命令的功能。下面這句話的意思就是在鏡像的程序中添加引號內的代碼,並在後台運行。
docker run -d ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1;done"
輸出結果不會顯示運行的結果,而是給出新建的容器id,這里說明一下,每次輸入docker run命令都會新建一個容器,產生一個新的id。
輸出結果如下:
查看一下正在運行的容器:
root@cdl-XPS15R:/home/cdl# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7188be9bd7b ubuntu:16.04"/bin/sh -c 'while t…"13 seconds ago Up11 seconds keen_vaughan1b6ba17f7df7 ubuntu:16.04"/bin/bash"2 minutes ago Exited(0)2 minutes ago cocky_noether7d150a0fb029 ubuntu:16.04"/bin/bash"4 minutes ago Exited(0)2 minutes ago hopeful_banach
這里會發現,第一個容器的id和後台運行的容器id前幾位一模一樣,但是長度要長很多,其實是一樣的,只不過通過ps命令列印輸出時為了方便顯示只顯示了前幾位。
如果想要進入後台運行的容器的命令行而不創建新的容器,只需要輸入以下命令:
#Exec是進入已經存在的容器,run是創建新容器docker Exec-it c7188be9bd7b /bin/bash
輸入哪個更長的id也是一樣的效果:
docker Exec -it /bin/bash
輸出結果都是:
root@c7188be9bd7b:/#
8. 使用tmux進入docker容器
每次進入容器中都要重復執行
docker exec -it name /bin/bash 這些命令,有些還需要反復配置環境變數
使用tmux可以避免這些操作!
終端輸入 tmux 會啟動 Tmux 窗口, 底部有一個狀態欄。狀態欄的左側是窗口信息(編號和名稱,帶*的是當前窗口),右側是系統信息 。
命令行的典型使用方式是,打開一個終端窗口(乎李terminal window,以下簡稱"窗口"),在裡面輸入命令。 用戶與計算機的這種臨時的交互,稱為一次"會話"(session) 。
會話的一個重要特點是,窗口與其中啟動的進程是連在一起的。打開窗口,會話開始;關閉窗口,會話結束,會話內部的進程也會隨之終止,不管有沒有運行完。
一個典型的例子就是,SSH 登錄遠程計算機,打開一個遠程窗口執行命令。這時,網路突然斷線,再次登錄的時候,是找不回上一次執行的命令的。因為上一次 SSH 會話已經終止了,裡面的進程也隨之消失了。
為了解決這個問題,會話與窗口可以"解綁":窗口關閉時,會話並不終止,而是繼續運行,等到以後需要的時候,再讓會話"綁定"其他窗口。
Tmux 就是會話與窗口的"解綁"工具,將它們徹底分離。
(1)它允許在單個窗口中,同時訪問多個會話。這對於同時運行多個命令行程序很有用。
(2) 它陵指可以讓新窗口"接入"已經存在的會話。
(3)它允許每個歲汪遲會話有多個連接窗口,因此可以多人實時共享會話。
(4)它還支持窗口任意的垂直和水平拆分。
第一個啟動的 Tmux 窗口,編號是0,第二個窗口的編號是1,以此類推。這些窗口對應的會話,就是 0 號會話、1 號會話。
使用編號區分會話,不太直觀,更好的方法是為會話起名。
9. 如何打開多個終端進入Docker容器
打開多個終端進入Docker容器有很多種方法,包括使用 docker attach 命令或 nsenter 工具等。
使用 attach 命令有時候並不方便。當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。
nsenter 可宴尺以訪問另一個進程的名字空間。
為了連接到容器,你還需要找到容器的第一個進程的 PID,可以通過下面的命令獲取。
PID=$(docker inspect _format 「{{ .State.Pid }}」 <container>) //將<container>換成你的容器id
通過這個 PID,就可以連接到這個容器:
$ nsenter _target $PID _mount _uts _ipc _net _pid
更簡單的,建議大家下載 .bashrc_docker,並將內容放到 .bashrc 中。
$ wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
$ echo 「[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker」 >> ~/.bashrc; source ~/.bashrc
這衡鋒個文件中定義了很多方便使用 Docker 的命令,例如 docker-pid 可以獲取某個容器的 PID;而 docker-enter 可以進入容器或直接晌攔高在容器內執行命令。
$ echo $(docker-pid <container>)
$ docker-enter <container>
附.bashrc_docker文件內容:
# Some useful commands to use docker.
# Author: yeasy@github
# Created:2014-09-25
alias docker-pid=」sudo docker inspect _format 『{{.State.Pid}}』」
alias docker-ip=」sudo docker inspect _format 『{{ .NetworkSettings.IPAddress }}』」
#the implementation refs from https://github.com/jpetazzo/nsenter/blob/master/docker-enter
function docker-enter() {
if [ -e $(dirname "$0")/nsenter ]; then
# with boot2docker, nsenter is not in the PATH but it is in the same folder
NSENTER=$(dirname 「$0″)/nsenter
else
NSENTER=nsenter
fi
[ -z "$NSENTER" ] && echo 「WARN Cannot find nsenter」 && return
if [ -z "$1" ]; then
echo 「Usage: `basename 「$0″` CONTAINER [COMMAND [ARG]?]」
echo 「」
echo 「Enters the Docker CONTAINER and executes the specified COMMAND.」
echo 「If COMMAND is not specified, runs an interactive shell in CONTAINER.」
else
PID=$(sudo docker inspect _format 「{{.State.Pid}}」 「$1″)
if [ -z "$PID" ]; then
echo 「WARN Cannot find the given container」
return
fi
shift
OPTS=」_target $PID _mount _uts _ipc _net _pid」
if [ -z "$1" ]; then
# No command given.
# Use su to clear all host environment variables except for TERM,
# initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
# and start a login shell.
#sudo $NSENTER 「$OPTS」 su _ root
sudo $NSENTER _target $PID _mount _uts _ipc _net _pid su _ root
else
# Use env to clear all host environment variables.
sudo $NSENTER _target $PID _mount _uts _ipc _net _pid env -i $@
fi
fi
}
10. Docker:容器管理(啟動參數,查看容器和日誌,進入和修改容器)
摘要: Docker
容器是一個精簡版的操作系統,一般一個容器只運行一個應用,容器通過鏡像創建,使用 docker run 命令創建,容器起到了 隔離 作用,容器和容器之間獨享空間和網路等
容器的基本操作包括創建(啟動),停止,重啟,查看,檢查等,容器通過鏡像創建,使用 docker run 命令創建,需要指定run參數,鏡像名,容器執行命令,語句格式如下
在實際使用中啟動一個鏡像,例如
-e 設置環境變數,格式是 -e k1=v1 -e k2=v2 ,使得在docker鏡像中的程序能夠直接訪問到環境變數,同時可以作為配置參數放在docker run啟動鏡像的時候設置,而不是寫死在dockerfile在build的過程中,-e和dockerfile中的 ENV 變數作用相同,當變數重名時-e替換ENV,下面測試一些做帶-e參數,在Dockerfile指定環境變數
直接構建成容器
開啟一個終端啟動容器內部,打告御印指定的環境變數a
此時在run指令中增加-e設置環境變數,可見-e替換了Dockerfile中指定的環境變數
因為一個鏡像可以啟動多個容器,所以可以通過設置不同-e達到設置不同配置參數的目的,比如下一個例子在Dockerfile中設置和將環境變數寫入yaml文件再供Python調用,執行的內容為列印yaml配置文件的參數內容,比如下面這個例子先看下目錄結構
其中config.yml是一個空配置文件,在run.sh中先使用echo寫入追加配置參數到config.yml在執行Python腳本
Dockerfile中啟動run.sh腳本作為容器執行命令
在啟動容器時,使用-e指定環境變數,在run.sh中echo將環境變數拿到和寫入配置文件,測試多次以不同的配置參數啟動容器如下
-v 設置掛載運行,將宿主機當前目錄下的文件掛載到容器中/home目錄下,例如
如果掛載的目錄和Dockerfile中的COPY的目錄不一致, -v會替代COPY或者ADD ,例如現在Docker中COPY一個文件到容器/home目錄下
同目錄下start.sh內容是列印1
構建鏡像結束後,指定-v啟動,起始掛載另外一個目錄,目錄下start.sh內容是列印2
docker run參數中最後的COMMAND會覆蓋Dockerfile中指定的 CMD ,例如執行echo 2替換原始Dockerfile中的CMD echo 1,輸出結果是2且執行完畢後退出
對於Dockerfile中的 ENTRYPOINT 指定的啟動命令docker run的COMMAND不會覆蓋,如果要覆蓋Docker中的ENTRYPOINT需要指定docker run中的 --entrypoint 參數,格式是
測試一個Dockerfile輸出1
在docker run中使用--entrypoint覆蓋Dockerfile中的ENTRYPOINT
容器啟動後通過 docker ps 或者 docker container ls 查看容器,可以增加額外參數比如 -a 顯示所有容器,默認只顯示運行的容器,可以增加 --no-trunc 參數使得顯示結果不截斷,例如
顯示結果分別顯示了容器的ID,鏡像,執行命令,創建時間,狀態,埠映射(宿主機->容器)和容器名稱。對於已經運行的容器可以使用 docker stop 停止,如果在docker run時增加--rm參數則停止的容器保留不會自動刪除,例如
除了docker stop命令還有一種停止容器純友蘆的命令 docker kill ,相比於docker stop,docker kill是 強制立即停止 ,而docker stop是先給了容器10秒(默認)的時間,使得容器有一定的時間處理、保存程序執行現場, 優雅的退出程序 ,例如
在容器停止之後可以使用 docker start 再啟動一個停止的容器,例如
除此之外可以使用 docker restart ,此時容器可以使停止的也可以是在運行中的,例如
查看容器詳情使用 docker inspect ,比如
在以上截取的內容中展示了容器詳情,包括容器id,創建時間,執行命令和參數,執行狀態,容器pid,落腳點,環境變數,網路設置,埠映射等,也可以使用Go語言風格輸出指定的詳情,比如分別只看容器的pid和容器的執行命令
容器是一個操作系統,可以進入這個操作系統查看容器的運行情況,有多種方式進入容器,其中主要是使用 docker exec 進入容器,在一個運行中的容器中執行一個命令,使用 -it 並帶有 /bin/bash 命令就可以進入容器,比如
除了/bin/bash也可以是其他命令掛載exec後面則可以直接對一個運行中的容器執行命令,比如查看容器的進入落腳點路徑,容器中的內存情況
當容器以後台 -d 運行時,日誌運行在容器內部,可以進入容器內部查看日誌,也可以使用 docker logs 查看日誌,以一個flask api介面的容器為例,日誌寫入文件,同時也會輸出在flask的控制台
創建Dockerfile以及構建鏡像,啟動容器
啟動一個腳本不斷請求api介面
進入容器內部查看日誌
另一種方式是直接使用 docker logs 命令,比如使用 -f 追蹤輸出,並且從最後的第1行開始輸出
此時宿主機的logs目錄下為空,容器中的logs目錄下存在detail.log文件,如果使用 -v 將宿主機目錄掛載到容器作為容器寫入的目錄,則容器中數據的變動會同步到本地,這樣可以直接在本地查看日誌,修改容器啟動為 -v 掛載的形式
此時本地logs目錄下開始產生日誌,且這個日誌和容器內的logs目錄下一致
如果容器內的內容改變了,此時刪除容器從鏡像重新啟動容器則改動的內容將不會存在,如果相對修改過的容器保留下來則可以從容器生成新的鏡像,先測試以下容器內修改在刪除的容器後將不再生效,在已有容器中使用pip安裝Python包
此時退出容器,並且刪除容器,最後從鏡像重新生成容器
此時進入容器檢查,並不存在pymongo包
如果要容器變化保存下來需要以這個新容器生成一個鏡像,使用 docker commit ,語法如下
以新安裝pymongo的容器為例,對新容器使用docker commmit
新生成的鏡像叫做xiaogp/my_image_test:v2
從新鏡像啟動容器並進入容器查看存在新安裝的pymongo