溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Docker的三個(gè)概念是什么

發(fā)布時(shí)間:2021-12-13 11:54:29 來源:億速云 閱讀:224 作者:iii 欄目:云計(jì)算

這篇文章主要講解了“Docker的三個(gè)概念是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Docker的三個(gè)概念是什么”吧!

Docker

Docker是什么?

Docker是一個(gè)虛擬環(huán)境容器,可以將你的開發(fā)環(huán)境、代碼、配置文件等一并打包到這個(gè)容器中,并發(fā)布和應(yīng)用到任意平臺中。

Docker的三個(gè)概念

鏡像(Image)

類似于虛擬機(jī)中的鏡像,是一個(gè)包含有文件系統(tǒng)的面向Docker引擎的只讀模板。任何應(yīng)用程序運(yùn)行都需要環(huán)境,而鏡像就是用來提供這種運(yùn)行環(huán)境的。例如一個(gè)Ubuntu鏡像就是一個(gè)包含Ubuntu操作系統(tǒng)環(huán)境的模板,同理在該鏡像上裝上Apache軟件,就可以稱為Apache鏡像。

容器(Container)

類似于一個(gè)輕量級的沙盒,可以將其看作一個(gè)極簡的Linux系統(tǒng)環(huán)境(包括root權(quán)限、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間等),以及運(yùn)行在其中的應(yīng)用程序。Docker引擎利用容器來運(yùn)行、隔離各個(gè)應(yīng)用。容器是鏡像創(chuàng)建的應(yīng)用實(shí)例,可以創(chuàng)建、啟動、停止、刪除容器,各個(gè)容器之間是是相互隔離的,互不影響。注意:鏡像本身是只讀的,容器從鏡像啟動時(shí),Docker在鏡像的上層創(chuàng)建一個(gè)可寫層,鏡像本身不變。

倉庫(Repository)

類似于代碼倉庫,這里是鏡像倉庫,是Docker用來集中存放鏡像文件的地方。注意與注冊服務(wù)器(Registry)的區(qū)別:注冊服務(wù)器是存放倉庫的地方,一般會有多個(gè)倉庫;而倉庫是存放鏡像的地方,一般每個(gè)倉庫存放一類鏡像,每個(gè)鏡像利用tag進(jìn)行區(qū)分,比如Ubuntu倉庫存放有多個(gè)版本(12.04、14.04等)的Ubuntu鏡像。

Docker的安裝

Docker可以安裝在Windows、Linux、Mac等各個(gè)平臺上。具體可以查看文檔Install Docker。

安裝完成之后,可以查看Docker的版本信息:

$ docker version

Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:45 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:02:21 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

查看Docker的幫助信息:# docker --help。

Docker中關(guān)于鏡像的基本操作

從官方注冊服務(wù)器(https://hub.docker.com)的倉庫中pull下CentOS的鏡像,前邊說過,每個(gè)倉庫會有多個(gè)鏡像,用tag標(biāo)示,如果不加tag,默認(rèn)使用latest鏡像:

# docker search centos    # 查看centos鏡像是否存在

# docker pull centos    # 利用pull命令獲取鏡像

# docker images    # 查看當(dāng)前系統(tǒng)中的images信息

新建自有鏡像

# docker run -it centos:latest /bin/bash    # 啟動一個(gè)容器
#    # 這里命令行形式變了,表示已經(jīng)進(jìn)入了一個(gè)新環(huán)境
# git --version    # 此時(shí)的容器中沒有g(shù)it
# yum install git    # 利用yum安裝git
# git --version   # 此時(shí)的容器中已經(jīng)裝有g(shù)it了

查看運(yùn)行的容器

此時(shí)利用exit退出該容器,然后查看docker中運(yùn)行的程序(容器):
# docker ps -a
CONTAINER ID  IMAGE    COMMAND      CREATED   STATUS   PORTS    NAMES
72f1a8a0e394  centos:latest "/bin/bash"  9 minutes ago   Exited (0) 3 minutes ago

這里將容器轉(zhuǎn)化為一個(gè)鏡像,即執(zhí)行commit操作,完成后可使用docker images查看:

# docker commit -m "centos with git" -a "qixianhu" 72f1a8a0e394 xianhu/centos:git
# docker images
REPOSITORY       TAG    IMAGE ID         CREATED             SIZE
xianhu/centos    git    52166e4475ed     5 seconds ago       358.1 MB
centos           latest 0584b3d2cf6d     9 days ago          196.5 MB

其中,-m指定說明信息;-a指定用戶信息;72f1a8a0e394代表容器的id;xianhu/centos:git指定目標(biāo)鏡像的用戶名、倉庫名和 tag 信息。注意這里的用戶名xianhu,后邊會用到。

此時(shí)Docker引擎中就有了我們新建的鏡像xianhu/centos:git,此鏡像和原有的CentOS鏡像區(qū)別在于多了個(gè)Git工具。此時(shí)我們利用新鏡像創(chuàng)建的容器,本身就自帶git了。

# docker run -it xianhu/centos:git /bin/bash
# git --version
git version 1.8.3.1

利用exit退出容器。注意此時(shí)Docker引擎中就有了兩個(gè)容器,可使用docker ps -a查看。

利用Dockerfile創(chuàng)建鏡像

Dockerfile可以理解為一種配置文件,用來告訴docker build命令應(yīng)該執(zhí)行哪些操作。一個(gè)簡易的Dockerfile文件如下所示,官方說明:Dockerfile reference:

# 說明該鏡像以哪個(gè)鏡像為基礎(chǔ)
FROM centos:latest

# 構(gòu)建者的基本信息
MAINTAINER xianhu

# 在build這個(gè)鏡像時(shí)執(zhí)行的操作
RUN yum update
RUN yum install -y git

# 拷貝本地文件到鏡像中
COPY ./* /usr/share/gitdir/

有了Dockerfile之后,就可以利用build命令構(gòu)建鏡像了:

# docker build -t="xianhu/centos:gitdir" .

其中-t用來指定新鏡像的用戶信息、tag等。最后的點(diǎn)表示在當(dāng)前目錄尋找Dockerfile。

構(gòu)建完成之后,同樣可以使用docker images命令查看:

# docker images
REPOSITORY        TAG       IMAGE ID      CREATED            SIZE
xianhu/centos     gitdir    0749ecbca587  34 minutes ago     359.7 MB
xianhu/centos     git       52166e4475ed  About an hour ago  358.1 MB
centos            latest    0584b3d2cf6d  9 days ago         196.5 MB

以上就是構(gòu)建自己鏡像的兩種方法。其中也涉及到了容器的一些操作。如果想刪除容器或者鏡像,可以使用rm命令,注意:刪除鏡像前必須先刪除以此鏡像為基礎(chǔ)的容器。

# docker rm container_name/container_id
# docker rmi image_name/image_id

鏡像其他操作指令:

# docker save -o centos.tar xianhu/centos:git    # 保存鏡像, -o也可以是--output
# docker load -i centos.tar    # 加載鏡像, -i也可以是--input

Docker中關(guān)于容器的基本操作

在前邊鏡像的章節(jié)中,我們已經(jīng)看到了如何基于鏡像啟動一個(gè)容器,即docker run操作。

[root@xxx ~]# docker run -it centos:latest /bin/bash

這里-it是兩個(gè)參數(shù):-i和-t。前者表示打開并保持stdout,后者表示分配一個(gè)終端(pseudo-tty)。此時(shí)如果使用exit退出,則容器的狀態(tài)處于Exit,而不是后臺運(yùn)行。如果想讓容器一直運(yùn)行,而不是停止,可以使用快捷鍵 ctrl+p ctrl+q 退出,此時(shí)容器的狀態(tài)為Up。

除了這兩個(gè)參數(shù)之外,run命令還有很多其他參數(shù)。其中比較有用的是-d后臺運(yùn)行:

[root@xxx ~]# docker run centos:latest /bin/bash -c "while true; do echo hello; sleep 1; done"
[root@xxx ~]# docker run -d centos:latest /bin/bash -c "while true; do echo hello; sleep 1; done"

這里第二條命令使用了-d參數(shù),使這個(gè)容器處于后臺運(yùn)行的狀態(tài),不會對當(dāng)前終端產(chǎn)生任何輸出,所有的stdout都輸出到log,可以使用docker logs container_name/container_id查看。

啟動、停止、重啟容器命令:

[root@xxx ~]# docker start container_name/container_id
[root@xxx ~]# docker stop container_name/container_id
[root@xxx ~]# docker restart container_name/container_id

后臺啟動一個(gè)容器后,如果想進(jìn)入到這個(gè)容器,可以使用attach命令:

[root@xxx ~]# docker attach container_name/container_id

刪除容器的命令前邊已經(jīng)提到過了:

[root@xxx ~]# docker rm container_name/container_id

Docker中關(guān)于倉庫的基本操作

Docker官方維護(hù)了一個(gè)DockerHub的公共倉庫,里邊包含有很多平時(shí)用的較多的鏡像。除了從上邊下載鏡像之外,我們也可以將自己自定義的鏡像發(fā)布(push)到DockerHub上。

在鏡像操作章節(jié)中,我們新建了一個(gè)xianhu/centos:git鏡像。

(1)訪問https://hub.docker.com/,如果沒有賬號,需要先注冊一個(gè)。

(2)利用命令docker login登錄DockerHub,輸入用戶名、密碼即可登錄成功:

[root@xxx ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: xianhu
Password:
Login Succeeded

(3)將本地的鏡像推送到DockerHub上,這里的xianhu要和登錄時(shí)的username一致:

[root@xxx ~]# docker push xianhu/centos:git    # 成功推送
[root@xxx ~]# docker push xxx/centos:git    # 失敗
The push refers to a repository [docker.io/xxx/centos]
unauthorized: authentication required

(4)以后別人就可以從你的倉庫中下載合適的鏡像了。

[root@xxx ~]# docker pull xianhu/centos:git

對應(yīng)于鏡像的兩種創(chuàng)建方法,鏡像的更新也有兩種:

  • 創(chuàng)建容器之后做更改,之后commit生成鏡像,然后push到倉庫中。

  • 更新Dockerfile。在工作時(shí)一般建議這種方式,更簡潔明了。

這里再一次回顧一下三個(gè)重要的概念:鏡像、容器、倉庫:

從倉庫(一般為DockerHub)下載(pull)一個(gè)鏡像,Docker執(zhí)行run方法得到一個(gè)容器,用戶在容器里執(zhí)行各種操作。Docker執(zhí)行commit方法將一個(gè)容器轉(zhuǎn)化為鏡像。Docker利用login、push等命令將本地鏡像推送(push)到倉庫。其他機(jī)器或服務(wù)器上就可以使用該鏡像去生成容器,進(jìn)而運(yùn)行相應(yīng)的應(yīng)用程序了。

Docker命令

命令 用途
docker pull 獲取image
docker build 創(chuàng)建image
docker images 列出image
docker run 運(yùn)行container
docker ps 列出container
docker rm 刪除container
docker rmi 刪除image
docker cp 在host和container之間拷貝文件 docker commit 保存改動為新的image

Dockerfile命令

指令 說明
FROM 設(shè)置鏡像使用的基礎(chǔ)鏡像
MAINTAINER 設(shè)置鏡像的作者
RUN 編譯鏡像時(shí)運(yùn)行的腳本
CMD 設(shè)置容器的啟動命令
LABEL 設(shè)置鏡像的標(biāo)簽
EXPOSE 設(shè)置鏡像暴露的端口
ENV 設(shè)置容器的環(huán)境變量
ADD 編譯鏡像時(shí)復(fù)制文件到鏡像中
COPY 編譯鏡像時(shí)復(fù)制文件到鏡像中
ENTRYPOINT 設(shè)置容器的入口程序
VOLUME 設(shè)置容器的掛載卷
USER 設(shè)置運(yùn)行RUN CMD ENTRYPOINT的用戶名
WORKDIR 設(shè)置RUN CMD ENTRYPOINT COPY ADD指令的工作目錄 ARG 設(shè)置編譯鏡像時(shí)加入的參數(shù)
ONBUILD 設(shè)置鏡像的ONBUILD指令
STOPSIGNAL 設(shè)置容器的退出信號量

Volume操作

說白了,Volume只是-v參數(shù)而已。容器和宿主機(jī)目錄掛載的三種方式:

運(yùn)行Nginx容器,-d:后臺運(yùn)行,--name:指定名稱nginx,-v /usr/share/nginx/html:運(yùn)行容器內(nèi)部用來訪問網(wǎng)頁的地址,最后的nginx是鏡像名。

docker run -d --name nginx -v /usr/share/nginx/html nginx

在啟動Nginx容器時(shí)使用-v參數(shù)掛載本地目錄到容器目錄

docker run -p 8080:80 --name mynginx -v $PWD:/usr/share/nginx/html -d nginx

使用 docker create 創(chuàng)建一個(gè)新的容器但不啟動它:

docker create -v $PWD/data:/var/mydata --name data_container ubuntu

Registry介紹

Registry 是鏡像倉庫,我們可以從鏡像倉庫中拉取一些鏡像到本地,也可以提交鏡像到倉庫。

一些術(shù)語:

ENGLISH 中文
host 宿主機(jī) image 鏡像
container 容器
registry 倉庫
daemon 守護(hù)程序 client 客戶端

Compose多容器應(yīng)用

Compose 是一個(gè)用戶定義和運(yùn)行多個(gè)容器的 Docker 應(yīng)用程序。在 Compose 中你可以使用 YAML 文件來配置你的應(yīng)用服務(wù)。然后,只需要一個(gè)簡單的命令,就可以創(chuàng)建并啟動你配置的所有服務(wù)。

docker-compose.yml常用命令

命令 用途
build 本地創(chuàng)建鏡像
command 覆蓋缺省命令
depends_on 連接容器
ports 暴露端口
volumes 卷
image pull鏡像
up 啟動服務(wù)
stop 停止服務(wù)
rm 刪除服務(wù)中的各個(gè)容器 logs 觀察各個(gè)容器的日志 ps 列出服務(wù)相關(guān)的容器

感謝各位的閱讀,以上就是“Docker的三個(gè)概念是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Docker的三個(gè)概念是什么這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI