阿里雲CentOS 7上安裝配置Docker

前言

Docker是一個開源工具,它可讓建立和管理Linux容器變得簡單。容器就像是輕量級虛擬機,而且能夠以毫秒級的速度來啓動或中止。Docker幫助系統管理員和程序員在容器中開發應用程序,而且能夠擴展到成千上萬的節點。html

這是一隻鯨魚,它託着許多集裝箱。咱們能夠把宿主機可當作這隻鯨魚,把相互隔離容器可當作集裝箱,每一個集裝箱中都包含本身的應用程序node


傳送門

Docker與傳統虛擬區別

  • 傳統虛擬化技術的體系架構:

  • Docker技術的體系架構:

容器虛擬機(VM)的主要區別是:linux

  • 容器提供了基於進程的隔離,而虛擬機提供了資源(CPU、內存和硬盤)的徹底隔離
  • 虛擬機可能須要一分鐘來啓動,而容器只須要一秒鐘或更短。
  • 虛擬機佔用的內存空間可達到幾個G,而容器可能只須要幾百兆
  • 容器使用宿主操做系統的內核,而虛擬機使用獨立的內核。

Docker平臺的基本構成

Docker平臺基本上由三部分組成:程序員

  • 客戶端:用戶使用Docker提供的工具(CLI以及API等)來構建,上傳鏡像併發布命令來建立啓動容器
  • Docker主機:從Docker registry上下載鏡像啓動託管容器。
  • Docker registryDocker鏡像倉庫,用於保存鏡像,並提供鏡像上傳和下載。

Docker容器的狀態機

一個容器在某個時刻可能處於如下幾種狀態之一:web

created:已經被建立 (使用docker ps -a命令能夠列出) 可是尚未被啓動,使用docker ps命令還沒法列出。 running:容器在這正常運行中。 paused:容器的進程被暫停了。 restarting:容器的進程正在重啓過程當中。 exited:上圖中的stopped狀態,表示容器以前運行過可是如今處於中止狀態 (要區別於created狀態,它是指一個新建立還沒有運行過的容器)。能夠經過start命令使其從新進入running狀態。 destroyed:容器從宿主機刪除了,不再存在了。docker

Docker的安裝

RedHat/CentOS必需要6.6版本以上,或者7.x才能安裝docker,建議在RedHat/CentOS 7上使用docker,由於RedHat/CentOS 7內核升級到了kernel 3.10,對lxc容器支持更好。編程

查看Linux內核版本(內核版本必須是3.10或者以上):json

cat /proc/version

uname -a

lsb_release -a

##沒法執行命令安裝
yum install -y redhat-lsb
複製代碼

更新yum安裝源:後端

yum install docker -y
複製代碼

檢查docker版本:centos

docker -v
複製代碼

安裝完成後,使用下面的命令來啓動docker服務,並將其設置爲開機啓動

service docker start
chkconfig docker on
複製代碼

下載官方的CentOSdocker鏡像:

docker pull centos
複製代碼

檢查CentOS鏡像是否被成功拉取到本地宿主機:

# 查看本地鏡像列表
docker images

# 刪除鏡像
docker rmi <image id>

# 刪除鏡像(針對多個相同image id的鏡像)
docker rmi repository:tag
複製代碼

鏡像下載完成後,你應該會看到:

[root@iZ2ze74fkxrls31tr2ia2fZ ~]# docker images centos
REPOSITORY       TAG        IMAGE ID     CREATED         SIZE
docker.io/centos latest    3fa822599e10    3weeks ago   203.5 MB
複製代碼

若是看到以上輸出,說明你可使用docker.io/centos這個鏡像了,或將其稱爲倉庫(Repository),該鏡像有一個名爲latest標籤(Tag),此外還有一個名爲3fa822599e10的鏡像ID (可能您所看到的鏡像 ID 與此處的不一致,那是正常現象,由於這個數字是隨機生成的)。 此外,咱們能夠看到該鏡像只有203.5MB,很是小巧,而不像虛擬機的鏡像文件那樣龐大。

重命名TAGcentos

# docker tag IMAGE_ID(鏡像id) REPOSITORY:TAG(倉庫:標籤)
docker tag 3fa822599e10  docker.io/centos:centos
複製代碼

