Docker由三大部分組成
基礎鏡像---->中間件---->最后生成應用鏡像
一個鏡像可以給多個進程使用!
Docker是什么
Docker是一個改進的容器技術。具體的“改進”體現在,Docker為容器引入了鏡像,使得容器可以從預先定義好的模版(images)創建出來,並且這個模版還是分層的。
Docker的特性:
-
輕量
-
快速
-
隔離
Docker技術的基礎:
-
namespace,容器隔離的基礎,保證A容器看不到B容器. 6個名空間:User,Mnt,Network,UTS,IPC,Pid
-
cgroups,容器資源統計和隔離。主要用到的cgroups子系統:cpu,blkio,device,freezer,memory
-
unionfs,典型:aufs/overlayfs,分層鏡像實現的基礎
Docker組件:
-
docker Client客戶端————>向docker服務器進程發起請求,如:創建、停止、銷毀容器等操作
-
docker Server服務器進程—–>處理所有docker的請求,管理所有容器
-
docker Registry鏡像倉庫——>鏡像存放的中央倉庫,可看作是存放二進制的scm
Docker的安裝與部署:
[root@docker /]# yum install -y docker //使用官方源安裝docker
也可以使用國內源安裝docker,例如,阿里,中科大,網易 的源
啟動docker:
[root@docker /]# systemctl start docker
搜索docker官方鏡像文件:OFFICI [OK]表示官方鏡像,其余表示非官方上傳
下載與上傳鏡像文件:
docker pull [鏡像文件名] //拉取鏡像
docker push [鏡像文件名] //上傳鏡像
也可以直接下載站點鏡像:
docker pull hub.c.163.com/library/tomcat:latest //復制站點鏈接用 pull 下來
查看docker本地鏡像:
docker images
運行docker鏡像:
docker run -it [鏡像名]:[標簽名] /bin/bash
-i 使用交互模式運行鏡像 -t 分配輸入偽終端
使用后台運行docker進程:
docker run -d [鏡像名]:[標簽名] /bin/bash -c "[腳本]"
-d 后台運行docker返回容器的ID好 -c 完成后面的命令
例:docker run -d [鏡像名]:[標簽名] /bin/bash -c "while true;do echo hello world;sleep 2;done"
查看docker進程:
docker ps //加 -a 參數列出所有
讀取docker日志:
docker logs [PID] //短ID也可以,只要是唯一的
docker鏡像的停止、開啟、重啟:
docker stop [PID] //關閉docker鏡像
docker start [PID] //繼續運行docker images
docker restart [PID] //restart docker images
通過docker鏡像的PID進程ID來殺死docker進程:
docker kill [PID]
刪除docker鏡像:
docker rm [image ID] //刪除images file -f 強制刪除
Docker鏡像制作方法:
方法一:docker commit //保存 container 當前狀態到image 然后生成image
方法二:docker build //使用 Dockerfile 文件自動化制作 images
在實例中創建一個apache服務:
docker run -it [docker name]:[docker taget] /bin/bash
yum install -y httpd
exit
保存安裝apache的 centos image:
docker commit [container imageID] [image name]:[Taget] //docker.io/centos:apache (這個標簽可以隨便寫)
imageID用的是docker ps -a 中的ID 不是 docker image 中的鏡像ID!!!!!!
通過Dockerfile來創建容器:
dockerfile文件中執行命令中的所有需要被調用到的文件,必須放在Dockerfile所在的目錄下
基礎鏡像可以不放在dockerfile文件目錄下,但是docker image中必須要有所需的基礎鏡像
[root@docker docker/]# vim Dockerfile
FROM docker.io/centos:latest //基於哪個鏡像
MAINTAINER <zxq@qq.com> //MAINTAINER 鏡像創建者
RUN yum install -y httpd //RUN 安裝應用
ADD start.sh /usr/local/bin/start.sh
ADD index.html /var/www/html/index.html //ADD 將此目錄中的文件拷貝到對應的鏡像系統路徑下。
[root@docker docker /]# vim Dockerfile
/usr/sbin/httpd -DFOREGROUND"
[root@docker docker /]# index.html
Docker a Web!
chmod a+x start.sh
所有拷貝到鏡像中的文件 權限默認為 0755 uid和pid都為0
CMD systemctl start httpd //container中啟動時執行的命令,一個Dockerfile只能有一個CMD命令,
有多條只能執行最后一條
通過docker build創建鏡像:
docker build -t [image name]:[taget] [Dockerfile路徑]
[root@docker docker /]# docker buile -t docker.io/centos:httpd ./
Docker鏡像導出:
docker save image to tarball
保存image到tar包當中
docker save -o 導出鏡像名.tar 本地鏡像名:image標簽 //這里導出的鏡像名不能有冒號,注意特殊符號!
Docker image 導入鏡像:
docker load -i [本地鏡像名]
Container容器端口映射:
docker run -d -p 80(物理機端口):80(容器端口) [image name]:[taget] /bin/bash -c /usr/local/bin/start.sh
訪問一個正在運行的docker鏡像:
docker exec -it <container id|name> /bin/bash
發布鏡像到docker hub :
push image to docker hub
1、注冊docker hub 賬號
https://hub.docker.com/
2、登錄 docker hub
docker login -u username -p password -e 2235590965@qq.com
3、上傳鏡像
docker push [image name]:[taget]
4、下載鏡像
docker pull username/[image name]:[taget]
如果在運行docker鏡像的時候提示網絡錯誤,查看 /proy/sys/net/ipv4/ip_forward值,正常的是 1