[2] 一篇文章帶你入門Docker

在這裏插入圖片描述
大多數Docker入門相關文章都是從一串命令輸出一個“Hello World”開始的。本文則是按照Docker鏡像、Docker容器再到“Hello World”進行循序漸進的講解。閱讀本文者需要對Linux命令很熟悉,還需要明白鏡像、倉庫、容器三大概念。

1. 鏡像操作入門

1.1 概念

鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數。鏡像是容器在本地運行的基礎,Dokcer運行容器前需要本地存在對應的鏡像,如果不存在對應的鏡像,Docker 會先從默認的鏡像倉庫下載(如果用戶不希望Docker從默認的鏡像倉庫下載鏡像的話,可以使用自定義鏡像倉庫)。下面將從拉取鏡像,列出鏡像,刪除鏡像,搜索鏡像這三方面進行鏡像相關知識點的講解。

1.2 拉取鏡像

拉取鏡像指的是從Docker遠程倉庫直接拉取鏡像到本地。需要注意的是,在國內訪問Docker Hub巨慢,需要配置鏡像加速,推薦使用阿里雲進行加速,具體辦法可以百度。

拉取鏡像用到的命令:

docker pull 鏡像名:標籤名

這裏的標籤名常常省略,如果省略,默認爲:

docker pull 鏡像名:latest

接下來試一下拉取最新的ubuntu鏡像
在這裏插入圖片描述

1.3 列出本地鏡像

支持使用以下兩個命令來列出本機已有鏡像:

docker image ls

docker images

接下來試一下這兩個命令:
在這裏插入圖片描述

字段解釋:

  • REPOSITORY:鏡像所在倉庫名稱
  • TAG:標籤名
  • IMAGE ID :鏡像ID
  • CREATED :創建時間
  • SIZE:鏡像大小

加上-q屬性,則只列出鏡像ID
在這裏插入圖片描述

1.4 刪除鏡像

支持使用以下兩個命令執行刪除鏡像操作:

docker rmi 鏡像id/鏡像名:標籤名

docker image rm 鏡像id/鏡像名:標籤名

同樣的,標籤名如果省略的話,默認爲latest
在這裏插入圖片描述
前面我們使用docker images -q/docker image ls -q列出了所有鏡像ID,我們可以將這個命令和docker rmi命令結合,用來刪除所有鏡像:

docker rmi `docker images -q`

已經全部刪除了
在這裏插入圖片描述

1.5 搜索鏡像

如果你需要從遠程倉庫中查找需要的鏡像,可以通過以下命令搜索:

docker search 關鍵字

如搜索centos:
在這裏插入圖片描述
字段解釋:

  • NAME:名字
  • DESCRIPTION:描述
  • STARS:受歡迎程序
  • OFFICIAL:是否是官方版
  • AUTOMATED:是否是由Docker Hub自動構建流程構建的

擴展命令:

[1] 列出受歡迎程度大於1000的鏡像:

docker search -s 1000 centos

[2] 顯示描述詳情

docker search --no-trunc centos

1.6. 小結

對鏡像的操作主要涉及到鏡像的增、刪、查,所涉及到的命令可以簡單概括爲下表:

命令 描述
docker pull 拉取鏡像
docker images 列出本地鏡像
docker rmi 刪除鏡像
docker search 搜索鏡像

2. 容器操作入門

2.1 查看容器

2.1.1 查看正在運行的容器

docker ps [OPTIONS]

查看正在運行的容器

docker ps

如下圖:
在這裏插入圖片描述

  • CONTAINER ID:容器ID
  • IMAGE:所使用的鏡像
  • COMMAND:容器啓動後運行的第一條命令
  • CREATED:創建時間
  • STATUS:容器運行狀態
  • PORTS:表示端口映射關係0.0.0.0:8888->8080/tcp表示將容器內部的8080端口映射到本機的8888端口上,採用docker run -p 宿主機端口:容器內部端口創建出來的容器能看到此項
  • NAMES:名稱

2.2.1 查看所有容器

docker ps -a

如下圖,可以看到Up(正在運行狀態的容器),也可以看到Exited(停止狀態的容器):
在這裏插入圖片描述
列出所有的容器ID

docker ps -a -q

常用這句命令和其他命令結合做批量操作。比如批量啓動所有容器、批量停止所有容器、批量刪除所有容器,這些到後面都會講。

2.2 創建、啓動、退出容器

命令:

docker run [OPTIONS] 鏡像名:標籤名

OPTIONS可選值:

  • -i 允許與容器內的標準輸入進行交互,同時交互式運行容器。
  • -t 指定一個僞終端,-i和-t常常配合起來使用。
  • –name(前面有2個-),爲容器指定一個名稱,不手動指定的話,Docker將會自動指定。
  • -d 創建一個守護式容器在後臺運行,並返回容器ID,單獨的-d命令並不會啓動容器,可以和-t一起使用,從而創建並啓動一個守護進程。
  • -p 端口映射,將容器內部的端口映射到宿主機某一端口上。格式爲:-p 宿主機端口:容器內部端口。比如將容器內部的8080端口映射到宿主機的8081端口上,則可以使用命令:-p 8081:8080。
  • -v 目錄映射,將宿主機上的目錄映射到容器內部。格式爲:宿主機目錄:容器內部目錄。

上面寫的OPTIONS的屬性值大家先理解着看一下就行,後面我們一步一步根據實際場景來使用這些參數。

2.2.1 創建一個容器

docker run 鏡像名:標籤名

注意:這條命令只是創建出一個容器出來,容器並沒有運行。

可以用docker ps -a命令看到該容器的運行狀態
在這裏插入圖片描述
由於沒有指定–name屬性,Docker爲我們指定了一個不重複的名字
在這裏插入圖片描述
也可以手動指定一個名字
在這裏插入圖片描述
使用這個命令打印出Hello World出來

