主頁 >  其他 > Docker 快速入門

Docker 快速入門

2021-01-31 14:19:45 其他

原文地址:梁桂釗的博客

博客地址:blog.720ui.com

一、歡迎來到 Docker 世界

1. Docker 與虛擬化

在沒有 Docker 的時代,我們會使用硬體虛擬化(虛擬機)以提供隔離,這里,虛擬機通過在作業系統上建立了一個中間虛擬軟體層 Hypervisor ,并利用物理機器的資源虛擬出多個虛擬硬體環境來共享宿主機的資源,其中的應用運行在虛擬機內核上,但是,虛擬機對硬體的利用率存在瓶頸,因為虛擬機很難根據當前業務量動態調整其占用的硬體資源,因此容器化技術得以流行,其中,Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器上,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdab48514e3?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

Docker 容器不使用硬體虛擬化,它的守護行程是宿主機上的一個行程,換句話說,應用直接運行在宿主機內核上,因為容器中運行的程式和計算機的作業系統之間沒有額外的中間層,沒有資源被冗余軟體的運行或虛擬硬體的模擬而浪費掉,

Docker 的優勢不僅如此,我們來比較一番,

Untitled

2. 鏡像、容器和倉庫

Docker 由鏡像(Image)、容器(Container)、倉庫(Repository) 三部分組成,

Docker 的鏡像可以簡單的類比為電腦裝系統用的系統盤,包括作業系統,以及必要的軟體,例如,一個鏡像可以包含一個完整的 centos 作業系統環境,并安裝了 Nginx 和 Tomcat 服務器,注意的是,鏡像是只讀的,這一點也很好理解,就像我們刻錄的系統盤其實也是可讀的,我們可以使用 docker images 來查看本地鏡像串列,

Docker 的容器可以簡單理解為提供了系統硬體環境,它是真正跑專案程式、消耗機器資源、提供服務的東西,例如,我們可以暫時把容器看作一個 Linux 的電腦,它可以直接運行,那么,容器是基于鏡像啟動的,并且每個容器都是相互隔離的,注意的是,容器在啟動的時候基于鏡像創建一層可寫層作為最上層,我們可以使用 docker ps -a 查看本地運行過的容器,

Docker 的倉庫用于存放鏡像,這一點,和 Git 非常類似,我們可以從中心倉庫下載鏡像,也可以從自建倉庫下載,同時,我們可以把制作好的鏡像 commit 到本地,然后 push 到遠程倉庫,倉庫分為公開倉庫和私有倉庫,最大的公開倉庫是官方倉庫 Dock Hub,國內的公開倉庫也有很多選擇,例如阿里云等,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdab4a554d0?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

3. Docker 促使開發流程變更

筆者認為,Docker 對開發流程的影響在于使環境標準化,例如,原來我們存在三個環境:開發(日常)環境、測驗環境、生產環境,這里,我們對于每個環境都需要部署相同的軟體、腳本和運行程式,如圖所示,事實上,對于啟動腳本內容都是一致的,但是沒有統一維護,經常會出問題,此外,對于運行程式而言,如果所依賴的底層運行環境不一致,也會造成困擾和例外,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdab4959cfc?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

現在,我們通過引入 Docker 之后,我們只需要維護一個 Docker 鏡像,換句話說,多套環境,一個鏡像,實作系統級別的一次構建到處運行,此時,我們把運行腳本標準化了,把底層軟體鏡像化了,然后對于相同的將要部署的程式實行標準化部署,因此,Docker 為我們提供了一個標準化的運維模式,并固化運維步驟和流程,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdab5b3597f?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

通過這個流程的改進,我們更容易實作 DevOps 的目標,因為我們的鏡像生成后可以跑在任何系統,并快速部署,此外,使用 Docker 的很大動力是基于 Docker 實作彈性調度,以更充分地利用機器資源,節省成本,

哈哈,筆者在使用 Docker 程序中,還發現了一些很棒的收益點,例如我們發布回滾的時候只需要切換 TAG 并重啟即可,還比如,我們對環境升級,也只需要升級基礎鏡像,那么新構建的應用鏡像,自動會參考新的版本,(歡迎補充~~~)

二、從搭建 Web 服務器開始說起

1. 環境先行,安裝 Docker

現在,我們需要安裝以下步驟安裝 Docker,

  • 注冊帳號:在 hub.docker.com/ 注冊賬號,
  • 下載安裝

