目录
Docker是什么?
Docker的发展
Docker的安装
Docker使用
Docker的运行机制
第一个Docker容器
进入Docker容器
客户机访问容器
Docker是什么?
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
其核心在于将应用及其所有依赖打包成一个可移植的容器,从而实现应用程序的标准化部署和隔离运行。Docker 的设计基于操作系统级虚拟化技术,允许在单一主机上以轻量级的方式运行多个独立的容器,每个容器都包含其应用及其所需的运行时环境,如库、依赖和配置文件等,彼此之间互不影响。
Docker 的主要作用包括:
- 环境一致性:解决开发与生产环境不一致的问题,确保应用在不同环境下的行为一致,减少因环境差异导致的部署故障。
- 快速部署和扩展:应用被打包成轻量级的容器,可以快速在任何支持 Docker 的平台上启动,便于实现自动化部署和横向扩展。
- 资源利用率高:相比传统虚拟机技术,Docker 容器共享主机的操作系统内核,不需要为每个应用分配单独的操作系统资源,因此启动速度快、资源消耗少。
- 隔离性:容器之间相互隔离,每个容器内的应用程序都在自己的环境中运行,不会影响其他容器或主机系统,提高了安全性。
- 持续集成和持续部署(CI/CD):Docker 促进了一种更高效的软件开发流程,使得构建、测试和部署可以自动化进行。
- 微服务架构:Docker 适合微服务架构,每个服务都可以封装在一个容器中,简化服务管理和通信,提高系统的可维护性和可扩展性。
Docker的发展
我们知道,一台物理服务器可以虚拟化出多个虚拟的服务器,让计算机资源得以充分利用;
但是虚拟化技术存在两个缺点:
1、每创建一个虚拟机的时候,都会创建一个操作系统,这个操作系统会占用很多资源,这样无疑大大的增加了资源的消耗,当安装的虚拟机越多,资源消耗就越多。
2、环境兼容性问题,开发时的环境运行正常,部署到虚拟机环境测试则有可能发生错误;
基于硬件级虚拟化技术的缺点和不足,后续又发展出来了另一种虚拟化技术,即操作系统级虚拟化技术;
操作系统级虚拟化 是运行在操作系统之上的虚拟化技术,它模拟的是运行在一个操作系统上的多个不同进程,并将其封装在一个密闭的容器里面,该技术也称为容器化技术。
例如我们将项目部署上服务器,不同的项目我们需要在服务器上安装不同的环境,且应用直接运行在服务器操作系统上,可能会与其他应用争夺资源。那么引入Docker,项目及其所有依赖被打包进一个Docker镜像中,确保了从开发到生产的环境一致性,减少了环境不一致带来的错误。镜像可以在任何安装有Docker的系统上运行,极大提高了应用的可移植性。
容器是在本地操作系统层面上实现虚拟化,直接复用本地主机的操作系统,不需要单独安装操作系统,而传统的虚拟化技术方式则需要单独安装每个虚拟机的操作系统。
Docker的安装
首先,我们知道 Docker 并不是容器,它是一个管理容器的引擎。
我们课程采用的Linux 版本是CentOS 7,学习 Docker 也更推荐在 Linux
环境下使用;
Docker 支持 CentOS 6 及以后的版本;
CentOS7 系统可以直接通过yum 进行安装:
yum update
安装前可以查看一下系统是否已经安装了 Docker:
yum list installed | grep docker
安装:
yum install docker -y
安装后,使用 docker –version(docker version,docker -v)查看 docker
是否安装成功
卸载:
yum remove docker.x86_64 -y
yum remove docker-client.x86_64 -y
yum remove docker-common.x86_64 -y
2-3Docker 服务启动
Centos7安装docker,启动dockerJob for docker.service failed because the control process exited with error…错误。
打开sysconfiglinux文件
vim /etc/sysconfiglinux
修改:
SELINUX=disabled
安装之后启动 Docker 服务;
启动:systemctl start docker 或者 service docker start
停止:systemctl stop docker 或者 service docker stop
重启:systemctl restart docker 或者 service docker restart
检查 docker 进程的运行状态:
systemctl status docker 或 者 service docker status
查看docker 进程:
ps -ef | grep docker
2-4Docker 服务信息
docker info 查看 docker 系统信息
docker 查看所有的帮助信息
docker commond –help 查看某个 commond 命令的帮助信息
Docker使用
Docker的运行机制
Docker并不是容器,而只是一个管理容器的引擎;
Docker的底层运行原理:
Docker 服务启动→下载镜像→启动该镜像得到一个容器→容器里运行着我们想要的程序;
第一个Docker容器
根据Docker的运行机制,我们将按照如下步骤运行第一个Docker容器;
1、将Docker服务启动;
systemctl start docker
2、下载一个镜像,Docker 运行一个容器前需要本地存在有对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载(默认是 Docker
Hub 公共注册服务器中的仓库 https://hub.docker.com)。
也可以在命令行使用命令搜索要使用的镜像,比如 docker search tomcat 进行搜索,然后下载所需要的镜像:
下载镜像:docker pull tomcat
docker pull tomcat
显示本地已有的镜像:docker images
docker images
在列出信息中,可以看到几个字段信息
REPOSITORY:来自于哪个仓库,比如 docker.io/tomcat TAG:镜像的标记,比如 latest
IMAGE ID:镜像的 ID 号(唯一)
CREATED:创建时间
SIZE:镜像大小
运行镜像:docker run tomcat 前台运行, 要后台运行,加参数 -d
启动下载下来的镜像得到一个容器:
docker run -d docker.io/tomcat 或 者 docker run -d 41a54fe1f79d
默认是前台启动,如果需要后台启动,指定-d 参数;
通过 ps -ef | grep tomcat 查看,检查 tomcat 镜像是否启动容器成功;
启动失败换成:docker run --privileged -d docker.io/tomcat
docker run --privileged -d docker.io/tomcat
进入Docker容器
进入容器:docker exec -it 容器ID bash
其中i 表示交互式的,也就是保持标准输入流打开;
t表示虚拟控制台,分配到一个虚拟控制台;
容器ID可通过docker ps查看
退出容器:exit
客户机访问容器
从客户机上访问容器,需要有端口映射,docker 容器默认采用桥接模式与宿主机通信,需要将宿主机的 ip 端口映射到容器的 ip 端口上;
停止容器:docker stop 容器 ID/名称
启动容器:docker run -d -p 8080:8080 docker.io/tomcat 或者 容器 ID
docker run -d -p 8080:8080 docker.io/tomcat
-p 8080:8080: 端口映射参数。它将宿主机的8080端口映射到容器内的8080端口。这意味着,你可以通过宿主机的8080端口访问容器中应用提供的服务。
如果报错:
Cannot find /usr/local/tomcat/bin/setclasspath.sh
This file is needed to run this program
换成下面的命令:
docker run --privileged -d -p 8080:8080 -it docker.io/tomcat
这时再到浏览器访问:你的ip地址加端口
http://192.168.10.129:8080/
如果无法访问,可参考
Docker 解决tomcat容器启动成功,无法访问的问题_docker启动tomcat成功,访问不了-CSDN博客