Docker入門實踐

chy710發表於2018-08-07

 Docker是一門很成熟的容器技術,類似虛擬機器技術主要用做環境的隔離,方便環境的複製映象,虛擬機器是基於作業系統這一層的,而Docker更加的輕量級,像是“應用”層級的。比如我需要一個MySQL環境、一個Nginx環境、一個netcore執行環境等等。

 有兩個非常重要的概念要搞明白

映象Images:做好的環境,儲存在倉庫,有點像SVN/Git,有點像你做好的一個系統盤,它存的就是環境,比如一個nginx的映象。

容器Containers:一個映象在本機上的執行例項就是一個容器,可以執行多個容器。比如我從遠端pull一個nginx的映象,然後在本機執行這個nginx,這就是形成了一個容器。

這兩個之間的關係就像類與例項化之後的物件一樣。

現在好多軟體都提供Docker形式的分發了,映象的查詢可以登入https://hub.docker.com/查詢。需要什麼環境,直接pull到本機,然後run執行,非常方便,不用在本機安裝環境了。可以把自己配置好的環境提交成一個映象,然後在用的地方直接pull and run, 這樣就不用擔心環境不一致的問題了,非常方便複製且環境一致。

下面我以CentOS 7.2為例,執行一個nginx的容器。

# 更換源為國內
cd /etc/yun.repos.d
ls
mv CentOS-Base.repo CentOS-Base.repo.backup
wget http://mirrors.163.com/.help/CenOS7-Base-163.repo
yum makecache
yum -y update

# 安裝 (通過官方sh指令碼)
wget https://get.docker.com
mv index.html docker.sh
sh docker.sh
# 當前登入使用者
sudo usermod -aG docker root

# 啟動停止,和普通服務一樣
service docker start

# 檢視資訊
docker info
docker version

# -------------
# 概念,要特別理解熟悉映象(images)和容器(container)
# images就像遠端伺服器SVN上的程式碼(其實是程式環境,比如centOS,nginx,netcore....),可以拉下來編譯執行
# container就是本機執行一個images產生的環境

# 常用命令,不知道的,--help檢視

# 映象操作
docker images
# https://hub.docker.com
docker search xxx
docker pull xxx
docker rmi xxx

# 容器操作
docker run xxxxx
docker rm xxx
docker start xxx
docker stop xxx

docker attach xxx
docker exec -t -i xxx /bin/bash

docker run xxx yum install soft

docker cp xxx:/container_path ospath

# 進階 > 提交

 

docker容器執行後,通常是後臺執行的,怎麼進入容器檢視執行情況呢,有下面幾個辦法 

# 直接在外面檢視容器執行的日誌
docker logs xxx

# 進到容器且顯示當前執行的程式的終端
# 退出時按Ctrl+P+Q,一般有點卡,這個介面是隻讀的,沒法互動
docker attach xxxx

# 進到容器裡,可以bash互動的
docker exec -t -i b2d28b4aa923 /bin/bash

使用docker exec進入容器後,就像ssh進入一個Linux環境一樣,完全可以控制系統了,比如檢視檔案路徑,開啟一個檔案等等。在機器與容器之間copy檔案是一個常見的場景,但是,容器裡的檔案結果是怎麼樣的,一個檔案放在那個路徑下怎麼知道,這時用docker exe就很方便了。比如我執行一個nginx的容器,我需要把網站的檔案copy進去,但我不知道應該容器裡網站檔案應該放在什麼地方,可以這樣做。進入容器後,注意看系統提示都變了,然後我就可以查詢nginx網站的路徑,退出時exit退到機器

# 把一個檔案copy到容器nginx網站路徑下
docker cp my.html b2d28b4aa923:/user/share/nginx/html/my.html

# 也可以反過來copy
docker cp xxx:/user/file /root/file

# 容器裡的檔案路徑為 容器ID或名稱:容器裡的路徑

 

參考:https://yeasy.gitbooks.io/docker_practice/content/container/run.html

相關文章