啓動CentOS的容器:

docker run -i -t -v /root/software/:/mnt/software/ 3fa822599e10 /bin/bash
複製代碼

命令參數說明: docker run <相關參數> <鏡像ID> <初始命令>

  • -i:表示以交互模式運行容器
  • -t:表示容器啓動後會進入其命令行
  • -v:表示須要將本地哪一個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>

更多參數詳解:

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  -d, --detach=false         指定容器運行於前臺仍是後臺,默認爲false
  -i, --interactive=false   打開STDIN,用於控制檯交互
  -t, --tty=false            分配tty設備,該能夠支持終端登陸,默認爲false
  -u, --user=""              指定容器的用戶
  -a, --attach=[]            登陸容器(必須是以docker run -d啓動的容器)
  -w, --workdir=""           指定容器的工做目錄
  -c, --cpu-shares=0        設置容器CPU權重,在CPU共享場景使用
  -e, --env=[]               指定環境變量,容器中可使用該環境變量
  -m, --memory=""            指定容器的內存上限
  -P, --publish-all=false    指定容器暴露的端口
  -p, --publish=[]           指定容器暴露的端口
  -h, --hostname=""          指定容器的主機名
  -v, --volume=[]            給容器掛載存儲卷,掛載到容器的某個目錄
  --volumes-from=[]          給容器掛載其餘容器上的卷,掛載到容器的某個目錄
  --cap-add=[]               添加權限,權限清單詳見:http://linux.die.net/man/7/capabilities
  --cap-drop=[]              刪除權限,權限清單詳見:http://linux.die.net/man/7/capabilities
  --cidfile=""               運行容器後,在指定文件中寫入容器PID值,一種典型的監控系統用法
  --cpuset=""                設置容器可使用哪些CPU,此參數能夠用來容器獨佔CPU
  --device=[]                添加主機設備給容器,至關於設備直通
  --dns=[]                   指定容器的dns服務器
  --dns-search=[]            指定容器的dns搜索域名,寫入到容器的/etc/resolv.conf文件
  --entrypoint=""            覆蓋image的入口點
  --env-file=[]              指定環境變量文件,文件格式爲每行一個環境變量
  --expose=[]                指定容器暴露的端口,即修改鏡像的暴露端口
  --link=[]                  指定容器間的關聯,使用其餘容器的IP、env等信息
  --lxc-conf=[]              指定容器的配置文件,只有在指定--exec-driver=lxc時使用
  --name=""                  指定容器名字,後續能夠經過名字進行容器管理,links特性須要使用名字
  --net="bridge"             容器網絡設置:
                                bridge 使用docker daemon指定的網橋
                                host     //容器使用主機的網絡
                                container:NAME_or_ID  >//使用其餘容器的網路,共享IP和PORT等網絡資源
                                none 容器使用本身的網絡(相似--net=bridge),可是不進行配置
  --privileged=false         指定容器是否爲特權容器,特權容器擁有全部的capabilities
  --restart="no"             指定容器中止後的重啓策略:
                                no:容器退出時不重啓
                                on-failure:容器故障退出(返回值非零)時重啓
                                always:容器退出時老是重啓
  --rm=false                 指定容器中止後自動刪除容器(不支持以docker run -d啓動的容器)
  --sig-proxy=true           設置由代理接受並處理信號,可是SIGCHLD、SIGSTOP和SIGKILL不能被代理
複製代碼

Docker的經常使用命令

咱們能夠把Docker的命令大概地分類以下:

