Docker 鏡像與容器的使用
Docker 系統(tǒng)有兩個程序:docker 服務(wù)端和 docker 客戶端。其中 docker 服務(wù)端是一個服務(wù)進(jìn)程,管理著所有的容器。docker 客戶端則扮演著 docker 服務(wù)端的遠(yuǎn)程控制器,可以用來控制 docker 的服務(wù)端進(jìn)程。大部分情況下 docker 服務(wù)端和客戶端運行在一臺機(jī)器上。
一 搜索可用的docker鏡像
命令行的格式為:docker search 鏡像名字,例如:
$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 9978 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 345 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 231 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 187 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 99 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 97 [OK]
neurodebian NeuroDebian provides neuroscience research s… 59 [OK]
..........
二 下載容器鏡像
命令行的格式為:docker pull 鏡像名字,例如:
# 下載 latest 版本的鏡像
$ docker pull ubuntu
# 下載指定版本號的鏡像
$ docker pull ubuntu:18.04
三 運行容器
命令行的格式為:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]。
1、 在容器中運行 hello world
$ docker run ubuntu:18.04 echo "hello world"
hello world
2、更新容器中的系統(tǒng)
$ docker run ubuntu:18.04 apt update
備注:apt update 命令執(zhí)行完畢之后,容器就會停止,但對容器的改動不會丟失。
四 Docker 鏡像、容器的查看與刪除
1、查詢鏡像 docker images ,可以看到所有已經(jīng)存在的鏡像的 ID (IMAGE ID)。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 a2a15febcdf3 5 weeks ago 64.2MB
hello-world latest fce289e99eb9 8 months ago 1.84kB
2、查詢?nèi)萜鳎?code>docker ps -a,可以看到所有容器的 ID (CONTAINER ID)。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce8a07737e4f testnet:18.04 "/bin/bash" 5 days ago Exited (0) 5 days ago test1
df329130a249 ubuntu_base:18.04 "/bin/bash" 2 weeks ago Exited (0) 5 days ago test2
39d2edba3611 ubuntu:18.04 "/bin/bash" 2 weeks ago Exited (0) 2 weeks ago musing_lalande
3、先刪除容器:docker rm 容器ID
$ docker rm ce8a07737e4f
4、再刪除鏡像:docker rmi 鏡像ID
$ docker rmi 9764aa177ecf
注意:
- 刪除前需要保證容器是停止的
docker stop test1。 - 順序是需要先刪除容器,再刪除鏡像
- 需要注意刪除鏡像和容器的命令不一樣。
$ docker rm CONTAINER_ID 刪除容器
$ docker rmi IMAGE_ID 刪除鏡像
五 保存對容器的修改
當(dāng)你對某一個容器做了修改之后(通過在容器中運行某一個命令),可以把對容器的修改保存下來,這樣下次可以從保存后的最新狀態(tài)運行該容器。docker中保存狀態(tài)的過程稱之為 committing,它保存新舊狀態(tài)之間的區(qū)別,從而產(chǎn)生一個新的版本。
命令行的格式為:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# 1、使用 docker ps -l 命令獲得安裝完ping命令之后容器的id
$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5d13254f0fb ubuntu:18.04 "apt update" 3 minutes ago Exited (0) 3 minutes ago trusting_meninsky
# 2、使用 commit 提交更改
$ docker commit e5d13254f0fb ubuntu-update:18.04
# 3、查看新提交的鏡像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-update 18.04 3f68ea2d04da 6 seconds ago 91.4MB
六 后臺運行容器并訪問
1、后臺運行容器
命令行的格式為:docker run -itd IMAGE [COMMAND] [ARG...]
參數(shù)說明:
- -i : 讓容器的標(biāo)準(zhǔn)輸入保持打開。
- -t : 分配一個偽終端并綁定到容器的標(biāo)準(zhǔn)輸入上。
- -d : 讓容器在后臺運行。
Docker 中系統(tǒng)鏡像的缺省命令是 bash,如果不加 -it bash 命令執(zhí)行后會自動會退出。這是因為如果沒有銜接輸入流,本身就會馬上結(jié)束。加 -it 后 docker 命令會為容器分配一個偽終端,并接管其 stdin/stdout 支持交互操作,這時候 bash 命令不會自動退出。
$ docker run -itd ubuntu:18.04 /bin/bash
$ docker ps -l
docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77d851adc856 ubuntu:18.04 "/bin/bash" 8 minutes ago Up 8 minutes suspicious_golick
2、使用 exec 命令訪問容器
無需任何配置訪問容器最簡單的兩種方式:
# 容器外執(zhí)行命令:`docker exec CONTAINER_ID Command`
$ docker exec 77d851adc856 ls -l /
# 容器內(nèi)執(zhí)行命令:`docker exec -it CONTAINER_ID /bin/bash
$ docker exec -it 77d851adc856 /bin/bash
# 退出容器:直接使用 exit 命令,退出后容器仍然在后臺繼續(xù)執(zhí)行。