菜鳥入門Docker
說明
最近在學習docker時,發現網上很多教程都是很老的教程,導致本人在學習時遇到各種各樣的坑,爲了方便以後查看,現將學習相關筆記記錄在這裏。
本文僅爲記錄學習軌跡,如有侵權,聯繫刪除
一、什麼是Docker
在學習docker時,在網上看到一篇博文講得很好,自己總結一下就是,Docker 將應用程序與該程序的依賴,打包在一個文件裏面,改文件包括了所有打包得應用程序的所有依賴,像數據庫等;直接運行改文件,就可以讓程序跑起來,從而不用再去考慮環境問題。
(1)虛擬機和Linux容器
-
說到Docker就必須瞭解虛擬機和Linux容器,虛擬機可以實現在一種操作系統裏面運行另一種操作系統,比如在 Windows 系統裏面運行 Linux 系統等,而且不會對實際的電腦產生影響,不想用時將虛擬機相關文件刪掉即可,用戶可以通過虛擬機還原軟件的原始環境,實際上就是解決了配置環境的問題。儘管它有資源佔用多,啓動慢等缺點。
-
Linux容器是爲了解決虛擬機的確缺點而生的,Linux 發展出了另一種虛擬化技術:Linux 容器(Linux Containers,縮寫爲 LXC)。Linux 容器不是模擬一個完整的操作系統,而是對進程進行隔離。或者說,在正常進程的外面套了一個保護層。對於容器裏面的進程來說,它接觸到的各種資源都是虛擬的,從而實現與底層系統的隔離。由於容器是進程級別的,相比虛擬機有很多優勢。像啓動快、資源佔用少等
-
而Docker 就是屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。就像一開始說的,Docker 將應用程序與該程序的依賴,打包在一個文件裏面。運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器裏運行,就好像在真實的物理機上運行一樣。有了 Docker,就不用擔心環境問題
二、Docker用途
這裏引用網上某博主的部分內容,Docker 的主要用途,目前有三大類。
(1)提供一次性的環境。比如,本地測試他人的軟件、持續集成的時候提供單元測試和構建的環境。
(2)提供彈性的雲服務。因爲 Docker 容器可以隨開隨關,很適合動態擴容和縮容。
(3)組建微服務架構。通過多個容器,一臺機器可以跑多個服務,因此在本機就可以模擬出微服務架構。
三、Docker安裝
說明:由於Docker需要Linux內核的支持,所以本人在自己的電腦(window10)安裝了VMware虛擬機,在虛擬機裏面安裝了一個ubuntu系統,在這基礎上進行Docker的安裝,安裝參考了菜鳥教程,鏈接:https://www.runoob.com/docker/ubuntu-docker-install.html
(1)設置倉庫
卸載舊版本
$ sudo apt-get remove docker docker-engine docker.io containerd runc
更新 apt 包索引
$ sudo apt-get update
安裝 apt 依賴包,用於通過HTTPS來獲取倉庫
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
添加 Docker 的官方 GPG 密鑰
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通過搜索指紋的後8個字符,驗證您現在是否擁有帶有指紋的密鑰。
$ sudo apt-key fingerprint 0EBFCD88
使用以下指令設置穩定版倉庫
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
(2)安裝 Docker Engine-Community
更新 apt 包索引
$ sudo apt-get update
安裝最新版本的 Docker Engine-Community 和 containerd
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
(3)驗證安裝成功
輸入命令:docker,出現以下命令即安裝成功
四、Docker啓動與停止
(1)啓動docker
sudo service docker start
(2)停止docker
sudo service docker stop
(3)重啓docker
sudo service docker restart
五、Docker配置
(1)將用戶加入 Docker 用戶組
Docker 需要用戶具有 sudo 權限,爲了避免每次命令都輸入sudo,建議將用戶加入Docker用戶組
- 添加docker用戶組
sudo groupadd docker
- 將當前用戶加入到docker用戶組
sudo gpasswd -a ${USER} docker
- 重啓docker服務
sudo service docker restart
- 退出當前用戶重登一下
(2)配置daemon.json
本人一開始安裝完Docker後,啓動docker服務,直接拉取 image文件(注意:不是圖片,後面有講到image文件)後直接報錯,顯示超時,因爲默認網址是國外的,需要配置國內鏡像
- 進入root權限
su root
- 進入docker文件
查看改文件下只有一個key.json,新建一個daemon.json文件
查看文件夾命令:ls
新建文件夾命令:vim daemon.json
- 編輯docker.json文件
輸入以下內容:
{ "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"] }
保存退出,重啓docker服務
六、image 文件
Docker 把應用程序及其依賴,打包在 image 文件裏面。只有通過這個文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根據 image 文件生成容器的實例。同一個 image 文件,可以生成多個同時運行的容器實例。
簡單理解就是,將程序打包在image文件(也叫image倉庫)裏面,運行image文件,生成一個容器生例,容器裏面跑程序(已將mysql之類的依賴都打包在裏面了,不用去配置數據庫等環境)
也就是說,別人的程序打包在image裏面,自己直接拿過來後不用配置環境就可以直接跑(很神奇)
# 列出本機的所有 image 文件。
$ docker image ls
# 刪除 image 文件
$ docker image rm [imageName]
hello-world是自己手動下載的image倉庫
七、安裝Hello-world實例
命令行直接輸入
命令:docker image pull library/hello-world
命令解析:
docker image pull:抓取 image 文件
library:image 文件所在的組
hello-world:image 文件的名字
注意:後期需要的image文件都可以通過這樣的方式拉取,像mysql數據庫,ubuntu系統等
其中Docker 官方提供的 image 文件,都默認放在library組裏面,因此,上面的命令可以寫成下面這樣。
docker image pull hello-world
運行該實例
命令:docker container run hello-world
命令解析:
docker container run:自動抓取 image 文件
注意:如果發現本地沒有指定的 image 文件,就會從倉庫自動抓取
運行結果
注意:輸出這段提示以後,hello world就會停止運行,容器自動終止。對於那些不會自動終止的容器,必須使用docker container kill 命令手動終止。
$ docker container kill [containID]
八、容器文件
image 文件生成的容器實例,本身也是一個文件,稱爲容器文件。也就是說,一旦容器生成,就會同時存在兩個文件: image 文件和容器文件。而且關閉容器並不會刪除容器文件,只是容器停止運行而已。
# 列出本機正在運行的容器
$ docker container ls
# 列出本機所有容器,包括終止運行的容器
$ docker container ls --all
上面命令的輸出結果之中,包括容器的 ID。很多地方都需要提供這個 ID,比如上一節終止容器運行的docker container kill命令。
終止運行的容器文件,依然會佔據硬盤空間,可以使用docker container rm命令刪除。
$ docker container rm [containerID]
運行上面的命令之後,再使用docker container ls --all命令,就會發現被刪除的容器文件已經消失了。
至此,Docker基本入門結束,該博文參考了網上大多Docker教程