官方下載地址:(Mac):download.docker.com/mac/stable/… 阿里云下載地址(Mac):mirrors.aliyun.com/docker-tool… 阿里云下載地址(Windows): mirrors.aliyun.com/docker-tool…

  • 安裝指南 這里,雙擊剛剛下載的 Doker.dmg 安裝包進行安裝,

    https://user-gold-cdn.xitu.io/2019/4/9/16a02cdab8c393eb?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

安裝完成后啟動, Mac 頂部導航欄出現了一個圖示,通過選單可以進行 docker 配置和退出等操作,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdabcd61dd8?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

官方指南:docs.docker.com/install/ 阿里云指南(Linux):yq.aliyun.com/articles/11…

  • 設定加速服務

市面上有很多加速服務的提供商,如:DaoCloud,阿里云等,這里,筆者使用的是阿里云,(注意的是,筆者作業系統是 Mac,其他操作系列參見阿里云操作檔案)

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdb64ac1921?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

右鍵點擊桌面頂欄的 docker 圖示,選擇 Preferences ,在 Daemon 標簽(Docker 17.03 之前版本為 Advanced 標簽)下的 Registry mirrors 串列中將https://xxx.mirror.aliyuncs.com 加到"registry-mirrors"的陣列里,點擊 Apply & Restart 按鈕,等待 Docker 重啟并應用配置的鏡像加速器,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdb68211a09?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

阿里云操作檔案:cr.console.aliyun.com/cn-hangzhou…

  • 查看版本

至此,我們已經安裝完成了,這里,我們來查看版本,

docker version
復制代碼

查看結果,如下所示,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdba08c75e1?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

2. 實干派,從搭建 Web 服務器開始

我們作為實干派,那么先來搭建一個 Web 服務器吧,然后,筆者帶你慢慢理解這個程序中,做了什么事情,首先,我們需要拉取 centos 鏡像,

docker run -p 80 --name web -i -t centos /bin/bash
復制代碼

緊接著,我們安裝 nginx 服務器,執行以下命令:

rpm -ivh <http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm>
復制代碼

安裝完 Nginx 源后,就可以正式安裝 Nginx 了,

yum install -y nginx
復制代碼

至此,我們再輸入 whereis nginx 命令就可以看到安裝的路徑了,最后,我們還需要將 Nginx 跑起來,

nginx
復制代碼

現在,我們執行 ctrl + P + Q 切換到后臺,然后,通過 docker ps -a 來查看隨機分配的埠,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdba0915005?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

這里,筆者分配的埠是 32769 ,那么通過瀏覽器訪問 http://127.0.0.1:32769 即可,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdba5b85ed0?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

大功告成,哈哈哈~

3. 復盤理解全程序

現在,我們來理解下這個流程,首先,我們輸入 docker run -p 80 --name web -i -t centos /bin/bash 命令會運行互動式容器,其中 -i 選項告訴 Docker 容器保持標準輸入流對容器開放,即使容器沒有終端連接,另一個 -t 選項告訴 Docker 為容器分配一個虛擬終端,以便于我們接下來安裝 Nginx 服務器,(筆者備注:Docker 還支持輸入 -d 選項告訴 Docker 在后臺運行容器的守護行程)

Docker 會為我們創建的每一個容器自動生成一個隨機的名稱,事實上,這種方式雖然便捷,但是可讀性很差,并且對我們后期維護的理解成本會比較大,因此,我們通過 --name web 選項告訴 Docker 創建一個名稱是 web 的容器,此外,我們通過 -p 80 告訴 Docker 開放 80 埠,那么, Nginx 才可以對外通過訪問和服務,但是,我們的宿主機器會自動做埠映射,比如上面分配的埠是 32769 ,注意的是,如果關倍訓者重啟,這個埠就變了,那么怎么解決固定埠的問題,筆者會在后面詳細剖析和帶你實戰,

這里,還有一個非常重要的知識點 docker run ,Docker 通過 run 命令來啟動一個新容器,Docker 首先在本機中尋找該鏡像,如果沒有安裝,Docker 在 Docker Hub 上查找該鏡像并下載安裝到本機,最后 Docker 創建一個新的容器并啟動該程式,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdba66ba246?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

但是,當第二次執行 docker run 時,因為 Docker 在本機中已經安裝該鏡像,所以 Docker 會直接創建一個新的容器并啟動該程式,

[data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="579" height="360"></svg>](data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="579" height="360"></svg>)

注意的是,docker run 每次使用都會創建一個新的容器,因此,我們以后再次啟動這個容器時,只需要使用命令 docker start 即可,這里, docker start 的作用在用重新啟動已存在的鏡像,而docker run 包含將鏡像放入容器中 docker create ,然后將容器啟動 docker start ,如圖所示,

[data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="929" height="282"></svg>](data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="929" height="282"></svg>)

現在,我們可以在上面的案例的基礎上,通過 exit 命令關閉 Docker 容器,當然,如果我們運行的是后臺的守護行程,我們也可以通過 docker stop web 來停止,注意的是,docker stopdocker kill 略有不同,docker stop 發送 SIGTERM 信號,而 docker kill 發送SIGKILL 信號,然后,我們使用 docker start 重啟它,

docker start web
復制代碼

Docker 容器重啟后會沿用 docker run 命令指定的引數來運行,但是,此時它還是后臺運行的,我們必須通過 docker attach 命令切換到運行互動式容器,

docker attach web
復制代碼

4. 不止如此,還有更多命令

Docker 提供了非常豐富的命令,所謂一圖勝千言,我們可以從下面的圖片了解到很多資訊和它們之前的用途,(可以直接跳過閱讀,建議收藏,便于擴展閱讀)

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdbf14142a0?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

如果希望獲取更多資訊,可以閱讀官方使用檔案,

Untitled

官方閱讀鏈接:docs.docker.com/engine/refe…

5. 進階:倉庫與軟體安裝的簡化

還記得筆者在文章開頭介紹的「鏡像、容器和倉庫」嗎?Docker 的倉庫用于存放鏡像,我們可以從中心倉庫下載鏡像,也可以從自建倉庫下載,同時,我們可以把制作好的鏡像從本地推送到遠程倉庫,

首先,筆者先引入一個知識點:Docker 的鏡像就是它的檔案系統,一個鏡像可以放在另外一個鏡像的上層,那么位于下層的就是它的父鏡像,所以,Docker 會存在很多鏡像層,每個鏡像層都是只讀的,并且不會改變,當我們創建一個新的容器時,Docker 會構建出一個鏡像堆疊,并在堆疊的最頂層添加一個讀寫層,如圖所示,

[data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="610" height="862"></svg>](data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="610" height="862"></svg>)

現在,我們可以通過 docker images 命令查看本地的鏡像,

docker images
復制代碼

查詢結果,如圖所示,

[data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="641" height="71"></svg>](data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="641" height="71"></svg>)

這里,對幾個名詞解釋一下含義,

  • REPOSITORY:倉庫名稱,
  • TAG: 鏡像標簽,其中 lastest 表示最新版本,注意的是,一個鏡像可以有多個標簽,那么我們就可以通過標簽來管理有用的版本和功能標簽,
  • IMAGE ID :鏡像唯一ID,
  • CREATED :創建時間,
  • SIZE :鏡像大小,

那么,如果第一次我們通過 docker pull centos:latest 拉取鏡像,那么當我們執行 docker run -p 80 --name web -i -t centos /bin/bash 時,它就不會再去遠程獲取了,因為本機中已經安裝該鏡像,所以 Docker 會直接創建一個新的容器并啟動該程式,

事實上,官方已經提供了安裝好 Nginx 的鏡像,我們可以直接使用,現在,我們通過拉取鏡像的方式重新構建一個 Web 服務器,首先,我們通過 docker search 來查找鏡像,我們獲取到 Nginx 的鏡像清單,

docker search nginx
復制代碼

補充一下,我們也可以通過訪問 Docker Hub (hub.docker.com/)搜索倉庫,那么 star 數越多,說明它越靠譜,可以放心使用,

[data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1280" height="575"></svg>](data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1280" height="575"></svg>)

現在,我們通過 docker pull nginx 拉取最新的 Nginx 的鏡像,當然,我們也可以通過 docker pull nginx:latest 來操作,

docker pull nginx
復制代碼

然后,我們創建并運行一個容器,與前面不同的是,我們通過 -d 選項告訴 Docker 在后臺運行容器的守護行程,并且,通過 8080:80 告訴 Docker 8080 埠是對外開放的埠,80 埠對外開放的埠映射到容器里的埠號,

docker run -p 8080:80 -d --name nginx nginx
復制代碼

我們再通過 docker ps -a 來查看,發現容器已經后臺運行了,并且后臺執行了 nginx 命令,并對外開放 8080 埠,

[data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="958" height="80"></svg>](data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="958" height="80"></svg>)

因此,通過瀏覽器訪問 http://127.0.0.1:8080 即可,

[data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="747" height="214"></svg>](data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="747" height="214"></svg>)

6. 其他選擇,使用替代注冊服務器

Docker Hub 不是軟體的唯一來源,我們也可以切換到國內的其他替代注冊服務器,例如阿里云,我們可以登錄 cr.console.aliyun.com 搜索,并拉取公開的鏡像,

[data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1280" height="559"></svg>](data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1280" height="559"></svg>)

[data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1280" height="579"></svg>](data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1280" height="579"></svg>)

現在,我們輸入 docker pull 命令進行拉取,

docker pull registry.cn-hangzhou.aliyuncs.com/qp_oraclejava/orackejava:8u172_DCEVM_HOTSWAPAGEN_JCE
復制代碼

這里,筆者繼續補充一個知識點:注冊服務器的地址,事實上,注冊服務器的地址是有一套規范的,完整格式是:[倉庫主機/][用戶名/]容器短名[:標簽],這里,倉庫主機是 registry.cn-hangzhou.aliyuncs.com,用戶名是 qp_oraclejava,容器短名是 orackejava,標簽名是 8u172_DCEVM_HOTSWAPAGEN_JCE,事實上,我們上面通過 docker pull centos:latest 拉取鏡像,相當于 docker pull registry.hub.docker.com/centos:latest

三、構建我的鏡像

通過上面的學習,筆者相信你已經對 Docker 使用有了一個大致的了解,就好比我們通過 VMware 安裝了一個系統,并讓它跑了起來,那么我們就可以在這個 Linux 系統(CentOS 或者 Ubuntu ) 上面作業我們想要的任何事情,事實上,我們還會經常把我們安裝好的 VMware 系統進行快照備份并實作克隆來滿足我們下次快速的復制,這里,Docker 也可以構建定制內容的 Docker 鏡像,例如上面我們使用官方提供的安裝好 Nginx 的 Docker 鏡像,注意的是,我們通過基于已有的基礎鏡像,在上面添加鏡像層的方式構建新鏡像而已,

總結一下,Docker 提供自定義鏡像的能力,它可以讓我們保存對基礎鏡像的修改,并再次使用,那么,我們就可以把作業系統、運行環境、腳本和程式打包在一起,并在宿主機上對外提供服務,

Docker 構建鏡像有兩種方式,一種方式是使用 docker commit 命令,另外一種方式使用 docker build 命令和 Dockerfile 檔案,其中,不推薦使用 docker commit 命令進行構建,因為它沒有使得整個流程標準化,因此,在企業的中更加推薦使用 docker build 命令和 Dockerfile 檔案來構建我們的鏡像,我們使用Dockerfile 檔案可以讓構建鏡像更具備可重復性,同時保證啟動腳本和運行程式的標準化,

1. 構建第一個 Dockerfile 檔案

現在,我們繼續實戰,這里,我們把一開始搭建的 Web 服務器構建一個鏡像,首先,我們需要創建一個空的 Dokcerfile 檔案,

mkdir dockerfile_test
cd dockerfile_test/
touch Dockerfile
nano Dockerfile
復制代碼

緊接著,我們需要撰寫一個 Dockerfile 檔案,代碼清單如下

FROM centos:7
MAINTAINER LiangGzone "lianggzone@163.com"
RUN rpm -ivh <http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm>
RUN yum install -y nginx
EXPOSE 80
復制代碼

最后,我們通過 docker build 命令進行構建,

docker build -t="lianggzone/nginx_demo:v1" .
復制代碼

現在, 我們來通過 docker images 看下我們的新鏡像吧,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdc42a0f63c?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

2. 理解 Dockerfile 全程序

哇,我們通過撰寫一個 Dockerfile 檔案順利構建了一個新的鏡像,這個程序簡單得讓人無法相信,現在,讓我們來理解一下這個全程序吧,首先, FROM centos:7 是 Dockerfile 必須要的第一步,它會從一個已經存在的鏡像運行一個容器,換句話說,Docker 需要依賴于一個基礎鏡像進行構建,這里,我們指定 centos 作為基礎鏡像,它的版本是 7 (CentOS 7),然后,我們通過 MAINTAINER LiangGzone "lianggzone@163.com" 指定該鏡像的作者是 LiangGzone,郵箱是 lianggzone@163.com,這有助于告訴使用者它的作者和聯系方式,接著,我們執行兩個 RUN 指令進行 Nginx 的下載安裝,最后通過 EXPOSE 80 暴露 Dokcer 容器的 80 埠,注意的是,Docker 的執行順序是從上而下執行的,所以我們要明確整個流程的執行順序,除此之外,Docker 在執行每個指令之后都會創建一個新的鏡像層并且進行提交,

