Docker學習筆記-3 創建容器


在第一章介紹Docker架構時,我們介紹過Docker中鏡像和容器的關系。

我們再復習一遍,鏡像是模板,容器是具體實例。用Java語言中的概念來理解就是:鏡像是類,容器是對象。

So,當我們創建一個容器時,需要從鏡像倉庫中選擇自己需要的鏡像,然后創建容器並使用。當然,如果現有鏡像沒有能滿足我們需求的,我們也可以自己定義鏡像,再用自己的鏡像創建容器並使用。

 

首先我們講,用現有鏡像創建容器,並使用它。

 使用現有鏡像創建容器的命令是:

docker run ubuntu:15.10

docker:是我們剛安裝好的docker軟件。

run:是docker的指令,表示啟動一個容器。

ubuntu:15.10:是鏡像名稱,表示我們要使用這個鏡像來啟動容器。Docker 首先從本地主機上查找鏡像是否存在,如果不存在,Docker 就會從鏡像倉庫 Docker Hub 下載公共鏡像。

 

注意:docker默認鏡像倉庫是官方的,在國外速度比較慢。我們可以修改倉庫,使用國內的。

修改鏡像倉庫:
編輯/etc/docker/daemon.json,如果不存在則創建:

vi /etc/docker/daemon.json

內容如下:

{
    "registry-mirrors":[ "https://registry.docker-cn.com" ]
}

修改保存,之后要重啟docker服務:

1 service docker restart

然后可以查看下變化,執行docker info命令,可以看到Registry Mirrors下已經有了我們剛配置的地址。

這里的registry-mirrors是一個數組,可以設置多個url,這里的https://registry.docker-cn.com是docker官方國內地址。還可以設置其他源:

Docker中國區官方鏡像
https://registry.docker-cn.com

網易
http://hub-mirror.c.163.com

ustc
https://docker.mirrors.ustc.edu.cn

中國科技大學
https://docker.mirrors.ustc.edu.cn

 

ok,我們來使用現有鏡像啟動容器:

docker run ubuntu:15.10

 不報錯就是啟動成功了。通過docker ps命令可以看到正在運行的容器:

docker ps

這里會顯示一個空列表,因為我們的容器ubuntu:15.10什么都沒做,所以進程就結束了,容器則關閉了。

我們可以通過docker ps -a命令看到已經關閉的容器:

docker ps -a

這樣就能看到剛才啟動過的容器了,在"created"字段可以看到容器創建的時間,“status”可以看到容器目前的狀態。

我們可以讓容器做點事,讓它別那么快結束:

docker run ubuntu:15.10 nohup sleep 10>/dev/null &

這里我們在容器中執行了sleep命令,然后再通過docker ps查看docker進程,就可以看到了:

 

 

container id:容器id,每次啟動容器時分配。

image:鏡像名稱。

command:當前運行的進程,一般指主進程,如果該主進程又啟動了其他子進程,不會顯示。

created:創建時間。

status:當前狀態。

ports:容器的端口信息和使用的連接類型(tcp\udp)

names:自動分配的容器名稱。

 

這里我們只sleep了10秒,10秒后在看docker ps就沒有了,用docker ps -a可以看到狀態是Exited。已停止。

我們也可以進入容器中,進入容器有四種方式:

1、使用docker attach命令進入容器

在容器運行5,通過docker ps查看容器的container id,使用命令進入容器:

docker attach 容器id

這種方式類似於共享屏幕,也就是我們可以看到當前運行容器的程序和輸出,但是我們對當前容器的操作也會影響到正在運行的程序。如果多個用戶使用docker attach進入同一個容器,那么他們之間的操作是會相互影響的,可以看到其他人的操作。如果其中一個用戶運行阻塞操作,那么其他用戶就會被阻塞不能操作。

 

2、容器內部運行ssh服務,外部通過ssh登錄進容器

但是不建議這么操作,請參考:https://www.oschina.net/translate/why-you-dont-need-to-run-sshd-in-docker?cmp

 

3、使用nsenter進入Docker容器

拿到docker容器進程的真實pid,使用nsenter進入進程命名空間。

 

4、使用docker exec進入容器

這個命令可以使用-it參數打開輸入輸出交互,然后運行/bin/bash,就啟動了一個新shell,可以看到正在運行的程序,進行其他操作也不會影響到其他進入的用戶。和ssh效果類似,每個用戶都會啟動一個shell進程。

docker exec -it 容器id /bin/bash

 

除了上面這4種,還有一種更加便捷的,就是在啟動容器時進入:

docker run -i -t ubuntu:15.10 /bin/bash

這樣,就是在啟動容器時,直接進入容器中,效果和docker exec類似。

至此,我們就講完了使用現有鏡像創建容器並進入容器查看和交互。

接下來,看如何創建自定義鏡像,並啟動。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM