Docker容器引擎

1、Docker是什么。

        Docker是在Linux容器里运行应用的开源工具,是一种轻量级的"虚拟机"。Docker的logo设计为蓝色鲸鱼,拖着许多集装箱。鲸鱼可以看作宿主机,而集装箱可以理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。正如Docker的设计宗旨一样:Build、Ship and Run Any App、Anywhere,即通过对应组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的"一次封装,到处运行"的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

1.2、Docker和虚拟机的区别。

        作为一种轻量级的虚拟化方式,Docker与传统虚拟机相比具有显著的优势。

        Docker容器很快,启动和停止可以在,、秒级实现,比传统虚拟机要快很多;Docker核心解决的问题是利用容器来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的就是资源,所有Docker容器除了运行其中的应用之外,基本不消耗额外的系统资源,从而在保证应用性能的同时,减小系统开销,使得在一台主机上同时运行数千个Docker容器称为可能;Docker操作方便,还可以通过Dockerfile配置文件支持灵活的自动化创建和部署。

2、Docker的核心概念。

        2.1、镜像。

Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为是一个面向Docker容器引擎的只读模块。

        2.2、容器。

Docker的容器是从镜像创建的运行实例。它可以被启动,停止和删除。所创建的每一个容器都是相互隔离、互不可见,可以保证安全性的平台。可以把容器看作一个简易版的Linux环境,Docker利用容器来运行和隔离应用。

        2.3、仓库。

Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库或者私有仓库,这样一来当下次要在另外一台机器上使用这个镜像时,只需要从仓库上拉取下来就可以了。

3、安装Docker。

安装Docker

[root@node1 ~]# yum install docker

安装完成后启动Docker并设置为开机自动启动
[root@node1 ~]# systemctl enable docker --now

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service

查看版本信息

[root@node1 ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-209.git7d71120.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      7d71120/1.13.1
 Built:           Wed Mar  2 15:25:43 2022
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-209.git7d71120.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      7d71120/1.13.1
 Built:           Wed Mar  2 15:25:43 2022
 OS/Arch:         linux/amd64
 Experimental:    false

4、Docker镜像操作。

名称(NAME)、描述(DESCRIPTION)、星级(STARS)、是否官方创建(OFFICIAL)、是否主动创建(AUTOMATED)。默认的输出结果会按照星级评价进行排序,表示该镜像受欢迎程度,在下载镜像时,可以参考这一项。

 搜索镜像

[root@node1 ~]# docker search dhcp
INDEX  NAME  DESCRIPTION  STARS  OFFICIAL  AUTOMATED
docker.io  docker.io/networkboot/dhcpd  Suitable for running a DHCP server for you...   96                   [OK]
docker.io  docker.io/joebiellik/dhcpd  DHCP server running on Alpine Linux  21                   [OK]
docker.io  docker.io/instantlinux/dhcpd-dns-pxe  Serve DNS, DHCP and TFTP from a small Alpi...   6                    [OK]
 下载镜像

[root@node1 ~]# docker pull docker.io/networkboot/dhcpd
查看镜像信息

[root@node1 ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
docker.io/networkboot/dhcpd   latest              e25c872f0fca        19 months ago       139 MB

REPOSITORY:镜像属于的仓库。

TAG:镜像的表情信息,标记同一个仓库中的不同镜像。

IMAGE ID:镜像的唯一ID号,唯一标识了该镜像。

CREATED:镜像创建时间。

VIRUTUAL SIZE:镜像大小。

 为本地镜像添加新的标签

[root@node1 ~]# docker tag docker.io/networkboot/dhcpd dhcp:dhcp

[root@node1 ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
dhcp                          dhcp                e25c872f0fca        19 months ago       139 MB
docker.io/networkboot/dhcpd   latest              e25c872f0fca        19 months ago       139 MB

5、删除镜像。

[root@node1 ~]# docker rmi docker.io/networkboot/dhcpd
Untagged: docker.io/networkboot/dhcpd

6、存出镜像和载入镜像。 

导出镜像

命令格式:docker save -o 存出镜像为本地文件

[root@node1 ~]# docker save -o dhcp dhcp
载入镜像

[root@node1 ~]# docker load --input dhcp
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
dhcp                dhcp                e25c872f0fca        19 months ago       139 MB

7、Docker容器操作。

创建容器

-i表示容器的输入保持打开;-t表示让Docker分配一个伪终端

[root@node1 ~]# docker create -it dhcp:dhcp /bin/bash
94c8c36080bc5538504e2cf8955f8c33219e777dcbfff50fb9fb2a57e58f2a60

查看运行状态,-a可以列出系统最近一次启动的容器
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
94c8c36080bc        dhcp:dhcp           "/entrypoint.sh /b..."   4 seconds ago       Created                                 dazzling_elion


启动容器

[root@node1 ~]# docker start 94c8c36080bc
94c8c36080bc
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
94c8c36080bc        dhcp:dhcp           "/entrypoint.sh /b..."   4 minutes ago       Up 1 second                             dazzling_elion


创建容器并启动执行一条shell命令
[root@node1 ~]# docker run dhcp:dhcp /bin/bash -c ls
bin
boot
····省略信息
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
b857ee872a79        dhcp:dhcp           "/entrypoint.sh /b..."   2 seconds ago       Exited (0) 1 second ago                       brave_bohr

加上-d选项后容器会持续在后台进行运行
[root@node1 ~]# docker run -d dhcp:dhcp /bin/bash -c "while true;do echo ok;done"
e739bd03b58f84136e6dddb751ce9a336347cfb61bd01c6d65ebcf9aa291cd51
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                          PORTS               NAMES
e739bd03b58f        dhcp:dhcp           "/entrypoint.sh /b..."   2 seconds ago        Up 2 seconds                                        trusting_wiles


容器的停止

停止后状态处于Exited,终止状态

[root@node1 ~]# docker stop e739bd03b58f


容器的进入

[root@node1 ~]# docker exec -it e739bd03b58f /bin/bash
root@e739bd03b58f:/# ls
bin  boot  dev    entrypoint.sh  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@e739bd03b58f:/# exit

 8、容器的导出和导入。

容器的导出

将容器导出为centos7dhcp的文件

[root@node1 ~]# docker export e739bd03b58f>centos7dhcp


导出的文件从A机器复制到B机器,之后导入文件成文本地镜像

[root@node1 ~]# cat centos7dhcp/dhcp | docker import - centos7:dhcp
sha256:be20aa541c71442b8c9b48826f093d2a3296d4543aad2636b0320e5c49ec4bfd
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos7             dhcp                be20aa541c71        9 seconds ago       99.1 MB

9、容器的删除。

 命令格式:docker rm 容器ID/名称

[root@node1 ~]# docker stop dac67aa96216
[root@node1 ~]# docker rm dac67aa96216
[root@node1 ~]# docker ps -a

 

上一篇:【云原生进阶之数据库技术】第三章-PostgreSQL-架构-3.4-物理结构


下一篇:git撤回多个push到远程仓库的commit