操作Docker容器
操作Docker容器
容器是獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用,以及它們的運(yùn)行態(tài)環(huán)境。對(duì)應(yīng)的,虛擬機(jī)可以理解為模擬運(yùn)行的一整套操作系統(tǒng)(提供了運(yùn)行態(tài)環(huán)境和其他系統(tǒng)環(huán)境)和跑在上面的應(yīng)用。
啟動(dòng)容器:
啟動(dòng)容器有兩種方式,一種是基于鏡像新建一個(gè)容器并啟動(dòng),另外一個(gè)是將在終止?fàn)顟B(tài)(stopped)的容器重新啟動(dòng)。因?yàn)镈ocker容器是在太輕量級(jí)了,很多時(shí)候用戶都是隨時(shí)刪除和新創(chuàng)建容器。
?
新建并啟動(dòng):主要命令為?docker?run
docker?run?ubuntu:18.04?/bin/echo?'Hello?world'
如果鏡像存在就直接啟動(dòng)了,如果不存在就是自動(dòng)從官方倉(cāng)庫(kù)拉取下載之后并啟動(dòng),我本機(jī)是有這個(gè)鏡像,直接就輸出?Hello?world?了。
下面的命令則啟動(dòng)一個(gè)bash終端,允許用戶進(jìn)行交互。
docker?run?-t?-i?ubuntu:18.04?/bin/bash
啟動(dòng)-t?選項(xiàng)讓Docker分配一個(gè)偽終端(pseudo-tty)并綁定到容器的標(biāo)準(zhǔn)輸入上,-i?則讓容器的標(biāo)準(zhǔn)輸入保持打開。在交互模式下,可以通過所有創(chuàng)建的終端來輸入命令。
?
當(dāng)利用docker?run?來創(chuàng)建容器時(shí),Docker在后臺(tái)運(yùn)行的標(biāo)準(zhǔn)操作包括:
啟動(dòng)已終止容器Docker?container?start??(或者直接docker?start)
停止和關(guān)閉是stop和restar
?
后臺(tái)運(yùn)行
更多時(shí)候,需要讓docker在后臺(tái)運(yùn)行而不是直接把執(zhí)行結(jié)果輸出在當(dāng)前宿主機(jī)下,通過-d參數(shù)實(shí)現(xiàn)。
例子:
不使用-d參數(shù)
docker?run?ubuntu:18.04?/bin/sh?-c?"while?true;?do?echo?hello?world;sleep?1;?done"
?
容器會(huì)把輸出的結(jié)果(STDOUT)打印到宿主機(jī)上面,直接強(qiáng)制退出的話,容器就退出了。
如果使用-d的話
docker?run?-d?ubuntu:18.04?/bin/sh?-c?"while?true;?do?echo?hello?world;sleep?1;?done"
9a615ec487e9dfd4d246d391fb804e786610a45239cda2e8687e43a70580566d
不會(huì)有輸出,就直接輸出容器的id,此時(shí)容器會(huì)在后臺(tái)運(yùn)行并不會(huì)把輸出結(jié)果(STDOUT)打印到宿主機(jī)上面(輸出結(jié)果可以用docker?logs?查看)
?
使用-d?參數(shù)啟動(dòng)后會(huì)返回一個(gè)唯一的id,也可以通過docker?container?ls命令來查看容器信息。
?
進(jìn)入容器
????在使用-d參數(shù)時(shí),容器啟動(dòng)后會(huì)進(jìn)入后臺(tái)。
????某些時(shí)候需要進(jìn)入容器進(jìn)行操作,包括使用docker?attach命令或者docker?exec?命令,推薦使用exec,因?yàn)閍ttach可能導(dǎo)致容器退出。
?
attach命令
docker?run?-dit?ubuntu
docker?container?ls
docker?attach?655bdc811cd8
此時(shí)已經(jīng)進(jìn)入了終端?exit,后容器就會(huì)直接停止,可以通過docker?container?ls再看下,發(fā)現(xiàn)退出了。
?
exec命令
-i?-t?參數(shù),docker?exec?后邊可以跟多個(gè)參數(shù),這里是-i?-t參數(shù)。(交互+偽終端)
?
exit退出后不會(huì)跟attach一樣導(dǎo)致容器直接也退出了。
?
導(dǎo)出和導(dǎo)入容器
導(dǎo)出:docker?export
例子:
docker?container?ls?-a
docker?export?0e172d70f90e?>?ubuntu.tar
?
那個(gè)紅色的就是容器導(dǎo)出來的快照文件。
?
導(dǎo)入快照?docker?import
cat?ubuntu.tar?|?docker?import?-?test/ubuntu:v1.0
?
也可以通過指定?URL?或者某個(gè)目錄來導(dǎo)入
docker?import?http://example.com/exampleimage.tgz?example/imagerepo
ps:用戶即可以使用docker?load?來導(dǎo)入鏡像存儲(chǔ)文件到本地鏡像庫(kù),也可以使用docker?import來導(dǎo)入一個(gè)容器快照到本地鏡像庫(kù)。區(qū)別是容器快照文件將丟棄所有的歷史記錄和元數(shù)據(jù)信息(即僅保存容器當(dāng)時(shí)的快照狀態(tài)),而鏡像存儲(chǔ)文件將保存完整記錄,體積也大。從容器快照文件導(dǎo)入是可以重新制定標(biāo)簽等元數(shù)據(jù)信息。
刪除容器
Docker?container?rm刪除終止?fàn)顟B(tài)的容器。如果是刪除運(yùn)行中的容器?可以添加-f,Docker會(huì)發(fā)送SIGKILL信號(hào)給容器。如果是一次性清理所有終止?fàn)顟B(tài)的容器可以直接
docker?container?prune
?
?
總結(jié)
以上是生活随笔為你收集整理的操作Docker容器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dockerfile多阶段构建
- 下一篇: Docker阿里云镜像存储服务