docker是一個開源的應用容器引擎,基於go語言開發並遵循了apache2.0協議開源。docker是一種容器技術,它能夠對軟件及其依賴進行標準化的打包;容器之間先對獨立,基於容器運行的應用之間也是相互隔離的;而且容器之間是共享一個OS kernel的,充分利用服務器資源,容器能夠運行在不少主流的操做系統之上。python
容器時在linux上運行,並與其它容器共享主機的內核,它運行一個獨立的進程,不佔用其它任何可執行文件的內存,很是輕量。虛擬機運行的是一個完成的操做系統,經過虛擬機管理程序對主機資源進行虛擬訪問,相比之下須要的資源更多。
mysql
docker本質就是宿主機的一個進程,docker是經過namespace實現資源隔離,經過cgroup實現資源限制,經過寫時複製技術(copy-on-write)實現了高效的文件操做(相似虛擬機的磁盤好比分配500g並非實際佔用物理磁盤500g)
linux
namepace | 系統調用參數 | 隔離內容 |
---|---|---|
UTS | CLONE_NEWUTS | 主機名與域名 |
IPC | CLONE_NEWWIPC | 信號量、消息隊列和共享內存 |
PID | CLONE_NEWPID | 進程編號 |
NEWWORD | CLONE_NEWNET | 網絡設備、網絡棧、端口等 |
MOUNT | CLONE_NEWNS | 掛載點(文件系統) |
USER | CLONE_NEWUSER | 用戶和用戶組(3.8之後的內核才支持) |
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
#查詢docker版本,版本從高到低排序 yum list docker-ce --showduplicates | sort -r #安裝指定版本的docker,替換<VERSION_STRING>便可 sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
sudo systemctl start docker
sudo docker version
sudo docker run hello-world
docker基於linux內核空間,在基礎鏡像的基礎上一層層構建出用戶鏡像。容器是鏡像的運行實例。經過鏡像啓動一個容器,一個鏡像是一個可執行的包,其中包括運行應用程序所須要的全部內容包含代碼,運行時間,庫、環境變量、和配置文件。git
docker鏡像就是一個只讀模板,好比,一個鏡像能夠包含一個完整的centos,裏面僅安裝apache或用戶的其餘應用,鏡像能夠用來建立docker容器。github
docker image ls docker images
docker image rm f6509bac4980 #簡寫 docker rmi f6509bac4980
#根據dockerfile構建一個鏡像 docker image build #從一個被改變的容器建立一個新的鏡像 docker container commit #簡寫,從一個被改變的容器建立一個新的鏡像 docker commit
#默認從docker hub拉取 docker pull ubuntu:14.04
#經過鏡像名稱 docker history mysql:5.7 #經過鏡像ID docker history f6509bac4980
#製做base image FROM scratch #使用base image FROM centos FROM ubuntu:14.04
說明:爲了安全起見,儘可能使用官方的鏡像做爲基礎鏡像。sql
LABEL version="1.0" LABEL description="this is description"
說明:此關鍵字的做用是定義鏡像的元數據,相似於註釋及幫助信息,仍是很是必要的docker
RUM yum update && yum install -y vim \ python-dev #反斜線換行
說明:RUN關鍵字用來執行命令,值得注意的是每運行一次RUN,都會生成一層layer,爲了不無用分層,務必合併多條命令成一行,反斜線換行,&&合併成多條命令apache
#若是不存在此目錄,則會自動建立目錄,並進入目錄 WORKDIR /test WORKDIT demo RUN $PWD #輸出結果應爲/test/demo
說明:WORKDIR設定當前工做目錄,進入目錄應當使用WORKDIR,避免使用RUN cd,由於RUN會新增層,還有儘可能使用絕對目錄。ubuntu
ADD test.tar.gz / #添加到根目錄並解壓縮 COPY hello /
說明:AND and COPY本地文件添加到Docker Image裏面,大部分狀況,COPY優於ADD,ADD相比COPY有解壓縮的功能。如須要添加遠程文件或目錄,請使用RUN關鍵字執行curl或者wget命令。vim
ENV MYSQL\_VERSION 5.7 #設置常量 RUN apt-get install -y mysql-servier= "${MYSQL_VERSION}" \ && rm -rf /var/lib/apt/lists/* #引用常量
說明:設置常量,增長可維護性。
docker利用容器來運行應用,容器是從鏡像建立的運行實例,它能夠被啓動,開始、中止、刪除、每一個容器都是互相隔離的,保證安全的平臺,能夠吧容器看作是要給簡易版的linux環境(包括root用戶權限、鏡像空間、用戶空間和網絡空間等)和運行再其中的應用程序
#當前正在運行的容器列表 docker container ls #列出全部容器,包含已退出的 docker container ls -a docker ps -a
docker run centos #以交互模式運行一個容器 docker run -it centos
#指定容器ID刪除 docker container rm d02f80816fbb #簡寫 docker rm d02f80816fbb #刪除全部的容器,-q選項只列出容器ID docker rm $(docker container ls -aq) #刪除退出狀態的容器,-q選項只列出容器ID docker rm $(docker container ls -f "status=exited" -q)
倉庫是集中存儲鏡像文件的地方,registry是倉庫註冊服務,實際上倉庫註冊服務器上存放着多個倉庫,每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag)。倉庫分爲兩種,即公有倉庫和私有倉庫,最大的公開倉庫是docker Hub,存放了數量龐大的鏡像供用戶下載,國內的docker pool,這裏倉庫的概念與Git相似,registry能夠理解爲github這樣的託管服務