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 --nowCreated 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 imagesREPOSITORY 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 -aCONTAINER 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 -aCONTAINER 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 lsbin
boot
····省略信息
[root@node1 ~]# docker ps -aCONTAINER 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 -aCONTAINER 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:/# lsbin 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 imagesREPOSITORY 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