## 鏡像操做:
    build     Build an image from a Dockerfile
    commit    Create a new image from a container's changes images List images load Load an image from a tar archive or STDIN pull Pull an image or a repository from a registry push Push an image or a repository to a registry rmi Remove one or more images search Search the Docker Hub for images tag Tag an image into a repository save Save one or more images to a tar archive history 顯示某鏡像的歷史 inspect 獲取鏡像的詳細信息 ## 容器及其中應用的生命週期操做: create 建立一個容器 kill Kill one or more running containers inspect Return low-level information on a container, image or task pause Pause all processes within one or more containers ps List containers rm 刪除一個或者多個容器 rename Rename a container restart Restart a container run 建立並啓動一個容器 start 啓動一個處於中止狀態的容器 stats 顯示容器實時的資源消耗信息 stop 中止一個處於運行狀態的容器 top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers wait Block until a container stops, then print its exit code attach Attach to a running container exec Run a command in a running container port List port mappings or a specific mapping for the container logs 獲取容器的日誌 ## 容器文件系統操做: cp Copy files/folders between a container and the local filesystem diff Inspect changes on a container's filesystem
    export    Export a container's filesystem as a tar archive import Import the contents from a tarball to create a filesystem image Docker registry 操做: login Log in to a Docker registry. logout Log out from a Docker registry. ## Volume操做: volume Manage Docker volumes ## 網絡操做: network Manage Docker networks ## Swarm 相關操做: swarm Manage Docker Swarm service Manage Docker services node Manage Docker Swarm nodes ## 系統操做: version Show the Docker version information events 持續返回docker 事件 info 顯示Docker 主機系統範圍內的信息 複製代碼
# 查看運行中的容器
docker ps
# 查看全部容器
docker ps -a
# 退出容器
按Ctrl+D 便可退出當前容器【但退出後會中止容器】
# 退出不中止容器:
組合鍵:Ctrl+P+Q
# 啓動容器
docker start 容器名或ID
# 進入容器
docker attach 容器名或ID
# 中止容器
docker stop 容器名或ID
# 暫停容器
docker pause 容器名或ID
#繼續容器
docker unpause 容器名或ID
# 刪除容器
docker rm 容器名或ID
# 刪除所有容器--慎用
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
#保存容器,生成鏡像
docker commit 容器ID 鏡像名稱
#從 host 拷貝文件到 container 裏面
docker cp /home/soft centos:/webapp
複製代碼

docker run與start的區別

docker run只在第一次運行時使用,將鏡像放到容器中,之後再次啓動這個容器時,只須要使用命令docker start 便可。

docker run至關於執行了兩步操做:將鏡像放入容器中(docker create),而後將容器啓動,使之變成運行時容器(docker start)。

docker start的做用是,從新啓動已存在的鏡像。也就是說,若是使用這個命令,咱們必須事先知道這個容器ID,或者這個容器的名字,咱們可使用docker ps找到這個容器的信息。

由於容器的ID隨機碼,而容器的名字又是看似無心義的命名,咱們可使用命令:

docker rename jovial_cori  centos
複製代碼

給這個容器命名。這樣之後,咱們再次啓動或中止容器時,就能夠直接使用這個名字:

docker [stop] [start]  new_name
複製代碼

而要顯示出全部容器,包括沒有啓動的,可使用命令:

docker ps -a
複製代碼

Docker的配置

更改存儲目錄:

#複製docker存儲目錄
rsync -aXS /var/lib/docker/. /home/docker

#更改 docker 存儲文件目錄
ln -s  /home/docker  /var/lib/docker
複製代碼

查看啓動容器的具體信息:

docker inspect <container_id>
複製代碼

要獲取全部容器名稱及其IP地址只需一個命令:

docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
複製代碼

Docker鏡像加速器

註冊一個阿里雲賬號:

dev.aliyun.com/search.html

阿里雲會自動爲用戶分配一個鏡像加速器的地址,登陸後進入」管理中心」 —> 」加速器」,裏面有分配給你的鏡像加速器的地址以及各個環境的使用說明。

鏡像加速器地址示例:https://xxxxx.mirror.aliyuncs.com

如何配置鏡像加速器

針對Docker客戶端版本大於1.10.0的用戶,能夠經過修改daemon配置文件/etc/docker/daemon.json來使用加速器**:

{
    "registry-mirrors": ["<your accelerate address>"]
}
複製代碼

重啓Docker Daemon

sudo systemctl daemon-reload
sudo systemctl restart docker
複製代碼

歡迎關注技術公衆號: 零壹技術棧

零壹技術棧

本賬號將持續分享後端技術乾貨,包括虛擬機基礎,多線程編程,高性能框架,異步、緩存和消息中間件,分佈式和微服務,架構學習和進階等學習資料和文章。

相關文章
相關標籤/搜索