系列文章目录
前言
本文我们要讲述:
Docker
在下攸攸太上,我有罪,我吃了无数的植物动物来维持我的生命,我的命是由无数的动植物的命堆积出来的,我很感谢他们。
一、Docker介绍
1. Docker介绍
Docker 是一个开源平台,用于自动化应用程序的开发、构建、分发和运行。它使用容器技术,使得开发者能够将应用程序及其所有依赖项打包成一个标准化的单元(称为容器),以便在不同的环境中一致地运行。
2. 沙盒机制介绍
沙盒,这里不是指那种游戏的种类,而是一种为保证计算机安全的技术,用于为运行中的程序提供隔离的环境。Docker的沙盒机制是指Docker利用Linux内核的容器化技术,在容器中隔离和限制应用程序的运行环境,以提供更高的安全性和隔离性。以下是Docker的沙盒机制的一些关键特点:
命名空间(Namespaces): Docker使用Linux内核的命名空间功能来隔离不同容器中的进程、网络、文件系统、用户等资源。每个容器都有自己独立的命名空间,使得容器中的进程无法感知到其他容器的存在。
控制组(Control Groups): Docker使用Linux内核的控制组功能来限制容器的资源使用,如CPU、内存、磁盘和网络带宽等。通过控制组,可以确保容器之间相互之间不会争夺资源,从而提高整体系统的性能和稳定性。
文件系统隔离: Docker使用镜像层和容器层的文件系统隔离机制,每个容器都有自己的文件系统视图。这意味着容器中的文件系统只能访问其自己的文件和目录,无法访问其他容器的文件。
网络隔离: Docker为每个容器提供独立的网络命名空间,使得容器可以拥有自己的网络接口、IP地址和网络配置。这样可以确保容器之间的网络流量相互隔离,提高网络安全性和隔离性。
权限管理: Docker在容器中实施严格的权限管理,每个容器都有自己的用户和用户组。这样可以确保容器中的进程只能以其拥有的权限进行操作,防止容器中的恶意进程对宿主机进行攻击。
通过这些沙盒机制,Docker实现了应用程序之间的隔离和安全性,同时提供了更高的资源利用率和性能。开发者可以在容器中运行不同的应用程序,而不必担心它们之间相互干扰或对系统造成不良影响。
3. Docker容器和虚拟机的区别
他们都采用了虚拟的技术。
不同的是,Docker少了虚拟机操作系统层,少了一层就少浪费资源,所以Docker效率较高。
4. Docker的三个主要组件
Docker客户端:Docker客户端是用户与Docker交互的命令行工具或图形界面工具。用户可以使用Docker客户端执行各种命令,如构建镜像、创建容器、管理容器等。客户端会将这些命令发送给Docker主机进行执行,并将执行结果返回给用户。
Docker主机:Docker主机是安装了Docker引擎(Docker Engine)的物理机或虚拟机。Docker主机负责管理和执行容器。它接收到Docker客户端发送的命令,然后根据命令的要求执行相应的操作,如拉取镜像、创建和管理容器、管理网络等。
远程仓库:Docker远程仓库是存储和分享Docker镜像的中央注册表。最常用的远程仓库是Docker Hub,它包含了数以万计的公共镜像供用户下载和使用。开发者可以通过远程仓库获取所需的镜像,并将自己创建的镜像上传到远程仓库供其他人使用。
Docker客户端和Docker主机是用户与Docker引擎进行交互的两个主要组件,而远程仓库则提供了大量的镜像资源。用户可以使用Docker客户端通过Docker主机来管理和执行容器,同时从远程仓库获取所需的镜像。
5. Docker的两个关键词
5.1 镜像
镜像是一个轻量级、独立、可执行的软件包,包括运行应用所需的所有内容,如代码、运行时、库、环境变量和配置文件等。镜像可以用来创建容器,类似于面向对象中的类的概念。
5.2 容器
容器是利用镜像创建的运行实例,相当于镜像的一个具体运行环境。容器包含了运行应用所需的所有组件,可以独立地运行在宿主机上。容器可以被启动、停止、删除,就像面向对象中的对象一样。
总的来说,镜像是一个静态的定义,描述了如何构建一个容器,而容器则是镜像的运行实例。这两个概念是Docker中非常核心和关键的部分。
举例子:镜像类似手机的App,容器类似App在后台的进程。
6. Docker的特点
轻量性:Docker容器共享宿主机的内核,因此相比传统虚拟化技术,Docker容器更加轻量级,可以在同一台物理机上运行更多的容器实例。
便携性:Docker容器可以在任何支持Docker的环境中运行,无论是开发、测试还是生产环境,使得应用程序在不同环境中快速部署和迁移成为可能。
灵活性:Docker提供了灵活的构建和发布机制,可以通过Dockerfile定义镜像的构建过程,并结合Docker Hub或私有仓库进行镜像的共享和分发,实现持续集成和持续部署。
隔离性:Docker利用Linux内核的命名空间和控制组等技术,提供了强大的隔离性。每个容器都拥有独立的运行环境,相互之间互不干扰。
可扩展性:Docker允许根据应用程序的需求快速创建、启动和停止多个容器,实现水平扩展或垂直扩展。通过容器编排工具,可以实现容器集群的管理和自动化扩展。
资源利用率高:Docker采用了镜像的层次化结构,不同镜像可以共享相同的基础层,减少了存储空间的占用。同时,容器的启动和停止速度快,可以在短时间内实现快速部署和扩展。
尽管有以上优点,Docker不擅长处理文件和数据,一般会以路径映射的方式讲文件或数据挂载到容器外。
二、部署Docker环境
我们本日的环境部署基于昨日
第二十六章 Linux安装、Nginx反向代理、负载均衡学习基础上,请有需要的客官进入第二十六章学习
1. 查看Linux内核
uname -r
要求3.10版本以上
2. 卸载老版本Docker,避免产生影响
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3. 升级yum和配置源
yum install -y yum-utils ##执行第一个命令,给yum升个级。
##执行的第二个命令
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4. 安装Docker
yum install --setopt=obsoletes=0 docker-ce-20.10.8-3.el7 docker-ce-selinux-20.10.8-3.el7.noarch
5. 启动HelloWorld官方自带程序项目验证
systemctl start docker
systemctl enable docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
systemctl status docker
docker run hello-world
三、Docker常用操作
1. Docker常用操作
1.1 镜像
查看镜像:images
查找镜像:search 镜像名
拉取镜像:pull 镜像名:版本
移除镜像:rmi 镜像id或名字
1.2 容器
安装容器:run
启动容器:start 容器id或者名字
停止容器:stop 容器id或者名字
查看容器:ps -a
移除容器:rm 容器id或者名字
重启容器:restart 容器id或者名字
进入容器内部:exec 容器id或者名字
退出容器内部:exit
查看容器日志:logs
2. 拉取tomcat镜像
docker pull tomcat:8.0
等待时间较长
3. 启动容器
docker run tomcat:8.0
4. 查看容器
查看当前正在运行的容器
docker ps
查看所有容器,包括运行中的和未启动的
docker ps -a
5. 移除容器
docker rm 容器id(通过查看容器查到)
6. 设置端口、启动容器
docker run -p 8080:8080 -d --name tomcat8 tomcat:8.0
端口号看个人情况
7. 启动Tomcat容器
docker start tomcat8
run是创建时执行,是创建+启动
start是启动已经创建的容器,是启动
8. 进入容器
docker exec -it tomcat8 /bin/bash
9. 拉取MySQL镜像
docker pull mysql:8
10. 启动MySQL镜像
docker run --name mysqq -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
然后我们就可以快乐的启动MySQL了。哦耶!!!
11. 创建Docker镜像
11.1 创建目录
/usr/local/docker/jar/demo
11.2 传入jar文件
通过网盘分享的文件:240919_DemoNginx-1.0-SNAPSHOT.jar
链接: https://pan.baidu.com/s/1QgBn1kCKKzLguf4INeYEIA?pwd=eyqa 提取码: eyqa
将如上文件传入该目录(/usr/local/docker/jar/demo)
11.3 安装环境
执行如下命令
docker pull openjdk:8
11.4 在该目录创建Dockerfile文件
无后缀名
将如下信息填入该文件
FROM openjdk:8
ADD 240919_DemoNginx-1.0-SNAPSHOT.jar /app.jar
RUN bash -c ‘touch /app.jar’
ENTRYPOINT [“java”,“-jar”,“/app.jar”]
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo ‘Asia/Shanghai’ >/etc/timezone
11.5 创建镜像
cd /usr/local/docker/jar/demo
docker build -t demo .
11.6 启动项目
docker run -d -p 8888:8888 --name demo001 demo .
进入如下网址
http://192.168.189.103:8888/test/getval
192.168.189.103是虚拟机的地址
总结
本文讲述了:
Docker:开源的应用容器引擎;
在下攸攸太上,你们的生命也是通过无数的植物动物的生命堆出来的尸山血海罢了。既然如此,不必感到负罪,而是珍惜自己的生命,就是对所有你所消灭的所有生命的最大的感恩!