理解並使用Docker
本文並不是科普問,隻是對Docker的一些個人理解,使用。
為什麼使用Docker呢?一般程序員在搭建開發環境問題時,通常會遇到如下問題:
- 軟件安裝麻煩,係統環境不同,軟件安裝通過運維人員操作容易出現問題,因為不提供ssh權限,導致調試不便。
- 隔離性差,例如不同的開發人員如果在同一台主機環境下共享開發,雖然是用戶隔離,但端口如果不規範可能會衝突;同一個Mysql如果權限管理不好很有可能誤刪別人的數據
- 可移植性差,例如和生產環境不一致,開發人員之間也無法共享;更嚴重的情況是當有新人入職時,通常需要又折騰一遍開發環境,無法快速搭建
Docker利用Linux的LXC和AUFS,為我們的應用程序提供輕量級的虛擬環境。性能有待考證,不知國內是否有公司運用在生產環境。
Docker有兩個重要概念:image,container
image
可以理解為基本的操作係統鏡像,為隻讀的,共享的,支撐container的層。
container
基於image的,可寫的層。所有基於image運行的命令,都會產生一個container,運行完,container就會停止。
做個試驗:
基於centos6-ssh這個image,創建一個包含hello word的文件/root/hello.txt:
[root@localhost ~]# docker run centos6-ssh echo "hello world" > /root/hello.txt
再試圖讀取一下該文件:
[root@localhost ~]# docker run centos6-ssh cat /root/hello.txt
cat: /root/hello.txt: No such file or directory
無法讀取,沒有這個文件。因為其實是運行了2個
container,文件是在第一個container中創建的。我們來看一下剛才自動創建的container:
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2f55c998fa75 centos6-ssh:latest cat /root/hello.txt 2 minutes ago Exit 1 focused_ritchie
6822bdf4eae8 centos6-ssh:latest echo hello world 3 minutes ago Exit 0 sharp_poincare
那我們要如何從新訪問剛才那個container中的hello.txt文件呢?正確的使用方式,應該是將container後台運行(-d參數),通過開啟ssh服務,保持container up狀態。通過ssh連接到container,創建或或者訪問文件。
基本命令
查看已經下載、或者自己構建的image
[root@localhost centos6-image]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos6-base latest 4cd606247337 42 minutes ago 311.2 MB
開啟一個bash,交互性的,偽tty。exit退出
[root@localhost centos6-image]# docker run -i -t centos6-base /bin/bash
bash-4.1# ls
bin dev home lib64 mnt proc sbin srv tmp var
boot etc lib media opt root selinux sys usr
創建包含ssh服務的image,開啟ssh服務;ssh端口暴露出來.最為後台運行,不會退出。
docker build -t centos6-ssh https://git.oschina.net/feedao/Docker_shell/raw/start/Dockerfile
docker run -d -p 127.0.0.1:33301:22 centos6-ssh
之後就可以ssh我們創建的container,正常使用linux係統一樣使用container.
Reference
https://tech.uc.cn/?p=2726
https://my.oschina.net/feedao/blog/223795
https://docs.docker.io/
最後更新:2017-04-03 12:56:38