docker run ubuntu /bin/echo "Hello World"

上面這句話的意思是創建一個容器,並調用容器內部的echo命令打印出"Hello World",命令運行完之後容器立刻變爲Exited狀態。
在這裏插入圖片描述

2.2.2 創建一個可交互的容器

命令:

docker run -it 鏡像名:標籤名 /bin/bash

交互運行ubuntu:
在這裏插入圖片描述

  • -i 開啓標準輸入交互
  • -t 在容器內部指定一個僞終端

此時使用docker ps命令可以看到容器是在運行的狀態
在這裏插入圖片描述
接下來再次使用上面的命令創建一個可交互的容器,然後使用docker ps命令查看
在這裏插入圖片描述
可以得出結論:同一鏡像支持創建多個容器,並支持多個容器同時運行。

2.2.3 退出容器

在容器內部使用命令:

exit

直接退出
在這裏插入圖片描述
容器狀態也變爲Exited狀態
在這裏插入圖片描述
如果不想直接退出容器,而是將容器放到後臺運行,則使用快捷鍵ctrl + p + q
在這裏插入圖片描述
用ps命令可看到容器依然在運行
在這裏插入圖片描述

2.3 啓動已運行過的容器

docker start 容器ID/容器名稱

示例:
在這裏插入圖片描述
需要明確的是用docker start命令啓動的容器是在後臺運行的。

2.4 登陸已啓動的容器

exec -it 容器ID/容器名 /bin/bash

登陸已啓動的容器
在這裏插入圖片描述
需要注意的是, 當使用docker exec命令進入容器後,使用exit命令並不會使容器結束運行。 在這種情況下使用exit退出可交互命令行後,容器依然運行在後臺。
在這裏插入圖片描述

2.5 守護式容器的創建啓動

如果對於一個需要長期運行的容器來說,我們可以創建一個守護式容器。

docker run -id --name=自定義容器名 鏡像名:標籤名
  • -i:運行容器
  • -d:設置爲守護進程
  • –name非必須,只是爲了好區分

以守護進程的方式創建一個myUbuntu容器,並運行
在這裏插入圖片描述

2.6 停止正在運行的容器

docker stop 容器ID/容器名

把剛剛在後臺運行的容器停止
在這裏插入圖片描述
停止運行的全部容器

docker stop `docker ps -a -q`

其實和上面講的刪除的批量操作是一樣的,把docker ps -a -q命令的結果傳給docker stop命令進行批量操作。
在這裏插入圖片描述
支持使用docker kill命令強制停止:

docker kill 容器ID/容器名

能用docker stop停止的,就用docker stop命令。如果

2.7 刪除容器

刪除單個

docker rm 容器名稱/容器ID

刪除全部

docker rm `docker ps -a -q`

注意:只支持刪除停止狀態下的容器,正在運行的容器不支持刪除。

2.8 端口映射

需求,在容器內部部署了一個網絡服務器,要求能在容器外部訪問到這個服務器。

常用場景:

  • 訪問容器內的Tomcat服務器
  • 訪問容器內的MySQL服務器

命令:

docker run -p 宿主機端口:容器內部端口 xxx

將Tomcat容器的8080端口映射到本機的8082端口

docker run -i -p 8082:8080 tomcat(如果之前沒有pull過tomcat鏡像,則運行這條命令會先pull tomcat鏡像到本地倉庫)

如下圖:
在這裏插入圖片描述
在瀏覽器訪問一下:
在這裏插入圖片描述
可以看到Tomcat實際已經起來了,只不過沒有找到任何資源。

這是因爲tomcat容器下的webapps目錄默認是空的:
在這裏插入圖片描述
注:tomcat鏡像實際上是已經配置好jdk+tomcat的Linux環境。
在這裏插入圖片描述

2.8 目錄/文件映射

docker run -v 宿主機目錄:docker容器內部目錄 xxx

實戰演示:
創建目錄myapp

mkdir myapp

進入新創建的目錄

cd myapp

創建文件index.html

touch index.html

寫入以下內容

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello</title>
</head>
<body>
    <p>Hello World!</p>
</body>
</html>

將本機的myapp目錄映射到tomcat的webapps目錄下,並啓動tomcat

docker run -v $PWD:/usr/local/tomcat/webapps/myapp/ -p 8082:8080 tomcat

成功運行
在這裏插入圖片描述
訪問地址 http://localhost:8082/myapp/index.html
在這裏插入圖片描述
可以看到成功映射了
在這裏插入圖片描述

2.9 目錄文件只讀映射

docker run -v 宿主機目錄:docker容器內部目錄:ro xxx

還是以tomcat容器爲例

docker run -v $PWD:/usr/local/tomcat/webapps/myapp/:ro -it tomcat /bin/bash

提示爲只讀文件系統
在這裏插入圖片描述

2.10 拷貝宿主機文件到容器

docker cp 要拷貝的文件或目錄 容器ID或容器名稱:要拷貝到的容器內部位置

實戰演示:
新創建文件123.txt

echo abcdef > 123.txt

拷貝文件到之前創建的ubuntu容器內部

docker cp 123.txt 58b747c15d93:/home/

可以看到成功拷貝
在這裏插入圖片描述

2.11 拷貝容器內的文件到宿主機

docker cp 容器ID或容器名稱:要拷貝到的容器內部位置 要拷貝的文件或目錄 

如2.10節的逆操作是

docker cp 58b747c15d93:/home/123.txt ./123.txt

2.12 查看容器內部細節

docker inspect 容器ID/容器名稱

關於Docker入門的講解就到這裏了,下一節將和大家一起實戰部署應用到Docker容器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章