一、基本概念
1.镜像
Docker 镜像就是一个只读的模板,镜像可以用来创建 Docker 容器
2.容器
Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
3.仓库(Repository)
仓库是集中存放镜像文件的场所。
有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
二、docker的优点
1、快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
2、更高效的虚拟化
Docker 容器的运行不需要额外的管理系统支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
3、更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
4、简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
三、安装docker
1.版本介绍
Docker-CE指Docker社区版,由社区维护和提供技术支持,为免费版本,适合个人开发人员和小团队使用。Docker-EE指Docker企业版,为收费版本,由售后团队和技术团队提供技术支持,专为企业开发和IT团队而设计。
相比Docker-EE,增加一些额外功能,更重要的是提供了更安全的保障。
此外,Docker的发布版本分为Stable版和Edge版,区别在于前者是按季度发布的稳定版(发布慢),后者是按月发布的边缘版(发布快)。通常情况下,Docker-CE足以满足我们的需求。
2.卸载旧docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3.配置阿里云yum源
cd /etc/yum.repos.d
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安装docker
[root@docker ~]# yum -y install docker-ce
#查看版本
[root@docker ~]# docker -v
Docker version 20.10.8, build 3967b7d
#查看docker的详细信息
[root@docker ~]# docker info
5.启动docker
[root@docker ~]# systemctl start docker
[root@docker ~]# systemctl status docker
四、docker常用命令
1.搜索镜像(search)
docker search "centos"
这里的显示结果 显示不完全,可以使用以下命令显示详细的关于镜像的信息
docker search "centos" --no-trunc
2.下载镜像(pull)
默认的镜像仓库在国外,可以配置加速器,使用国内阿里云的镜像仓库。每个用户都有属于自己的镜像加速器
[root@docker docker]# mkdir -p /etc/docker
[root@docker docker]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://aiyf7r3a.mirror.aliyuncs.com"]
}
[root@docker docker]# systemctl daemon-reload
[root@docker docker]# systemctl restart docker
#发现多了阿里云的仓库地址,这说明已经配置好了
[root@docker docker]# docker info |grep -iA 1 "mirrors"
Registry Mirrors:
https://aiyf7r3a.mirror.aliyuncs.com/
下载镜像
[root@docker ~]# docker pull centos
#这里发现centos 镜像已经下载完成
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 8 months ago 209MB
3.下载指定的docker镜像版本
可以在docker hup 网站上搜索镜像,可以不用登陆,直接进行搜索。
https://registry.hub.docker.com/
如下图:是下载指定的版本。不同的镜像镜像格式不同
比如:
docker pull mysql:8.0.26
4.删除镜像
删除镜像的时候需要先将容器停止,并且全部删除掉
#删除镜像有两种方法:
1. docker rmi 镜像名:tags
这种方法适用于在给镜像重新打完tag后,后又出现一个新的imges id相同的镜像
2. docker rmi 容器id
[root@docker ~]# docker rmi mysql:8.0.26
参数:
-f: 强制删除镜像,即使有在运行的容器,直接进行删除。
不建议使用,建议先删除运行的容器,在删除镜像
5.保存镜像
语法格式:
docker save -o 新镜像名称 要保存的原镜像名称:tag
例子:
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 8 months ago 209MB
[root@docker ~]# docker save -o centos-iso.tar centos:latest
6.导入镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 8 months ago 209MB
[root@docker ~]# docker rmi 300
Untagged: centos:latest
Untagged: centos@sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Deleted: sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55
Deleted: sha256:2653d992f4ef2bfd27f94db643815aa567240c37732cae1405ad1c1309ee9859
开始导入
[root@docker ~]# docker load -i centos-iso.tar
2653d992f4ef: Loading layer [==================================================>] 216.5MB/216.5MB
Loaded image: centos:latest
五、容器相关操作
1.创建容器
语法格式:
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像命:tag
-d: 后台运行
-p: 进行端口映射
--name:给容器起个名字
例子:
[root@docker ~]# docker pull nginx
[root@docker ~]# docker run -d -p 80:80 --name test1 nginx:latest
dbf8d7091af4db5c7a2ac2b1cc3876b9de1d421fa67f6bccda29693b2024429d
2.查看容器
docker ps #只显示运行的容器
docker ps -a #显示所有容器
docker ps -q #只显示容器id
3.操作容器
docker start|stop|restart|kill 容器id或者是容器名字
例子:
[root@docker ~]# docker start test1
[root@docker ~]# docker stop test1
[root@docker ~]# docker restart test1
4.删除容器
方法1:
[root@docker ~]# docker stop test1
test1
[root@docker ~]# docker rm test1
test1
方法2:
-f 强制删除
[root@docker ~]# docker rm -f test1
5.容器日志
实时查看日志
[root@docker ~]# docker logs -f test1
查看末尾几行的日志
[root@docker ~]# docker logs --tail 10 test1
6.查看容器内运行的进程
docker top 容器名称或者ID
7.进入容器
docker exec -it 容器名称或者ID bash
-i:交互式
-t:获得一个终端
8.主机和容器复制文件
1.将主机的文件复制到容器内
[root@docker ~]# touch nginx_test
[root@docker ~]# echo "123" >> nginx_test
#将文件nginx_test 复制到了test1容器的/下
[root@docker ~]# docker cp nginx_test test1:/
2.将容器内的主机复制主机上
[root@docker ~]# docker cp test1:/nginx_test ./
9.查看容器内部细节内容
docker inspect test1