Docker容器

容器簡介

容器是一個鏡像的可運行的實例,可以使用Docker REST API或者CLI來操作容器,容器的實質是進程,但與直接在宿主機執行的進程不同,容器進程運行於屬於自己的獨立的命令空間。因此容器可以擁有自己的root文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶ID空間。容器內的進程是運行在一個隔離的環境裡,使用起來,就好像是在一個獨立於宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。

查看容器

用到的命令為docker ps

1. 查看運行中容器

[root@ice ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

2. 查看所有容器

查看所有容器只需加上-a參數

[root@ice ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2703796a7188 nginx "nginx -g 'daemon ..." 6 minutes ago Up 6 minutes 80/tcp myngin

3. 創建&&運行容器

用到的命令為`docker run`,當利用docker來創建常見容器時,Docker在後臺運行的標準操作包括

  • 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
  • 利用鏡像創建並啟動一個容器
  • 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀可寫
  • 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
  • 從地址池配置一個IP地址給容器
  • 執行用戶指定的應用程序
  • 執行完畢後容器被終止

4. 創建時運行容器

創建一個busybox容器,並且打印出Hello World

[root@ice ~]# docker run -i -t busybox /bin/echo "Hello World"
Unable to find image 'busybox:latest' locally
Trying to pull repository docker.io/library/busybox ...
latest: Pulling from docker.io/library/busybox
8c5a7da1afbc: Pull complete
Digest: sha256:cb63aa0641a885f54de20f61d152187419e8f6b159ed11a251a09d115fdff9bd
Status: Downloaded newer image for docker.io/busybox:latest
Hello World

成功了打印了Hello World,那麼這樣就可以長久的運行容器嘛?答案當然是否

當我們想長久運行容器的時候還要加上-d讓其在後臺運行

[root@ice ~]# docker run -d nginx
008a544b9ac0492d57694b3b5d7d8a33b6e10394d739f34f61e1964d3c6f3609

使用docker ps查看正在運行的容器

[root@ice ~]# docker ps
CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES
008a544b9ac0 nginx "nginx -g 'daemon ..." 3 minutes ago Up 3 minutes 80/tcp gallant_volhard
  • 這裡要注意,容器的運行跟容器的生命週期有關,也就是所`docker run`有關和`-d`參數無關。只要啟動時執行的該命令不結束,容器也就不會退出。

5. 啟動已存在的容器

用到的命令為docker start

使用docker ps -a查看所有容器

[root@ice ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2703796a7188 nginx "nginx -g 'daemon ..." 15 minutes ago Exited (0) 8 minutes ago mynginx
008a544b9ac0 nginx "nginx -g 'daemon ..." About an hour ago Up About an hour 80/tcp gallant_volhard
0422bd90fd5c busybox "sh" About an hour ago Exited (0) About an hour ago quizzical_payne

發現有兩個容器SATUS是終止狀態,選擇啟動Name為mynginx的容器

[root@ice ~]# docker start 2703796a7188
2703796a7188

查看運行中的容器

[root@ice ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2703796a7188 nginx "nginx -g 'daemon ..." 19 minutes ago Up 2 seconds 80/tcp mynginx
008a544b9ac0 nginx "nginx -g 'daemon ..." About an hour ago Up About an hour 80/tcp gallant_volhard

終止容器

用到的命令為docker stop

終止CONTAINER ID為2703796a7188容器

[root@ice ~]# docker stop 2703796a7188
2703796a7188

查看運行中的容器

[root@ice ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
008a544b9ac0 nginx "nginx -g 'daemon ..." About an hour ago Up About an hour 80/tcp gallant_volhard

登錄容器

用到的命令為`docker exec`命令,以上面後臺運行的nginx為例,登錄一下它

查看運行文件

[root@ice ~]# docker exec -it 008a544b9ac0 ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
[root@ice ~]# docker exec -it 008a544b9ac0 ls bin
bash dmesg gzip mountpoint sh umount zfgrep
cat dnsdomainname hostname mv sh.distrib uname zforce
chgrp domainname ln nisdomainname sleep uncompress zgrep
chmod echo login pidof stty vdir zless
chown egrep ls pwd su wdctl zmore
cp false lsblk rbash sync which znew
dash fgrep mkdir readlink tailf ypdomainname

date findmnt mknod rm tar zcat
dd grep mktemp rmdir tempfile zcmp
df gunzip more run-parts touch zdiff
dir gzexe mount sed true zegrep

啟動bash文件

[root@ice ~]# docker exec -it 008a544b9ac0 /bin/bash
root@008a544b9ac0:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@008a544b9ac0:/# exit
exit
[root@ice ~]#

- -i:以交互模式運行容器,通常與 -t 同時使用。

- -t:為容器重新分配一個偽輸入終端,通常與 -i 同時使用。

- /bin/bash:表示載入容器後運行bash

· 為什麼我要進行查詢,而不是直接引用了/bin/bash?是因為不是所有的鏡像都安裝了shell,有的鏡像需要使用/bin/sh運行

刪除容器

容器在運行中是不能直接刪除的,需要添加-f參數強制刪除容器

強制刪除運行中容器

[root@ice ~]# docker rm -f 008a544b9ac0
008a544b9ac0

查看運行中的容器

[root@ice ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

刪除停止的容器

查看所有容器

[root@ice ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2703796a7188 nginx "nginx -g 'daemon ..." 33 minutes ago Exited (0) 9 minutes ago mynginx
0422bd90fd5c busybox "sh" About an hour ago Exited (0) About an hour ago quizzical_payne

刪除容器

[root@ice ~]# docker rm 2703796a7188
2703796a7188

查看所有容器

[root@ice ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0422bd90fd5c busybox "sh" About an hour ago Exited (0) About an hour ago quizzical_payne

刪除所有處於終止狀態容器

docker rm $(docker ps -aq)


分享到:


相關文章: