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

相关推荐
疯狂母牛39 分钟前
容器技术-docker5
docker
_秋牧40 分钟前
Docker 镜像导出和导入
运维·docker·容器
程序员三木42 分钟前
[gpt胡说八道篇] 使用Docker快速启动Doris
gpt·docker·eureka
Xiao200001011 小时前
一文讲解Docker入门到精通
运维·docker·容器
小秦学加瓦chen1 小时前
使用docker创建nginx容器部署前端项目
前端·nginx·docker
软泡芙1 小时前
【Docker】可视化平台Portainer
运维·docker·容器
月清晖2 小时前
使用docker搭建squid和ss5
运维·docker·容器
Studying_swz2 小时前
利用Frp实现内网穿透(docker实现)
运维·docker·容器
咖猫4 小时前
配置下载 docker镜像 playedu开源 最佳实践部署
运维·docker·容器
江湖有缘5 小时前
云原生之使用Docker部署RabbitMQ消息中间件
docker·云原生·rabbitmq