CentOS7-Docker容器入門


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]表示官方鏡像,其余表示非官方上傳

圖片.png

 

下載與上傳鏡像文件:

    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 強制刪除

圖片.png

 

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 ./

圖片.png

 

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

圖片.png
訪問一個正在運行的docker鏡像:
    docker exec -it <container id|name> /bin/bash

圖片.png

 

發布鏡像到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

原文地址:https://blog.51cto.com/13735335/2177648?source=dra


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM