1.docker介绍:
Docker是一种虚拟化技术,它允许你在一台机器上运行多个应用程序,每个应用程序都运行在一个独立的虚拟器中,互相之间不会干扰。这些容器使用了操作系统级别的虚拟化技术,课可以在同一物理机器上运行多个应用程序,同时每个容器又拥有自己独立的文件系统和资源管理。Docker可以让你快速地创建、部署、和复制和移动应用程序,应为它能够在不同的环境中保持应用程序的一致性和可移植性,通过使用Docker,你可以更加轻松的构建、打包和发布运行应用程序。
2.docker的优点
启动速度快(秒级),由于祛除了管理程序的开销,docker容器拥有很高的性能,同一台宿主机可以运行更多的容器,有效的利用了资源
能够开发,测试和部署提供一致性的环境,避免了在开发或者测试时一切正常,但在生产环境中却不能运行的问题
鼓励面向服务架构,docker推荐的那个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型
3.docker 的用途
提供一次性的环境,比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境
提供弹性的云服务,应为docker容器可以随开随关,很适合动态扩容和缩容
组建微服务架构,通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构
4.doker与虚拟机器的区别
vm(vmware)在宿主机器,宿主机器操作系统的基础上创建虚拟层。虚拟化的操作系统,虚拟化的仓库,然后再安装应用
docker 在宿主机器的操作系统上创建docker引擎,直接通过宿主机的操作系统调用硬件资源,而不是虚拟化操作系统和硬件资源,所以占用资源更少,性能更高
二、docker的三大核心组件
1.docker 的三大要素
镜像:docker镜像是一个特殊的文件系统,除了提供容器运行时所有需的程序、库、资源、配置等文件外、还包含了一些为运行时准备的配置参数,镜像不包含任何动态数据,其内容在构建之后也不会改变,镜像可用来创建dockerd容器,用户可以使用设备上已有的镜像来安装多个相同的docker容器
容器:镜像创建的运行实例,docker利用容器来运行应用,每个容器都是相互隔离的,保证安全的平台,我们可以把容器看做是一个轻量级的linux运行环境。
镜像仓库:集中存放镜像文件的地方,用户创建玩镜像后,可以将其上传到公共仓库或私有仓库,需要在另一台主机上使用该镜像时,只需要重仓库上下载即可
docker容器的运行逻辑,docker使用客户端、服务端(c/s)架构模式,docker守护进程(docker daemon) 作为server端接受docker客户端的请求,并负责创建,运行分发docker容器,docker守护进程一般在docker主机后台运行,用户使用docker客户端直接跟docker守护进程信息交互
2 .docker运行过程
docker 客户端,用户和docker守护进程(docker daemon)建立通信的客户端,docker客户端只需要像docker服务器或者守护进程发出请求(docker 构建、docker拉取和docker启动等指令),服务器或者守护进程将完成所有工作并且换回结果
docker 主机:一个物理机或者虚拟的机器用户执行docker 守护进程和容器
Docker守护进程:接收并处理Docker客户端发送的请求,监测Docker API的请求和管理Docker对 象,比如镜像、容器、网络和数据卷。
注意:在 Docker 中,Docker 客户端和 Docker 主机可以在不同的机器上,甚至可以通过网络远 程连接。这意味着你可以在本地的机器上安装 Docker 客户端,然后通过 Docker 客户端与远程的 Docker 主机进行通信和操作,而 Docker 主机可以部署在不同的机器上,例如云服务器、虚拟 机、物理机等。 这种分离的架构使得 Docker 可以实现分布式部署和管理,方便在不同的环境中管理和运行容器化 应用程序。例如,你可以在本地的开发机器上使用 Docker 客户端构建和测试容器镜像,然后将镜 像推送到远程的 Docker 主机上进行部署和运行
三、安装
安装docker时需要一些基本的前提条件: 1. 运行64位cpu架构的机器(x86_64, amd64),不支持32位机器 2. 运行linux3.8或更高的内核(可以使用uname -a 命令查看系统内核) 3. 内核必须支持一种合适的存储驱动:Device Messager,AUFS,vfs等,默认为Device Messager。 4. 内核支持cgroup和命名空间 注:cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限 制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)
1. 卸载旧版本的 Docker(如果有)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.安装docker依赖包
首先,需要设置 Docker CE 的仓库。可以使用以下命令:
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
注意:Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo: [Errno 14] problem making ssl connection
这是因为国内访问不到docker官方镜像的缘故,通过阿里源进行设置
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装 Docker CE
使用以下命令安装 Docker CE:
sudo yum install -y docker-ce
注意:如果安装了多个docker仓库,使用 yum install 或者 yum update 命令时后面不跟版本信息的 话,将始终安装最高版本的docker! 安装指定版本的docker CE,需要指定完整的包名称,例如安装仓库中的这个版本 18.03.0.ce1.el7.centos ,其命令为
sudo yum install -y docker-ce-18.03.0.ce
4.操作 Docker
1.启动docker服务
sudo systemctl start docker
2.查看docker服务状态
sudo systemctl status docker
3.停止docker服务
sudo systemctl stop docker
5.移除docker
1.删除docker程序包:
sudo yum remove docker -ce docker -ce-cli containerd.io
注意:
docker-ce:docker社区版,即docker的核心引擎和cli工具
docker-ce-cli:docker的cli工具
containerd.io :docker容器运行时,用于管理容器生命周期的核心组件
2.删除docker镜像,容器的数据卷
sudo rm -rf /var/lib/docker
3.删除docker配置文件和日志
sudo rm -rf /etc/docker
sudo rm -rf /var/log/docker
完成以上操作后,docker就被完全卸载了
四、常用操作
1.镜像相关的操作
docker images
2.删除本地镜像
docker rmi 镜像名称:标签
eg: docker rmi tomcat:9.0
注意:docker rmi = docker image rm,标签可以理解为指定版本,可有可无,根据实际情况而定,不写的话默认最新版本的镜像
3.从仓库拉取镜像
docker pull 镜像名称:标签
eg:docker pull tomcat:8.0
4.把本地镜像推送到仓库
docker push tomcat:9.0
注意:
1.想要推送必须先登录到目标仓库
2.镜像名称可以在docker images中查看,docker hub是docker 官方提供的共用镜像仓库,如果是第三方仓库也可以在指定仓库中搜索,如果是通过dockerfile构建的镜像,可以使用from 指定镜像名称,如果是docker compose,可以在compose文件中使用image来指定镜像名称
2.容器相关操作
1.查看运行的容器
docker ps
2.查看全部容器(包括正在运行的)
docker ps -a
参数
-a 查看全部,不跟参数时,只显示运行的容器
注意:不同的docker版本可能有不同的状态,上述状态是常见的状态
up :表示容器正在运行
exited : 表示容器已经停止运行,如果容器以正常方式退出,则状态exited,并且在容器退出后可以使用docker start 命令重启容器
created :表示容器一斤干杯创建,但是尚未启动
restarting : 表示容器正在重新启动
paused:表示容器当前处于暂停状态
dead :表示容器的进程已经死亡
3.启动容器
1.参数启动方式
docker run -d 镜像名称
参数: -d 表示容器后台运行
第一次启动之后就会生成容易id ,可以通过docker ps 查看
或
docker run --name my-redis-container -p 6379:6379 -d 镜像名称
参数:
--name 表示启动后的容器名称
-p 6379:6379 端口映射:前表示主机部分,:后表示容器部分
redis 表示启动的镜像名称
2.默认启动方式
docker start 容器id
3.配置文件启动方式
docker -compose -f mariadb.yml up -d
参数
-d 后台启动服务,如果没有 -d ,就是直接前台输出启动日志信息,ctrl+c后,服务就停了
-f 指定yml文件
up 创建和启动容器
version:'3.1'
services:
#数据库服务名称
mariadb
#镜像名称
image:mariadb:10.5.5
container_name:"mariadb"
#总是重启后启动
restart:slways
#设置访问账号密码
environment:
MYSQL_USER:"root"
MYSQL_PASSWORD:"123456"
TZ:"Asia/Shanghai"
#端口映射
ports:
-"3306:3306"
#挂载
volumes:
-/data/mysql:/var/lib/mysql
-/var/log/mysql:/var/log/mysql
-/etc/mysql:/etc/mysql
4.停止服务
docker stop 容器名
eg:docker stop 64028b3163
或者停止服务并删除容器
docker -compose -f mariadb.yml down
参数:
-f 指定yml文件
-down 停止和删除容器、网络、镜像、卷
5.重启服务
docker resatart 容器id
6.删除停止的容器
docker rm 容器id
7.强制删除运行的容器
docker rm -f 容器id
8查看服务日志
docker logs -f --tail=100 容器id 或者服务名
参数:
-f 时实查看日志
--tail = 100 显示最新的100行
9 . 进入容器
docker exec -it 容器id bash
参数:
exec 正在运行的容器中执行命令
-it 开启交互模式终端
Bash 模式
退出:exit
10.修改镜像名称或者tag
docker tag tomcat:9.0 tomcat_new:9.0.0
相当于另存为一个镜像,名称和tag随便起,但是经常的id 是一样的
11.把镜像打成tar包
docker save -o tomcat.tar tomcat:9.0
参数:
-o 写入文件
12.把镜像tar包恢复到本地
docker load -i tomcat.tar
参数:
-i 从tar 归档文件中读取
13.复制容器内文件到本地目录下,也可以吧容器里目录下文件复制出来到本地
docker cp d2d5sdf2sf2ds :/etc/mysql/my.cnf /home/