我們使用 docker build 命令進行構建,指定 - t 告訴 Docker 鏡像的名稱和版本,注意的是,如果沒有指定任何標簽,Docker 將會自動為鏡像設定一個 lastest 標簽,還有一點,我們最后還有一個 . 是為了讓 Docker 到當前本地目錄去尋找 Dockerfile 檔案,注意的是,Docker 會在每一步構建都會將結果提交為鏡像,然后將之前的鏡像層看作快取,因此我們重新構建類似的鏡像層時會直接復用之前的鏡像,如果我們需要跳過,可以使用 --no-cache 選項告訴 Docker 不進行快取,

3. Dockerfile 指令詳解

Dockerfile 提供了非常多的指令,筆者這里特別整理了一份清單,建議收藏查看,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdc42dd43f0?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

官方地址:docs.docker.com/engine/refe…

指令辨別一:RUN、CMD、ENTRYPOINT

RUNCMDENTRYPOINT 三個指令的用途非常相識,不同在于,RUN 指令是在容器被構建時運行的命令,而CMDENTRYPOINT 是啟動容器時執行 shell 命令,而 RUN 會被 docker run 命令覆寫,但是 ENTRYPOINT 不會被覆寫,事實上,docker run 命令指定的任何引數都會被當作引數再次傳遞給 ENTRYPOINT 指令,CMDENTRYPOINT 兩個指令之間也可以一起使用,例如,我們 可以使用 ENTRYPOINT 的 exec 形式設定固定的默認命令和引數,然后使用任一形式的 CMD 來設定可能更改的其他默認值,

FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
復制代碼

指令辨別二:ADD、COPY

ADDCOPY 指令用法一樣,唯一不同的是 ADD 支持將歸檔檔案(tar, gzip, bzip2, etc)做提取和解壓操作,注意的是,COPY 指令需要復制的目錄一定要放在 Dockerfile 檔案的同級目錄下,

4. 將鏡像推送到遠程倉庫

遠程倉庫:Docker Hub

鏡像構建完畢之后,我們可以將它上傳到 Docker Hub 上面,首先,我們需要通過 docker login 保證我們已經登錄了,緊接著,我們使用 docker push 命令進行推送,

docker push lianggzone/nginx_demo:v1
復制代碼

這里,我們了解下它的使用,格式是 docker push [OPTIONS] NAME[:TAG] ,其中,筆者設定 NAME 是 lianggzone/nginx_demo,TAG 是 v1, (筆者注:推送 Docker Hub 速度很慢,耐心等待) 最后,上傳完成后訪問:hub.docker.com/u/lianggzon…/,如圖所示,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdc42cae7e8?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

遠程倉庫:阿里云

同時,我們也可以使用國內的倉庫,比如阿里云,首先,在終端中輸入訪問憑證,登錄 Registry 實體,如果你不知道是哪個,可以訪問 cr.console.aliyun.com/cn-hangzhou…,

docker login --username=帳號 registry.cn-hangzhou.aliyuncs.com
復制代碼

現在,將鏡像推送到阿里云鏡像倉庫,其中, docker tag [IMAGE_ID] registry.cn-hangzhou.aliyuncs.com/[命名空間]/[鏡像名稱]:[版本]docker push registry.cn-hangzhou.aliyuncs.com/[命名空間]/[鏡像名稱]:[版本] 命令的使用如下所示,

docker tag 794c07361565 registry.cn-hangzhou.aliyuncs.com/lianggzone/nginx_demo:v1
docker push registry.cn-hangzhou.aliyuncs.com/lianggzone/nginx_demo:v1
復制代碼

最后,上傳完成后訪問:cr.console.aliyun.com/cn-hangzhou…,如圖所示,

https://user-gold-cdn.xitu.io/2019/4/9/16a02cdc42f17db4?imageView2/0/w/1280/h/960/format/webp/ignore-error/1

5. Dockerfile 的 Github 原始碼地址

這里,附上我整理的 Dockerfile 的倉庫,后面,筆者會陸續更新用到的一些常用檔案,歡迎 star 關注,

github.com/lianggzone/…

附:參考資料

  • 《Docker實戰》
  • 《第一本Docker書》
  • Docker 命令參考檔案
  • Dockerfile 鏡像構建參考檔案

(完,轉載請注明作者及出處,)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254908.html

標籤:其他

上一篇:基于 Docker 安裝 Jenkins

下一篇:基于cat12搞定VBM的ROI分析——vertex水平和ROI水平的雙樣本T檢驗

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more