日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker 实战教程之从入门到提高 (四)

發布時間:2023/12/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker 实战教程之从入门到提高 (四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本系列的前三篇文章,我們學習了如何在 Ubuntu 操作系統安裝 Docker,并且通過實戰練習,了解了 Docker 和宿主機操作系統文件目錄互相隔離的實現原理,以及 Docker Volume 的工作原理。通過動手對 Nginx Docker 鏡像進行修改,達到自定義其首頁顯示的目的。

  • Docker 實戰教程之從入門到提高 (一)
  • Docker 實戰教程之從入門到提高 (二)
  • Docker 實戰教程之從入門到提高 (三)

其中系列的第三篇文章,包含了使用 Dockerfile 基于已有的 Nginx 鏡像制作一個支持 SSL 訪問的 Nginx Docker 鏡像的步驟。

本文繼續我們的 Docker 學習之路。

練習1:從頭基于空鏡像 scratch 創建一個新的 Docker 鏡像

我們在使用 Dockerfile 構建 docker 鏡像時,一種方式是使用官方預先配置好的容器鏡像。優點是我們不用從頭開始構建,節省了很多工作量,但付出的代價是需要下載很大的鏡像包。
比如我機器上 docker images 返回的這些基于 nginx 的鏡像,每個都超過了 100MB,而一個簡單的 Ubuntu 的容器超過了 200MB,如果安裝了相關的軟件,尺寸會更大。

如果我們的需求是在構建一個符合我們實際業務需求的 Docker 鏡像的前提下,確保鏡像尺寸盡可能的小,應該怎么做呢?

思路是使用空鏡像 scratch.

新建一個文件夾,用 wget 下載 rootfs.tar.xz 壓縮包。

wget -O rootfs.tar.xz https://github.com/debuerreotype/docker-debian-artifacts/raw/b024a792c752a5c6ccc422152ab0fd7197ae8860/jessie/rootfs.tar.xz

這個將近 30MB的壓縮包是個什么東東?
解壓之后看內容就知道了,包含了操作系統大部分常用命令。

wget -O nginx.conf https://github.diablo.corp/raw/slvi/docker-k8s-training/master/docker/res/nginx.conf

新建一個 dockerfile 文件,將下列內容粘貼進去:

FROM scratch# set the environment to honour SAP's proxy servers ENV http_proxy http://sap.corp:8080 ENV https_proxy http://sap.corp:8080 ENV no_proxy .sap.corp# give yourself some credit LABEL maintainer="Jerry Wang"# add and unpack an archive that contains a Debian root filesystem ADD rootfs.tar.xz /# use the apt-get package manager to install nginx and wget RUN apt-get update && \ apt-get -y install nginx wget# use wget to download a custom website into the image RUN wget --no-check-certificate -O /usr/share/nginx/html/cheers.jpg https://github.diablo.corp/raw/slvi/docker-k8s-training/master/docker/res/cheers.jpg && \ wget --no-check-certificate -O /usr/share/nginx/html/index.html https://github.diablo.corp/raw/slvi/docker-k8s-training/master/docker/res/cheers.html# copy the custom nginx configuration into the image COPY nginx.conf /etc/nginx/nginx.conf# link nginx log files to Docker log collection facility RUN ln -sf /dev/stdout /var/log/nginx/access.log && \ ln -sf /dev/stderr /var/log/nginx/error.log# expose port 80 - the standard port for webservers EXPOSE 80# and make sure that nginx runs when a container is created CMD ["nginx", "-g", "daemon off;"]

執行命令進行鏡像的構建:

docker build -t nginx-from-scratch1.0 .

產生的日志:

最后看到鏡像成功構建的消息。

基于這個名為 nginx-from-scratch 的鏡像啟動一個新的 nginx 容器:

localhost:1083, 看到首頁,說明這個新構建的鏡像工作正常。

練習2:刪除所有正在運行和退出的 Docker 實例

經過本系列三篇文章的練習,我們本機想必已經創建了不少 Docker 實例了,是時候對它們進行一次清理了。

docker ps -a 能顯示所有 docker 實例的狀態,包含已經退出了的:

加上-q參數,只顯示container id
使用這個命令,把 docker ps -aq 產生的輸入作為輸入傳入到 docker rm 命令,達到刪除所有容器實例的效果。

docker rm $(docker ps -aq)

練習3:在一個 Docker 容器里運行指定的 web 應用

實現題目描述的這個需求有很多種辦法,作為入門,讓我們從最簡單的辦法開始。
首先使用命令 docker ps 確保當前沒有正在運行的 Docker 實例。

運行命令 docker run -it nginx:
然后我們另外開一個終端,用 docker ps 命令查看這個運行起來的容器實例,Status 的 Up 54 seconds 意思是從該實例啟動到現在已經經過了 54 秒。

使用命令進入這個容器實例:

docker exec -it bbc5d48a761c /bin/sh

進入之后看到 shell 提示符 #,我們就可以在 nginx 容器內執行一些常用命令了。

/usr/share/nginx/html 就是 nginx 服務器內存放 web 應用的位置,現在我們只要想辦法將我們的 web 應用放到這個文件夾里就可以了。

問題就是如何把這個 web 應用搞到容器內的對應文件夾里。
我使用的是通過 docker volume 實現 docker 和宿主機之間的數據共享。使用 docker stop 將原來的 docker 實例停掉,然后啟動新的實例。

假設我把 webapp 文件夾下載到 ~目錄,然后用下面的命令行將 webapp 文件夾掛接到 nginx 容器內的同名文件夾:

docker run -d -p 1081:80 -v pwd/webapp:/usr/share/nginx/html/webapp --name jerry-custom nginx



最后使用 url localhost:8081/webapp, 就能訪問到這個運行在 Docker 容器里的 web 應用了。

總結

本文首先介紹了如何基于 scratch 空鏡像來創建新的 Docker 鏡像,以此來減小最后制作出來的鏡像文件大小。接著介紹了如何用命令行刪除所有正在運行和退出的 Docker 實例。最后是一個實際的例子,如何將一個開發好的 Web 應用,在 Docker 容器里運行。

本系列前三篇文章的鏈接:

  • Docker 實戰教程之從入門到提高 (一)
  • Docker 實戰教程之從入門到提高 (二)
  • Docker 實戰教程之從入門到提高 (三)

總結

以上是生活随笔為你收集整理的Docker 实战教程之从入门到提高 (四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。