docker跟virtualbox一样:是一个虚拟软件,可以创建多个程序的运行环境。
docker与virtualbox的差别:docker不会虚拟出自己的内核,而是直接使用宿主机的内核。
为什么要用docker?
集群:分布式相关的环境使用和部署
mysql长沙 mysql北京 mysql上海 数据同步,可以相互提供数据服务,而一旦某一个地方服务器崩溃,例如上海服务器崩溃了,那么可以从其他地方的服务器提供数据服务。
mysql分布式集群
那在需要多环境开发,需要多台服务器时,就可以用doeker构建各种分布式开发环境。
Docker
开源的应用容器引擎,容器是完全使用沙箱(网络编程虚拟执行环境)机制,相互之间是不会有任何接口,独立的。
1. 帮助我们构建构建多个各种的开发环境,让我们进行开发和测试
2. 容器里面的文件,同步到本地不需要像virtualbox那样下载并配置等
Docker组成
1. 镜像image--镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,可以通过镜像创建多个容器服务;
2. 容器container--利用容器技术,独立运行一个或者一组应用,通过镜像来创建的;
3. 仓库--存放镜像的地方,分为公有仓库和私有仓库,Docker Hub(默认是国外的)。
Docker特点:
1. 轻便--容器内应用直接运行在宿主机的内核,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了;
2. 快捷--让应用可以更快速的交付和部署;
3. 隔离--每个容器是相互隔离的,每个容器内都有一个属于 自己的文件系统,相互影响;
4. 高效--更高效的计算资源利用,在同一硬件上运行更多工作负载。
Docker安装与卸载
安装:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 参考:https://www.runoob.com/docker/ubuntu-docker-install.html
测试是否安装成功:sudo docker version 查看docker信息
卸载--删除安装包:sudo apt-get purge docker-ce
卸载--删除镜像、容器、配置文件等内容:sudo rm -rf /var/lib/docker
阿里云镜像加速:登录阿里云找到容器服务,找到镜像工具里面的镜像加速器,配置使用,参考:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
镜像
su root 切换值root用户,在运行docker run hello-world,即可创建并运行hello-world镜像
1. 列出镜像
① 前提--有对应的镜像才可以创建对应的容器
②新建容器并启动 docker run [可选参数] image --name:容器名称 -d:后台运行 -it:使用交互方式运行,并进行容器 -p: ip:主机端口以及容器端口
示例: docker run -it nuuntu /bin/bash
docker images [ -a/-aq ]当前运行的docker镜像list
2. 查找镜像
docker search dockername 可查看官方对应dockername所有镜像以及下载量信息
NAME 镜像名 DESCRIPTION 镜像的描述 OFFICIAL 是否docker官方发布 STARS 类似Github里面的start,表示点赞,喜欢的意思 AUTOMATED:自动构建
3. 拉取镜像
docker pull mysql 直接下载罪行版本的mysql,其他镜像同样方式
docker pull mysql:5.7 拉取5.7版本的mysql
4. 删除镜像
docker rmi -f dockername/IMAGE ID 删除对应的镜像
docker rmi -f 'docker images -ap' 删除所有镜像
容器
1. 创建容器
docker run [可选参数] 搜索创建镜像 可选项:--name:容器名称 -d:后台方式运行 -i:交互式操作 -t:终端 -p:制定容器的端口
docker run -it ubuntu /bin/bash
要退出终端,直接输入exit退出。
2. 查看容器
docker ps 查看正在运行的容器
docker ps -a 查看所有的容器
docker ps -n=1 查看最近的n个容器
docker ps -aq 查看所有容器的id
3. 启动停止进入
docker start 容器id 启动
docker restart 容器id 重启
docker attach 容器id 从容器退出,并停止容器
docker exec -it 容器id 容器command 从容器退出,但容器并不退出
docker stop 容器id 停止容器,暂停,内存还在
docker kill 容器id 干掉容器,内存释放
docker top 查看容器的进程
4. 删除容器
docker rm 容器名/id 删除某个容器
docker rm -f ‘[sudo] docker ps -aq’ 删除所有容器
docker ps -aq | xargs sudo docker rm -f 删除所有容器
主机与容器文件传输
docker cp 容器要传输文件的地址:主机地址 主机上传到容器,对调一下即可
docker cp 主机地址:容器要传输文件的地址
容器数据卷
1. 概述
如果数据都在容器中,那么我们容器删除,数据就会丢失! Mysql,容器删除==删库跑路!
需求:数据可以持久化,存储在本地,所有我们需要容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面。
2. 使用:具名和匿名挂载
具名挂载:docker run 【可选参数】 -v 主机目录:容器目录
docker run -it --name ubuntu01 -v /home/docker/ubuntu02:/home ubuntu /bin/bash 将容器ubuntu在home下的文件挂在主机/home/docker/unubtu2文件夹下
touch test.py 在docker容器中进行文件创建的命令
匿名挂载: -v 容器内路径 比较少用,因为随机的,但可以查询所有挂载信息查询到对应信息 docker inspect 容器名
具名挂载: -v卷名:容器内路径
指定路径挂载: -v 宿主机路径:容器内路径
3. 查看容器元数据
docker inspect 容器
操作案例
mysql:5.7 镜像挂载操作流程
1. 拉取mysql:5.7
2. 容器mysql01挂载
创建了容器mysql01,将主机文件conf挂载在本机/eec/mysql/conf.d中,data挂载在本机/ver/lib/mysql中,其通过账号为root 密码为qwe123进行访问。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理