Rumah > Operasi dan penyelenggaraan > Docker > Apakah komponen teras docker

Apakah komponen teras docker

青灯夜游
Lepaskan: 2022-02-08 17:18:54
asal
16890 orang telah melayarinya

Docker mempunyai tiga komponen teras: 1. Imej, sistem fail Linux 2. Bekas, contoh masa jalan bagi imej;

Apakah komponen teras docker

Persekitaran pengendalian tutorial ini: sistem linux5.9.8, versi docker-1.13.1, komputer Dell G3.

Tiga komponen teras Docker

  • Imej

  • Bekas

  • Repositori

Imej

Apakah imej Docker?

Untuk memahaminya, imej Docker ialah sistem fail Linux (Sistem Fail Root ini mengandungi atur cara yang boleh dijalankan dalam kernel Linux dan data yang sepadan).

Bercakap mengenai perkara ini, kita mungkin perlu menambah beberapa pengetahuan yang berkaitan dengan sistem pengendalian Linux:

Secara umumnya, Linux dibahagikan kepada dua bahagian: Linux Kernel dan ruang pengguna , dan Linux sebenar sistem pengendalian merujuk kepada kernel Linux Sistem pengendalian kami yang biasa digunakan seperti Ubuntu dan CentOS sebenarnya adalah versi pengedaran (Linux Distribution) yang dibentuk oleh pengeluar berbeza yang menambah perisian dan alatan (alat) mereka sendiri berdasarkan kernel Linux.

Oleh itu, kita juga boleh menganggap imej sebagai ruang pengguna yang dinyatakan di atas Apabila Docker mencipta bekas melalui imej, ruang pengguna yang ditakrifkan oleh imej dijalankan pada hos sebagai proses bebas dan terpencil. Di atas kernel Linux.

Di sini kita harus menekankan dua ciri pencerminan:

  • Pencerminan berlapis: iaitu cermin boleh terdiri daripada berbilang lapisan perantaraan, dan berbilang cermin Tengah yang sama lapisan boleh dikongsi, atau kita boleh menjana imej baharu dengan menambah satu lagi lapisan pada imej.

  • Imej adalah baca sahaja: selepas imej dibina, ia tidak boleh diubah suai Apa yang kami katakan di atas ialah menambah lapisan untuk membina imej baharu bekas sementara sebenarnya dibuat, dan fail ditambah atau dipadamkan pada bekas untuk membentuk imej baharu, kerana bekas itu boleh ditukar secara dinamik.

Melalui rajah berikut, saya boleh lebih memahami hubungan antara imej Docker dan Linux:

Apakah komponen teras docker

Perintah untuk mengendalikan imej

Arahan yang berkaitan dengan operasi imej dalam Docker semuanya berada di bawah subarahan imej docker Melalui arahan imej docker --help, anda boleh melihat subperintah imej docker dokumentasi terperinci arahan adalah seperti berikut:

Usage:  docker image COMMAND

Manage images

Commands:
build       Build an image from a Dockerfile(构建镜像的命令)
history     Show the history of an image(显示镜像构建历史过程)
import      Import the contents from a tarball to create a filesystem image(导入一个由容器导出的镜像)
inspect     Display detailed information on one or more images(显示一个镜像的详细信息)
load        Load an image from a tar archive or STDIN(从一个文件或标准输入流中导入镜像)
ls          List images(查看镜像列表)
prune       Remove unused images(删除虚悬镜像)
pull        Pull an image or a repository from a registry(从仓库拉取镜像)
push        Push an image or a repository to a registry(推送镜像到仓库)
rm          Remove one or more images(删除镜像)
save        Save one or more images to a tar archive(streamed to STDOUT by default)(保存镜像到文件)
tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE(给镜像打标签)
Salin selepas log masuk

Dapatkan imej

Selepas memasang Docker, kami tidak mempunyai mana-mana tempatan Sudah tentu, kita boleh membina imej itu sendiri, tetapi lebih mudah untuk menarik imej yang telah dibina oleh pegawai atau pihak ketiga dari Docker Hub, perkhidmatan gudang rasmi yang disediakan oleh Docker.

Anda boleh menggunakan tarikan imej docker untuk menarik imej Formatnya adalah seperti berikut:

docker image pull [OPTIONS] NAME[:TAG|@DIGEST]
Salin selepas log masuk

Sudah tentu, tarikan imej docker mempunyai penggunaan yang lebih ringkas: seperti:

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Salin selepas log masuk

Untuk menarik imej, anda perlu menentukan URL dan nombor port Pendaftaran Docker. Anda juga perlu menentukan nama dan label gudang nama dan label secara unik menentukan imej, dan label mungkin ditinggalkan Jika ditinggalkan , maka yang terbaru digunakan sebagai nama teg secara lalai, dan nama gudang terdiri daripada nama pengarang dan nama perisian.

Jadi, selepas mengabaikan parameter tersebut, sebagai contoh, jika kita ingin menarik imej centos, kita boleh menggunakan arahan mudah berikut untuk menariknya dari Docker Hub:

$ docker pull centos
Salin selepas log masuk

Lihat cermin tempatan

Menggunakan kaedah di atas, kami menarik cermin ke tempatan, jadi bagaimana kita menyemak cermin apa yang ada secara tempatan? Kita boleh melihat semua imej tempatan melalui arahan berikut:

$ docker image ls
Salin selepas log masuk

Sudah tentu, Docker menyediakan cara penulisan yang lebih ringkas, seperti berikut:

$ docker images
Salin selepas log masuk

Imej tiruan

Kita tahu bahawa nama imej Docker terdiri daripada nama dan label gudang, tetapi kadangkala kita akan melihat imej yang nama dan label gudangnya , kami memanggil imej jenis ini Ia ialah imej gantung maya, seperti yang ditunjukkan dalam rajah di bawah:

Apakah komponen teras docker

Imej gantung maya secara amnya ialah imej baharu yang dihasilkan apabila kami menggunakan docker tarik untuk tarik imej terkini, jadi nama dan label gudang ialah Imej baharu dipasang, dan gudang imej lama serta tag dibatalkan dan menjadi imej gantung.

Kita boleh menggunakan pernyataan berikut untuk mencetak semua imej tergantung:

$ docker image ls -f dangling=true
Salin selepas log masuk

Imej gantung umum tidak mempunyai kesan lagi, jadi ia boleh dibersihkan Kosongkan semua imej berjuntai:

$ docker image prune
Salin selepas log masuk

Walau bagaimanapun, jika kita ingin menyimpan beberapa imej maya yang berguna, kita boleh menggunakan arahan tag docker untuk menamakan semula nama dan tag gudang imej:

$ docker tag 621d57f27e93 "test:1.0"
Salin selepas log masuk

Imej eksport dan import

如果想与别人共享某个镜像,除了从镜像服务仓库中pull镜像和把镜像push到仓库上去之外,其实我们还可以将本地构建好的镜像直接导出并保存为文件发送给别人,如下:

$ docker image save /tmp/test_image.tar.gz
Salin selepas log masuk

而当你拿到别人导出的镜像文件,你可以使用docker load命令把镜像加载到本地的Docker镜像列表中,如下:

$ docker load < /tmp/test_image.tar.gz
Salin selepas log masuk

删除本地镜像

要删除一个或多个本地的镜像,可以使用下面的命令:

docker image rm [option] IMAGE1,IMAGE2,...IMAGEn
Salin selepas log masuk

也可以使用更简洁的方式,如:

docker rmi  [option]  IMAGE1,IMAGE2,...IMAGEn
Salin selepas log masuk

可以使用镜像的长ID、镜像短ID、镜像摘要以及镜像名称来删除镜像,如下:

$ docker rmi f7302e4ab3a8
Salin selepas log masuk

一般更常用镜像的短ID,如:

$ docker rmi f7302
Salin selepas log masuk

使用镜像的摘要也可以删除镜像,镜像的摘要可以使用下面的命令查询:

$ docker image ls --digests
Salin selepas log masuk

当然我们想要清除本地全部镜像时,可以使用下面的命令,不过一般不建议使用。

$ docker rmi $(docker images -qa)
Salin selepas log masuk

另外,一般如果镜像已经被使用来创建容器,使用上面的命令删除会报下面的错误,告诉我们该镜像已经被使用,不允许删除。

Error response from daemon: conflict: unable to remove repository reference "mysql:5.7" (must force) - container ccd406c07a78 is using its referenced image e1e1680ac726
Salin selepas log masuk

对于已经被用于创建容器的镜像,删除方法有两种,一种是先把容器删除,再删除镜像,另一种则只需要在删除镜像的命令中跟一个-f参数便可,如:

$ docker rim -f f7302
Salin selepas log masuk

使用docker commit构建镜像

上面的例子都是直接使用官方提供的镜像,其实,除了从官方仓库或其他镜像仓库拉取别人构建好的镜像外,我们也可以构建自己的镜像,一般有以下两种构建方式。

使用docker commit命令,我们可以将修改过的容器重新提交为一个镜像,如:

$ docker commit conntaner_id my-hello:1.0
Salin selepas log masuk

使用这种方式构建的镜像,我们称为黑箱镜像,就是一个黑箱子一样,别人并不知道我们对容器做了哪些修改和操作,所以会对其安全性有所质疑。

