深入解析:docker基礎入門
docker基礎入門
- docker是一個容器化部署工具,配置各種環(huán)境變量,配置各種東西,比如麻煩的要死的tomcat、mysql等,docker把所有你配置的全部打包給生產(chǎn),直接跑就行。
前言
- 學習分布式docker必不可少,快速部署項目的首選。建議先去入門Linux后學習會非常快。如果沒有學過建議看看我的另一篇博客,適合有一定編程基礎的學生看的。
- 本文章關于docker的安裝、基本命令、兩種掛載方式。
1.安裝docker
- 1.準備好vmware和centos,準備好linux虛擬機。
- 2.安裝yum管理工具,命令:
yum install -y yum-utils # 注意:需要root權限。
- 3.添加docker軟件源,命令:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 注意:需要root權限。
- 4.安裝docker引擎,命令:
yum install -y docker-ce docker-ce-cli containerd.io
- 5.驗證docker,命令:
systemctl status docker
命令集:

- 6.在阿里云配置鏡像,在這里,根據(jù)提示復制粘貼命令即可。

2.鏡像和容器
- 鏡像:當我們利用docker安裝應用的時候,docker會自動搜索并下載應用鏡像,不需要手動解壓了,下載好就可以直接使用。
- 容器:docker在運行時會創(chuàng)建一個隔離環(huán)境,稱之為容器,各個服務之間互不影響。
- 鏡像倉庫:存儲和管理鏡像的平臺,能夠讓docker直接下載鏡像的平臺。
3.部署MySQL
- 暫時看不懂可以往后看。
- 1.命令:
docker run -d # 創(chuàng)建并運行一個容器 -d是讓容器自動后臺運行
--name mysql # 容器的名字 必須唯一
-p 3306:3306 # 設置端口映射,意思是把外部端口映射到內部實際mysql服務的端口
-e TZ=Asia/Shanghai # e是environment的縮寫,設置環(huán)境變量
-e MYSQL_ROOT_PASSWORD=123
mysql
- 2.好像阿里云的鏡像源還是會超時,作者卡了1個小時,超時是很正常的,國外的已經(jīng)限制了訪問,所以建議這樣配置/etc/docker/daemon.json:

- 配置好完成后需要重啟docker服務,
- 命令:
systemctl daemon-reload
systemctl restart docker
- 下載中:

- 下載成功后查看docker啟動的進程:
- 語法:
docker ps -a

4.常用命令
- 官方網(wǎng)站太卡了,找到一個菜鳥教程的:命令大全:命令大全
4.1 鏡像操作
4.1.1 查看本地鏡像
- 1.語法:docker images
- 2.功能:查看所有本地鏡像。


4.1.2 拉取鏡像源
- 1.語法:docker pull + 鏡像名,不寫版本號就是最新版本。
- 2.功能:從網(wǎng)上拉取一個鏡像。
- 我的已經(jīng)拉取過了:

4.1.3 打包鏡像
- 1.語法:docker save [-o] 文件名 鏡像:版本號
- 2.功能:將鏡像打包成一個壓縮包。

4.1.4 刪除鏡像
- 1.語法:docker rmi 鏡像:版本號
- 2.功能:刪除本地鏡像。
- 3.含義:rmi表示remove images 就是刪除鏡像的意思。

4.1.5 讀取鏡像
- 1.語法:docker load [-i -q] 壓縮包名
- 2.功能:讀取鏡像文件,壓縮包直接load打開即用。
- 3.選項:-i表示指定需要的壓縮包,是必須的,不用管就行,無腦加。
- -q表示靜默模式,不輸出下載信息。

4.2 容器操作
4.2.1 創(chuàng)建容器
- 1.語法:docker run -d --name 容器自定義命名 -p 外部端口:容器內端口 -e 環(huán)境變量 鏡像名稱
- 2.功能:創(chuàng)建并運行容器。

4.2.2 查看容器運行狀態(tài)
- 1.語法:docker ps [-a]
- 2.功能:查看容器的運行狀態(tài),選項可以查看命令大全看太多了,-a這里表示顯示全部的容器狀態(tài),包括已啟動和未啟動的。不加就只顯示正在運行的容器。

4.2.3 停止運行的容器
- 1.語法:docker stop 容器名/容器ID
- 2.功能:停止docker中運行的容器。

4.2.4 啟動未啟動的容器
- 1.語法:docker start 容器名
- 2.功能:啟動未啟動的容器,比如我們剛剛停止的nginx容器,它并沒有刪除,而是停止了。

4.2.5 查看容器日志
- 1.語法:docker logs [-f] 容器名
- 2.功能:查看容器的日志。
- 3.-f表示持續(xù)跟蹤日志,按ctrl + c退出。

4.2.6 進入容器內部
- 1.語法:docker exec [-i -t] 容器名 COMMAND
- 2.功能:在容器內部使用COMMAND命令。
- 3.含義:容器內部其實也是一個模擬的虛擬機,里面也是具有Linux目錄的一個偽操作系統(tǒng),所以我們也可以通過如圖命令進入容器的命令行終端進行更精細的操作。-i, --interactive: 保持標準輸入打開。-t, --tty: 分配一個偽終端。更多選項看命令行大全。注意,這個模擬的虛擬機它只會包含能夠運行該鏡像的必備庫函數(shù),所以有些命令會沒有,比如vim。
- 可以觀察到我們的用戶已經(jīng)變成了容器ID,說明我們正在容器內部進行操作。

4.2.7 刪除容器
- 1.語法:docker rm 容器 [-f]
- 2.功能:刪除容器,-f表示強制刪除。
- 如果不能夠刪除要先停掉容器或者直接強制刪除。
5.容器和鏡像的關系
- 這里只做簡單理解:一個鏡像可以生成多個容器,鏡像就相當于容器的工廠,生產(chǎn)相同標準的容器,鏡像里你配的什么,那么容器就生成什么,且同一鏡像生成的容器互不影響。
6.數(shù)據(jù)卷掛載
- 什么是數(shù)據(jù)卷?
- 數(shù)據(jù)卷?? 是 Docker 中用于持久化存儲容器數(shù)據(jù)的一種機制,它允許容器與宿主機或其他容器共享數(shù)據(jù),同時避免因容器刪除而丟失數(shù)據(jù),說白了一句話:使用數(shù)據(jù)卷這個中介,實現(xiàn)宿主機和容器的雙向綁定。
- 場景:我們需要修改容器內部的nginx中的index.html,發(fā)現(xiàn)進入容器后,不存在vim命令,是因為容器只會包含它能夠運行的庫函數(shù),所以有些命令根本不存在。
- 這個時候就需要通過數(shù)據(jù)卷來雙向綁定宿主機和容器的文件。實時修改宿主機就能實現(xiàn)修改容器機,非常方便。

6.1 創(chuàng)建并綁定數(shù)據(jù)卷
- 1.語法:docker run -d --name 容器名 -p 外端口:內端口 -v 數(shù)據(jù)卷名:容器文件地址 鏡像名稱
- 2.功能:能夠直接創(chuàng)建一個容器,這個容器具有和宿主機雙向綁定的數(shù)據(jù)卷。
- 一句話:我創(chuàng)建了一個數(shù)據(jù)卷,雙向綁定了我指定的文件,我修改宿主機,容器內也自動跟著更改,就這么方便。

6.2 查看創(chuàng)建的數(shù)據(jù)卷
- 1.語法:docker volume ls
- 2.功能:查看數(shù)據(jù)卷的列表。
6.3 查看創(chuàng)建的數(shù)據(jù)卷詳細信息
- 1.語法:docker volume inspect 數(shù)據(jù)卷名
- 2.功能:查看數(shù)據(jù)卷名的詳細信息。可以看到它掛載的文件地址。

6.4 舉例
- 我們剛才創(chuàng)建了index的數(shù)據(jù)卷,那么我們可以直接修改宿主機中的nginx的index.html就可以實現(xiàn)容器的實時同步。通過虛擬機端口訪問nginx的index頁面:

- 通過vim在宿主機修改了index.html后:修改了中文會出現(xiàn)亂碼,記得加上字符集即可,meta那一行,html的知識。

- 神奇的是真的實時響應了:

7.綁定掛載
7.1 實例
- 直接在宿主機掛載容器的目錄。
- 添加了-v選項,前面的地址是宿主機掛載的文件地址,后面的地址是容器內部需要掛載的文件地址,這樣以來我們直接把mysql的三個文件直接掛載到宿主機,同樣能夠實現(xiàn)雙向綁定。

7.2 如何選擇數(shù)據(jù)卷掛載還是綁定掛載
- 一句話:??需要直接與宿主機交互文件(讀、寫、改),用綁定掛載;只需要數(shù)據(jù)不丟失,讓Docker自動管理,用數(shù)據(jù)卷。?實在不行,問運維。

浙公網(wǎng)安備 33010602011771號