Docker基础
文章目录
- 1. Docker简介
- 2. Docker安装
- 3. Docker常用命令
- 3.1 帮助命令
- 3.2 镜像的基本命令
- 3.3 容器的基本命令
- 3.5 常用其他命令
- 3.6 练习
- 4. Protainer可视化面板
- 5. Docker镜像
- 6. 容器数据卷
- 6.1 使用命令来挂载 -v
- 6.2 Dockerfile挂载
- 6.3 数据卷容器
- 7. DockerFile
- 7.1 介绍
- 7.2 构建过程
- 7.3 DockerFile指令
- 8. 发布镜像
- 8.1 发布镜像到Docker Hub
- 8.2 发布镜像到阿里云容器服务
- 9. Docker网络原理
- 9.1 理解Docker网络
- 9.2 -link
- 9.3 自定义网络
- 9.4 网络连通
- 10. 部署Redis集群实战
- 11. SpringBoot微服务打包Docker镜像
1. Docker简介
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。
DevOps:开发+运维
传统:一堆帮助文档,安装程序
Docker:打包镜像,发布测试,一键运行
使用了Docker之后,我们部署应用就像搭积木一样。
Docker之所以发展如此迅速,因为它提供了系统平滑移植,容器虚拟化技术。
开发人员利用Docker可以消除协作编码时,“在我的机器上可正常工作“的问题。
Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源码托管在Github上,基于go语言并且遵从Apache2.0协议开源。
GitHub地址:https://github.com/moby/moby
docker官网:https://www.docker.com
docker中文库:https://www.docker.org.cn/
docker hub:https://hub.docker.com/
LXC为Linux Container的简写。Linux Container 容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。
LXC主要通过Kernel的namespace实现每个用户实例之间的项目隔离,通过cgroup实现对资源的配额和调度。
docker和容器技术和虚拟机技术,都是虚拟化技术。
不同点:
DOcker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。
与传统的虚拟机相比,Docker优势体现为启动速度快,占用体积小。
容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器比传统虚拟机更为轻便。
每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会互相影响,能区分计算资源。
Docker的出现,就是为了解决运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
Docker整体架构
Docker的基本组成
-
镜像(image)
docker镜像好比是一个模版,可以通过这个模版来创建容器服务,tomcat镜像->run->tomcat01容器(提供服务),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
-
容器(container)
Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建。拥有启动、停止、删除等基本命令。可以把容器理解为一个简易的Linux系统。
-
仓库(repository)
仓库就是存放镜像的地方。仓库分为共有仓库和私有仓库。如Docker Hub(官方),阿里云,华为云都有容器服务。仓库默认使用的是Docker Hub,是国外的,国内访问速度非常慢,所以要配置镜像加速(像Maven配置镜像一样)。
Docker利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看作是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
仓库是集中存放镜像文件的场所,docker提供的官方registry被称为Docker Hub。
仓库分为公开仓库和私有仓库两种形式。最大的公开仓库就是Docker Hub,国内的公开仓库包括阿里云、网易云等。
2. Docker安装
Docker并非是一个通用的容器工具,它依赖于已经存在并运行的Linux内核环境。
DOcker实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。
因此,Docker必须部署在Linux内核的系统上。如果其他系统想部署Docker就必须安装一个Linux环境。
查看环境信息
# 系统内核版本在3.10以上 [root@iZbp13w34ju4eg8v1cixguZ ~]# uname -r 3.10.0-1160.105.1.el7.x86_64 # 查看系统版本 [root@iZbp13w34ju4eg8v1cixguZ ~]# cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7
安装(使用rpm存储库安装)
官方教程:https://docs.docker.com/engine/install/centos/
1.卸载旧的版本
旧版本的 Docker 采用docker或docker-engine。在尝试安装新版本之前卸载任何此类旧版本以及相关的依赖项。
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
yum可能会报告没有安装这些软件包。
/var/lib/docker/卸载 Docker 时,不会自动删除存储的映像、容器、卷和网络。
2.需要的软件包
安装yum-utils软件包(提供yum-config-manager 实用程序)
[root@iZbp13w34ju4eg8v1cixguZ ~]# sudo yum install -y yum-utils
3.设置镜像的仓库
# 使用国内的阿里云 [root@iZbp13w34ju4eg8v1cixguZ ~]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.更新yum软件包索引
[root@iZbp13w34ju4eg8v1cixguZ ~]# yum makecache fast
4.安装Docker引擎
# docker-ce 社区版 docker-ee 企业版 [root@iZbp13w34ju4eg8v1cixguZ ~]# sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
5.启动docker
[root@iZbp13w34ju4eg8v1cixguZ ~]# sudo systemctl start docker # 启动docker [root@iZbp13w34ju4eg8v1cixguZ ~]# docker version # 查看版本成功,如果有信息则启动成功 Client: Docker Engine - Community Version: 26.0.0 API version: 1.45 Go version: go1.21.8 Git commit: 2ae903e Built: Wed Mar 20 15:21:09 2024 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 26.0.0 API version: 1.45 (minimum version 1.24) Go version: go1.21.8 Git commit: 8b79278 Built: Wed Mar 20 15:20:06 2024 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.28 GitCommit: ae07eda36dd25f8a1b98dfbf587313b99c0190bb runc: Version: 1.1.12 GitCommit: v1.1.12-0-g51d5e94 docker-init: Version: 0.19.0 GitCommit: de40ad0
6.通过运行镜像来验证Docker是否安装成功hello-world
[root@iZbp13w34ju4eg8v1cixguZ ~]# sudo docker run hello-world
7.查看下载的hello-world镜像
[root@iZbp13w34ju4eg8v1cixguZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d2c94e258dcb 10 months ago 13.3kB
卸载Docker
1.卸载 Docker Engine、CLI、containerd 和 Docker Compose 软件包:
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
2.主机上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有映像、容器和卷:
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd
Docker默认工作路径:/var/lib/docker
配置阿里云镜像加速
安装完成后,其实我们的镜像仓库速度还不够快,上面我们设置的阿里云镜像仓库是阿里云内部的,这里我们可以再配置一个阿里云的镜像加速。
进入容器加速服务的控制台,点击左侧边栏的镜像工具下的镜像加速器,查看操作文档。
针对Docker客户端版本大雨1.10.0的用户,可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json
-