所以不推荐使用这种方式构建镜像,下面我们介绍一种更加通用且方便的方式。

使用Dockerfile构建镜像

一般推荐编写Dockerfile来构建一种镜像,Docker Hub上的镜像都是采用这种方式构建的,采用这种方式的好处就是,我们不用把镜像分发给别人,而只是把Dockerfile和相应需要写入镜像的资料发给别人,别人也能自己构建镜像,安全透明。

编写一个简单的Got程序

package main
import "fmt"

func main(){
fmt.Println("Hello Go")
}
Salin selepas log masuk

将Go程序编译为可执行程序,如:

$ go build hello.go
Salin selepas log masuk

编写Dockerfile文件

下面我们编写一个简单的Dockerfile文件,构建自己的第一个镜像,如下:

# 从一个空白的镜像开始
FROM stratch
ADD hello /
# 执行
CMD /hello
Salin selepas log masuk

开始构建镜像

编写好Dockerfile文件后,需要使用docker build命令进行构建,docker build命令的格式如下:

$ docker build [OPTIONS] PATH | URL | -
Salin selepas log masuk
# 注意最后的点(.)表示当前目录,即Dockerfile所在的目录
$ docker build -t "hello-go:1.0" .
Salin selepas log masuk

上面只是简单演示了使用Dockerfile文件如何构建镜像,关于Dockerfile,还有许多更加深入地用法,我们之后有机再谈。

容器(Container)

容器与镜像的关系,就如同面向编程中对象与类之间的关系。

因为容器是通过镜像来创建的,所以必须先有镜像才能创建容器,而生成的容器是一个独立于宿主机的隔离进程,并且有属于容器自己的网络和命名空间。

我们前面介绍过,镜像由多个中间层(layer)组成,生成的镜像是只读的,但容器却是可读可写的,这是因为容器是在镜像上面添一层读写层(writer/read layer)来实现的,如下图所示:

Apakah komponen teras docker

操作容器的相关命令

Usage:  docker container COMMAND

Manage containers

Commands:
attach      Attach local standard input, output, and error streams to a runnin                                                                                             g container
commit      Create a new image from a container&#39;s changes(把容器保存为镜像)
cp          Copy files/folders between a container and the local filesystem
create      Create a new container(创建一个新的容器)
diff        Inspect changes to files or directories on a container&#39;s filesyste                                                                                             m
exec        Run a command in a running container(在一个运行的容器中执行命令)
export      Export a container&#39;s filesystem as a tar archive
inspect     Display detailed information on one or more containers
kill        Kill one or more running containers(杀死一个或多个正在运行的容器)
logs        Fetch the logs of a container
ls          List containers(显示本地容器列表)
pause       Pause all processes within one or more containers
port        List port mappings or a specific mapping for the container
prune       Remove all stopped containers
rename      Rename a container(重命名容器)
restart     Restart one or more containers(重启一个或多个容器)
rm          Remove one or more containers(删除一个或多个容器)
run         Run a command in a new container(运行一个新的容器)
start       Start one or more stopped containers
stats       Display a live stream of container(s) resource usage statistics
stop        Stop one or more running containers(停止一个或多个容器)
top         Display the running processes of a container
unpause     Unpause all processes within one or more containers
update      Update configuration of one or more containers
wait        Block until one or more containers stop, then print their exit codes
Salin selepas log masuk

启动容器

启动容器有几种不同的方式,最常用的方法是使用docker run命令可以通过镜像创建一个容器,如:

# /bin/bash表示运行容器后要执行的命令
$ docker run -it centos /bin/bash
Salin selepas log masuk

docker run命令有一些比较常用的参数,比如容器是一种提供服务的守护进程,那么通常需要开放端口供外部访问,如:

$ docker run -p 80:80 nginx
Salin selepas log masuk

也可以为容器指定一个名称,如:

$ docker run -p 80:80 --name webserver nginx
Salin selepas log masuk

另外一种则是使用docker start命令重新启动已经停止运行的容器,如:

# container_id表示容器的id
$ docker start container_id
Salin selepas log masuk

而对于正在运行的容器,也可以通过docker restart命令重新启动,如:

# container_id表示容器的id
$ docker restart container_id
Salin selepas log masuk

查看本地容器列表

运行容器后,我们可以通过下面的命令查看本地所有容器:

$ docker container ls
Salin selepas log masuk

不过docker container ls也简洁的写法:

$ docker ps
Salin selepas log masuk

上面命令执行结果如下:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
f4f184f5ffb9        redis:latest        "docker-entrypoint.s…"   6 seconds ago       Up 4 seconds        0.0.0.0:6379->6379/tcp              myredis
f7d970e7d4ce        mysql:5.7           "docker-entrypoint.s…"   7 seconds ago       Up 5 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   docker-mysql
Salin selepas log masuk

上面的命令只会显示正在运行的容器,如果要显示全部容器,包含退出执行的,可以加参数-a,如:

$ docker ps -a
Salin selepas log masuk

有时候,我们只想查到容器的ID,可以用下面的命令:

$ docker ps -aq
Salin selepas log masuk

执行结果:

f4f184f5ffb9
f7d970e7d4ce
Salin selepas log masuk

停止容器

对于已经不需要的容器,可以使用docker stop命令停止其运行,如:

$ docker stop container_id1,container_id2...
Salin selepas log masuk

批量停止容器,如:

$ docker stop $(docker ps -qa)
Salin selepas log masuk

容器的三种运行模式

概括而言,Docker容器大体上有三种运行模式,如下:

运行后退出

下面语句创建的容器,在运行后会退出。

$ docker run centos echo "hellowrold"
Salin selepas log masuk

常驻内存,就是守护进程的模式

如果容器中运行一个守护进程,则容器会一直处于运行状态,如:

$ docker run -d -p 80:80 nginx
Salin selepas log masuk

交互式

我们也可以在运行容器时,直接与容器交互。

$ docker run -it centos /bin/bash
Salin selepas log masuk

删除容器

$ docker container rm container_id
Salin selepas log masuk

删除容器的命令也有简洁的写法,如下:

$ docker rm container_id
Salin selepas log masuk

也可以像上面批量停止容器一样,我们也可以批量删除容器,如:

$ docker rm $(docker ps -qa)
Salin selepas log masuk

进入容器

对于正在运行的容器,我们也可以通过docker exec命令再次进入容器,如:

$ docker exec -it f4f184f5ffb9 /bin/bash
Salin selepas log masuk

需要指定容器的id或name,上面的命令我们用的是ID。

导出容器为镜像

$ docker export -o ./image.tar.gz f4f184f5ffb9
Salin selepas log masuk

将容器导出后,我们可以另外一台有安装Docker的电脑中将文件包导入成为镜像,如:

$ docker import image.tar.gz
Salin selepas log masuk

上面讲的是容器的概念和一些常用的命令,关于容器,还可以设置数据卷和网络空间,这些我们有机会后面再谈。

仓库(Repository)

仓库(Repository)是集中存储镜像的地方,这里有个概念要区分一下,那就是仓库与仓库服务器(Registry)是两回事,像我们上面说的Docker Hub,就是Docker官方提供的一个仓库服务器,不过其实有时候我们不太需要太过区分这两个概念。

公共仓库

公共仓库一般是指Docker Hub,前面我们已经多次介绍如何从Docker Hub获取镜像,除了获取镜像外,我们也可以将自己构建的镜像存放到Docker Hub,这样,别人也可以使用我们构建的镜像。

不过要将镜像上传到Docker Hub,必须先在Docker的官方网站上注册一个账号,注册界面如下,按要求填写必要的信息就可以注册了,很简单的。

Apakah komponen teras docker

注册好了之后,可以在本地使用命令登录到Dokcer Hub了,过程如下:

# 在命令行中输入
$ docker login
Salin selepas log masuk

Apakah komponen teras docker

在输入账号密码登录到Docker Hub之后,便可以使用docker push命令把镜像推送到Docker Hub。

$ docker push test:1.0
Salin selepas log masuk

私有仓库

有时候自己部门内部有一些镜像要共享时,如果直接导出镜像拿给别人又比较麻烦,使用像Docker Hub这样的公共仓库又不是很方便,这时候我们可以自己搭建属于自己的私有仓库服务,用于存储和分布我们的镜像。

Docker官方提供了registry这个镜像,可以用于搭建私有仓库服务,我们把镜像拉到本地之后,用下面命令创建该镜像的容器便可以搭建一个仓库服务,如下:

$ docker run -d -p 5000:5000 --restart=always --name registry registry
Salin selepas log masuk

假设我们把一台IP为192.168.0.100的服务器作为仓库服务,并运行上面的语句,那么我们可以下面的语句重新构建上面的镜像,如:

$ docker build -t "192.168.0.100/hello-go:1.0" .
Salin selepas log masuk

然后使用下面的语句推送到自己的私有仓库服务器:

$ docker push 192.168.0.100/hello-word:1.0
Salin selepas log masuk

小结

镜像是静态的概念,构建完成之后便不能再修改,而容器则是一个动态的概念,使用Docker可以简单轻松地创建或删除容器,镜像与容器的关系,就如同面向对象编程中的类与对象的关系,而仓库则是存储和分发镜像的地方。

推荐学习:《docker视频教程

Atas ialah kandungan terperinci Apakah komponen teras docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan