天天看點

Docker鏡像管理快速入門

簡介

介紹如何使用Docker建構鏡像,

并通過阿裡雲鏡像服務分發到ECS伺服器

,運作該鏡像。

背景知識

容器技術

容器是一個允許我們在資源隔離的過程中,運作應用程式和其依賴項的 、輕量的 、作業系統級别的虛拟化技術, 運作應用程式所需的所有必要元件都打包為單個鏡像,這個鏡像是可以重複使用的。當鏡像運作時,它是運作在獨立的環境中,并不會和其他的應用共享主機作業系統的記憶體、CPU或磁盤。這保證了容器内的程序不會影響到容器外的任何程序。

鏡像倉庫(Registry)

Docker的鏡像存儲中心通常被稱為Registry。當您需要擷取自己私有鏡像時,首先需要登入Registry,然後拉取鏡像。修改過鏡像之後,您可以再次将鏡像推送回Registry中去。或者在本地通過Docker鏡像建構的功能生成鏡像,再推送到Registry中。

容器鏡像服務ACR(Alibaba Cloud Container Registry)

阿裡雲容器鏡像服務ACR預設執行個體版提供基礎的容器鏡像服務,包括安全的應用鏡像托管能力、精确的鏡像安全掃描功能、穩定的國内外鏡像建構服務以及便捷的鏡像授權功能,進而友善使用者進行鏡像全生命周期管理。

搭建Docker服務

Docker 是一個開源的容器引擎,用于建立、管理和編排容器,可以輕松為任何應用建立一個輕量級、可移植、自給自足的容器。本步驟将在ECS上部署一個Docker服務,并配置DockerHub的鏡像加速器。

  1. 安裝Docker的依賴庫。
yum install -y yum-utils device-mapper-persistent-data lvm2
           
  1. 添加Docker CE的軟體源資訊。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
           
  1. 安裝Docker CE。
yum makecache fast &&
yum -y install docker-ce           
  1. 啟動Docker服務。
systemctl start docker
           
  1. 配置DockerHub鏡像加速器。
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF           
  1. 重新開機Docker服務。
systemctl restart docker
           

準備應用代碼和Dockerfile

本步驟操作将在工作空間下建立一個基于Golang的HelloWorld代碼檔案和一個用來建構運作Hello代碼所需環境鏡像的Dockerfile檔案。

  1. 建立工作空間。
mkdir -p /tmp/demo && cd /tmp/demo
           
  1. 在工作空間下建立HelloWorld代碼檔案,用來在容器環境中監聽HTTP服務,輸出HelloWorld字元串。
cat > /tmp/demo/main.go << EOF
package main

import (
        "fmt"
        "net/http"
)

func main() {
        http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
                fmt.Fprintf(w, "Hello! World\n")
        })

        fmt.Println("start to serve...")
        http.ListenAndServe(":80", nil)
}
EOF           
  1. 在工作空間下建立Dockerfile檔案。
cat > /tmp/demo/Dockerfile << EOF
FROM golang:1.12-alpine

# change current working dir
WORKDIR /go/src/app

# copy main.go into /go/src/app
COPY . .

# go build and install the app
RUN go install -v ./...

# run the app by default
CMD ["app"]
EOF           

本地建構鏡像并運作鏡像

本步驟将指導您使用Docker基本指令建構和運作鏡

  1. 使用docker build指令建構鏡像。
docker build . -t demo:v1           

指令運作結果如下所示:

Docker鏡像管理快速入門

說明:

參數.表示指定目前路徑作為建構上下文,即Dockerfile所在的本地路徑。

參數-t demo:v1指定鏡像名稱和标簽。

  1. 使用docker run指令運作鏡像。
docker run -d -p 8000:80 demo:v1
           
Docker鏡像管理快速入門

參數-d設定容器運作模式為背景運作。

參數-p 8000:80将容器内部使用的網絡端口映射到主機上,其中8000為主機端口,80為容器内部使用端口。

  1. 使用curl工具通路容器中的HelloWorld服務。
curl localhost:8000
           
Docker鏡像管理快速入門

4.使用docker rm指令删除容器。

docker rm -f $(docker ps -a | grep "demo:v1" | awk '{print $1}')           
Docker鏡像管理快速入門

建立遠端鏡像倉庫

本步驟操作将指導您使用自己的阿裡雲賬号開通容器鏡像服務并建立鏡像倉庫。阿裡雲容器鏡像服務預設執行個體版可免費使用,其使用限制請參見容器鏡像服務計費說明。

1.使用您的阿裡雲主賬号登入

容器鏡像服務控制台

2.【前往開通】》單擊【設定Registry登入密碼】》設定阿裡雲Docker Registry登入密碼,然後單擊 【确定】 。

3.在容器鏡像服務控制台,依次單擊 【預設執行個體】 > 【命名空間】 > 【建立命名空間】,在 【建立命名空間】 彈框中填寫指令空間名稱,然後單擊 【确定】 。

Docker鏡像管理快速入門
  1. 單擊 【本地倉庫】 > 【建立鏡像倉庫】 。在鏡像倉庫清單,選擇上一步建立的鏡像倉庫,單擊 【管理】 ,檢視鏡像倉庫詳情。

推送鏡像

本步驟操作将本地鏡像推送到遠端倉庫中,并運作遠端倉庫中的指定版本鏡像。請将本步驟指令中涉及的遠端鏡像位址替換為步驟六中建立的鏡像倉庫的公網位址。

1.執行以下指令登入到阿裡雲Docker Registry。

docker login --username="使用者名" registry.cn-hangzhou.aliyuncs.com
           

說明: 請将下面指令中的使用者名替換為您的阿裡雲賬号全名,回車後輸入遠端鏡像倉庫密碼,密碼為步驟六開通服務時設定的密碼。

請登入阿裡雲使用者中心檢視您的主賬号使用者名稱。

Docker鏡像管理快速入門
Docker鏡像管理快速入門

2.标記本地鏡像,将其歸入遠端倉庫。

docker tag demo:v1 registry.cn-hangzhou.aliyuncs.com/space_test/demo:v1
           

3.将本地鏡像推送到遠端倉庫。

docker push registry.cn-hangzhou.aliyuncs.com/space_test/demo:v1
           
Docker鏡像管理快速入門
  1. 拉取指定版本的遠端鏡像。
docker pull registry.cn-hangzhou.aliyuncs.com/space_test/demo:v1
           
Docker鏡像管理快速入門
  1. 運作拉取的遠端鏡像。
docker run -d -p 8000:80 registry.cn-hangzhou.aliyuncs.com/space_test/demo:v1
           
Docker鏡像管理快速入門
  1. 通路HelloWorld服務。
curl localhost:8000
           
Docker鏡像管理快速入門
上一篇: ECS使用感受
下一篇: ecs使用體驗

繼續閱讀