閱讀148 返回首頁    go 阿裏雲 go 技術社區[雲棲]


理解並使用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.txtcat: /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

  上一篇:go 微信之父張小龍:怎樣做簡單的產品經理?六
  下一篇:go Coursera Scala 2-1:高階函數