一、何為Docker
Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
Docker的應用場景
-
Web 應用的自動化打包和發布。
-
自動化測試和持續集成、發布。
-
在服務型環境中部署和調整數據庫或其他的后台應用。
- 從頭編譯或者擴展現有的OpenShift或Cloud Foundry平台來搭建自己的PaaS環境。
二、Docker架構
容器 VS 虛擬機:
容器和虛擬機具有相似的資源隔離和分配優勢,但功能有所不同,因為容器虛擬化的是操作系統,而不是硬件,因此容器更容易移植,效率也更高。
-
容器是一個應用層抽象,用於將代碼和依賴資源打包在一起。多個容器可以在同一台機器上運行,共享操作系統內核,但各自作為獨立的進程在用戶空間中運行。與虛擬機相比,容器占用的空間較少(容器鏡像大小通常只有幾十兆),瞬間就能完成啟動。
-
虛擬機 (VM) 是一個物理硬件層抽象,用於將一台服務器變成多台服務器。管理程序允許多個 VM 在一台機器上運行。每個 VM 都包含一整套操作系統、一個或多個應用、必要的二進制文件和庫資源,因此占用大量空間。而且 VM 啟動也十分緩慢。
三、Docker安裝
前提條件
目前,CentOS 僅發行版本中的內核支持 Docker。
Docker 運行在 CentOS 7 上,要求系統為64位、系統內核版本為 3.10 以上。
Docker 運行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系統為64位、系統內核版本為 2.6.32-431 或者更高版本。
使用 yum 安裝(CentOS 7下)
Docker 要求 CentOS 系統的內核版本高於 3.10 ,查看本頁面的前提條件來驗證你的CentOS 版本是否支持 Docker 。
通過 uname -r 命令查看你當前的內核版本
[root@runoob ~]# uname -r 3.10.0-327.el7.x86_64
安裝 Docker
Docker 軟件包和依賴包已經包含在默認的 CentOS-Extras 軟件源里,安裝命令如下:
[root@runoob ~]# yum -y install docker-io
安裝完成。
啟動 Docker 后台服務
[root@runoob ~]# service docker start
測試運行 hello-world
[root@runoob ~]#docker run hello-world
由於本地沒有hello-world這個鏡像,所以會下載一個hello-world的鏡像,並在容器內運行。
使用腳本安裝 Docker
1、使用 sudo
或 root
權限登錄 Centos。
2、確保 yum 包更新到最新。
$ sudo yum update
3、執行 Docker 安裝腳本。
$ curl -fsSL https://get.docker.com/ | sh
執行這個腳本會添加 docker.repo
源並安裝 Docker。
4、啟動 Docker 進程。
$ sudo service docker start
5、驗證 docker
是否安裝成功並在容器中執行一個測試的鏡像。
$ sudo docker run hello-world
到此,docker 在 CentOS 系統的安裝完成。
四、Docker 使用
docker run ubuntu:15.10 /bin/echo "Hello world" -- docker [option] OS /bash//echo "content"
各個參數解析:
-
docker: Docker 的二進制執行文件。
-
run:與前面的 docker 組合來運行一個容器。
-
ubuntu:15.10指定要運行的鏡像,Docker首先從本地主機上查找鏡像是否存在,如果不存在,Docker 就會從鏡像倉庫 Docker Hub 下載公共鏡像。
-
/bin/echo "Hello world": 在啟動的容器里執行的命令
以上命令完整的意思可以解釋為:Docker 以 ubuntu15.10 鏡像創建一個新容器,然后在容器里執行 bin/echo "Hello world",然后輸出結果。
[option] run , stop
1、docker -h 幫助
2、獲取鏡像
sudo docker pull NAME[:TAG]
sudo docker pull centos:latest
3、啟動Container盒子
sudo docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
sudp docker run -t -i contos /bin/bash
4、查看鏡像列表,列出本地的所有images
sudo docker images [OPTIONS] [NAME]
sudo docker images centos
5、查看容器列表,可看到我們創建過的所有container
sudo docker ps [OPTIONS]
sudo docker ps -a
6、刪除鏡像,從本地刪除一個已經下載的鏡像
sudo docker rmi IMAGE [IMAGE...]
sudo docker rmi centos:latest
7、移除一個或多個容器實例
sudo docker rm [OPTIONS] CONTAINER [CONTAINER...]
移除所有微運行的容器
sudo docker rm sudo docker ps -aq
8、停止一個正在運行的容器
sudo docker kill [OPTIONS] CONTAINER [CONTAINNER...]
sudo docker kill 026e
9、重啟一個正在運行的容器
sudo docker restart [OPTIONS] contains[CONTAINER]
sudo docker restart 026e
10、停止一個已經停止的容器
sudo docker start [OPTIONS] CONTAINER [CONTAINER..]
sudo docker start 026e
五、Docker制作
我們使用命令 docker build , 從零開始來創建一個新的鏡像。為此,我們需要創建一個 Dockerfile 文件,其中包含一組指令來告訴 Docker 如何構建我們的鏡像。
runoob@runoob:~$ cat Dockerfile FROM centos:6.7 MAINTAINER Fisher "fisher@sudops.com" RUN /bin/echo 'root:123456' |chpasswd RUN useradd runoob RUN /bin/echo 'runoob:123456' |chpasswd RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D
每一個指令都會在鏡像上創建一個新的層,每一個指令的前綴都必須是大寫的。
第一條FROM,指定使用哪個鏡像源
RUN 指令告訴docker 在鏡像內執行命令,安裝了什么。。。
然后,我們使用 Dockerfile 文件,通過 docker build 命令來構建一個鏡像。
runoob@runoob:~$ docker build -t runoob/centos:6.7 . Sending build context to Docker daemon 17.92 kB Step 1 : FROM centos:6.7 ---> d95b5ca17cc3 Step 2 : MAINTAINER Fisher "fisher@sudops.com" ---> Using cache ---> 0c92299c6f03 Step 3 : RUN /bin/echo 'root:123456' |chpasswd ---> Using cache ---> 0397ce2fbd0a Step 4 : RUN useradd runoob ......
參數說明:
-
-t :指定要創建的目標鏡像名
-
. :Dockerfile 文件所在目錄,可以指定Dockerfile 的絕對路徑
使用docker images 查看創建的鏡像已經在列表中存在,鏡像ID為860c279d2fec
runoob@runoob:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE runoob/centos 6.7 860c279d2fec About a minute ago 190.6 MB runoob/ubuntu v2 70bf1840fd7c 17 hours ago 158.5 MB ubuntu 14.04 90d5884b1ee0 6 days ago 188 MB php 5.6 f40e9e0f10c8 10 days ago 444.8 MB nginx latest 6f8d099c3adc 12 days ago 182.7 MB mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB ubuntu 15.10 4e3b13c8a266 5 weeks ago 136.3 MB hello-world latest 690ed74de00f 6 months ago 960 B centos 6.7 d95b5ca17cc3 6 months ago 190.6 MB training/webapp latest 6fae60ef3446 12 months ago 348.8 MB
我們可以使用新的鏡像來創建容器
runoob@runoob:~$ docker run -t -i runoob/centos:6.7 /bin/bash [root@41c28d18b5fb /]# id runoob uid=500(runoob) gid=500(runoob) groups=500(runoob)
從上面看到新鏡像已經包含我們創建的用戶runoob
設置鏡像標簽
我們可以使用 docker tag 命令,為鏡像添加一個新的標簽。
runoob@runoob:~$ docker tag 860c279d2fec runoob/centos:dev
docker tag 鏡像ID,這里是 860c279d2fec ,用戶名稱、鏡像源名(repository name)和新的標簽名(tag)。
使用 docker images 命令可以看到,ID為860c279d2fec的鏡像多一個標簽。
runoob@runoob:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE runoob/centos 6.7 860c279d2fec 5 hours ago 190.6 MB runoob/centos dev 860c279d2fec 5 hours ago 190.6 MB runoob/ubuntu v2 70bf1840fd7c 22 hours ago 158.5 MB ubuntu 14.04 90d5884b1ee0 6 days ago 188 MB php 5.6 f40e9e0f10c8 10 days ago 444.8 MB nginx latest 6f8d099c3adc 13 days ago 182.7 MB mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB ubuntu 15.10 4e3b13c8a266 5 weeks ago 136.3 MB hello-world latest 690ed74de00f 6 months ago 960 B centos 6.7 d95b5ca17cc3 6 months ago 190.6 MB training/webapp latest 6fae60ef3446 12 months ago 348.8 MB
Docker 刪除鏡像
分為兩部:
首先 刪除 容器,再刪除鏡像
docker ps -a
docker rm id
刪除鏡像
docker ps -a
docker images
docker rmi id
檢查是否刪除成功
docker images
注意點:
1. 刪除前需要保證容器是停止的 stop
2. 需要注意刪除鏡像和容器的命令不一樣。 docker rmi ID ,其中 容器(rm) 和 鏡像(rmi)
3. 順序需要先刪除容器
參考文獻:
http://www.runoob.com/docker/centos-docker-install.html
http://www.runoob.com/docker/windows-docker-install.html(windows10安裝docker)
https://www.cnblogs.com/yufeng218/p/8370670.html
https://blog.csdn.net/winy_lm/article/details/77980529