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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

docker安装与学习

發布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker安装与学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

安裝Docker

系統環境:macOS Catalina 10.15.7

通過brew安裝docker

brew install --cask --appdir=/Applications docker

直接brew install docker裝上的好像不是,好像是當成了formula了。如下圖

brew cask install docker直接提示命令不對,好像brew cask的安裝不是這個命令格式(brew cask install xxx)了

安裝好后運行上圖中的命令:

docker run -d -p 80:80 docker/getting-started

學習Docker

下面對下面這個命令進行解析:

docker run ubuntu:15.10 /bin/echo "Hello world"
  • docker:?Docker 的二進制執行文件。

  • run:?與前面的 docker 組合來運行一個容器。

  • ubuntu:15.10?指定要運行的鏡像,Docker 首先從本地主機上查找鏡像是否存在,如果不存在,Docker 就會從鏡像倉庫?Docker Hub?下載公共鏡像。

  • /bin/echo "Hello world":?在啟動的容器里執行的命令

以上命令完整的意思可以解釋為:Docker 以 ubuntu15.10 鏡像創建一個新容器,然后在容器里執行 bin/echo "Hello world",然后輸出結果。

教學操作:

命令行運行:

docker run -d -p 80:80 docker/getting-started

然后?

本地發現沒有這個image,就去download了。

可以使用 docker images查看所有鏡像

發現已經下載好了docker/getting-started

然后創建一個項目,我這里是用官網的app示例。(應該是一個node.js項目)

項目中本身是沒有Dockerfile的,然后我這邊是想創建一個,部署好這個項目的新image。于是要新建Dockerfile文件

然后使用docker build命令

docker build -t getting-started .

?該命令使用Dockerfile來構建新的容器映像。

如果只是創建了Dockerfile但是沒有編輯的話,運行命令之后會報錯:

編輯好Dockerfile之后運行,結果如下:

該過程下載了許多“layers”。這是因為我們指示構建者要從node:12-alpine鏡像開始。但是,由于我們的計算機上沒有該image,因此需要下載該image。

下載映像后,我們將其復制到應用程序中并用于yarn安裝應用程序的依賴項。該CMD指令指定從該映像啟動容器時要運行的默認命令。 最后,該-t參數是為了標記了該image。可以簡單地將其視為最終image易于理解的名稱(不知道image是不是也有個image id?反正container是有id的)。由于我們將圖像命名為getting-started,因此在運行容器時可以引用該image。最后的' . '是docker build命令告訴Docker,Dockerfile的所在目錄。

Dockerfile不是配置文件,他就是一個執行順序,使用docker build的時候,會一行一行的執行Dockerfile的,這一點從上圖紫色字的過程也可以看出來。

使用命令:

bytedance$ docker run -dp 3000:3000 getting-started

我們以-d“分離”模式(在后臺)基于getting-started運行新容器(注意不是docker/getting-started),并在主機的端口3000和容器的端口3000之間創建一個映射。如果沒有端口映射,我們將無法訪問application。

這行命令返回新建的container的id。

映射之后我們就可以輸入http://localhost:3000,來訪問當前application了。

docker ps可以得到當前容器。

此時的docker是長這個樣子的:

??

分別進入這兩個容器可以發現

docker run是創建一個新容器并啟動

docker run背后的工作:

Docker在后臺運行的標準操作包括:

檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載啟動;
利用鏡像創建并啟動一個容器;
分配一個文件系統,并在只讀的鏡像層外面掛載一層可讀寫層;
從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去;
從地址池配置一個ip地址給容器;
執行用戶指定的啟動命令;
執行完畢后容器被終止。
?

看下面這個例子:

其中,-i選項告訴Docker保持標準輸入輸出流對容器開放,-t選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上。

將啟動命令設置為“啟動一直運行的子進程”,也就是 /bin/bash

執行完這條命令后,創建并啟動容器之后,執行/bin/bash,會啟動一個子進程,此時父進程(也就是容器的主進程sh)會進入sleep狀態,由于sleep狀態不是終止狀態,所以容器會繼續運行。

為什么在容器中輸入exit或者執行ctrl D后,容器將會終止呢,這是因為exit會退出(結束)當前進程,也就是/bin/bash,由于子進程結束,sh主進程恢復到運行態,然而由于沒有命令需要繼續執行,所以sh主進程結,因此容器終止。

另外一點:

啟動容器之后,我們進入容器內部并在終端進行與容器交互。我們可以根據左側的命令提示符判斷自己是否在容器內部。例如上面的例子,當左側的命令提示符為root@localhost或者電腦主機名(見下圖的補充)時,表示我們在容器外部,而命令提示符為:root@3918f5e29f5b/時,表示我們在容器內部,且容器的ID是3918f5e29f5b。我們可以通過exit退出當前的容器。

?

使用docker start命令,使用容器名或者容器id啟動一個已經終止的容器。

使用docker stop命令,用來終止一個正在運行的容器。

查看容器信息

Docker中有這樣一條命令docker ps,可以查看容器的信息,包括容器ID,基礎鏡像,啟動命令,創建時間,當前狀態,端口號,容器名字。

如果執行docker ps,將會顯示所有運行中的容器

如果docker ps –a命令,可以查看Docker環境中所有的容器,包括已經停止的容器

其他內容:

后續我們又用brew來配了一下docker內部命令的自動補全:

注意因為我們的brew是裝在當前用戶下的而不是root下的,所以導致當時bash_completion.d也建在了usr/local下?(我也不確定是不是這個原因,但確實下面這個命令不能用)

不能用下面這個命令:(因為沒有這個目錄/etc/bash_completion.d/)

sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

運行會報錯:

而應該用下面這種命令:

sudo curl -L https://raw.githubusercontent.com/docker/compose/1.27.4/contrib/completion/bash/docker-compose -o /usr/local/etc/bash_completion.d/docker-compose

就可以成功了

其實也就是可執行文件的目錄讓他在/usr/local/etc下

/usr/local/etc/bash_completion.d/

進入bash_completion目錄看一下:

這應該是brew搞的吧?每一個從brew中下載后的,他都會加到這里面來?不然怎么沒有git命令。

但是docker,brew,ssh啥的都在里面。這其中的每一個應該都是一個.sh文件?(要知道每一個.sh文件,在終端直接輸入他的路徑,都是可以直接運行的,比如

當然,.sh文件中第一行要加上

#!/bin/bash

參考鏈接:

https://blog.csdn.net/wenyichuan/article/details/106944276

總結

以上是生活随笔為你收集整理的docker安装与学习的全部內容,希望文章能夠幫你解決所遇到的問題。

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