一、什么是Docker
大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:
依赖关系复杂,容易出现兼容性问题
开发、测试、生产环境有差异
什么是Docker
Docker和虚拟机的区别
Docker架构
Docker如何解决依赖的兼容问题的?
将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
将每个应用放到一个隔离容器去运行,避免互相干扰
Docker如何解决不同系统环境的问题?
Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包
镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。
Docker和DockerHub:
Docker是一个CS架构的程序,由两部分组成:
服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令
DockerHub:DockerHub是一个Docker镜像的托管平台。这样的平台称为Docker Registry。
国内也有类似于DockerHub 的公开服务,比如 网易云镜像服务、阿里云镜像库等。
镜像:将应用程序及其依赖、环境、配置打包在一起
容器:镜像运行起来就是容器,一个镜像可以运行多个容器
Docker结构:
1.服务端:接收命令或远程请求,操作镜像或容器
2.客户端:发送命令或者请求到Docker服务端
DockerHub:一个镜像托管的服务器,类似的还有阿里云镜像服务,统称为DockerRegistry
二、安装Docker
安装Docker 108M
启动docker
测试安装成功:
systemctl status docker (active running)
docker -v 查看版本
通过命令启动docker:
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
–镜像加速,需要下载镜像:
docker 下载镜像; 使用docker
docker官方镜像仓库网速较差,我们需要设置国内镜像服务:
参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
镜像操作
容器操作
数据卷(容器数据管理)
三、镜像操作
案例一:拉取镜像,和查看镜像;
镜像相关命令
镜像名称一般分两部分组成:[repository]:[tag]。
在没有指定tag时,默认是latest,代表最新版本的镜像
案例二:导出到 磁盘 ,然后再导入;
docker save –help
docker images
docker save -0 nginx.tar nginx:latest
docker rmi nginx:latest 删除 镜像;
docker load –help
docker load -i nginx.tar
查看 docker images
docker 镜像操作有哪些?
docker images
docker rmi
docker pull
docker push
docker save
docker load
练习:去DockerHub搜索并拉取一个Redis镜像:
1.去DockerHub搜索Redis镜像
2.查看Redis镜像的名称和版本 docker images
3.利用docker pull命令拉取镜像
4.利用docker save命令将 redis:latest打包为一个redis.tar包
5.利用docker rmi 删除本地的redis:latest
6.利用docker load 重新加载 redis.tar文件
四、容器操作
镜像创建容器 :运行,暂停,停止;
docker pause 运行=>暂停
docker unpaose 暂停=>运行
docker start 停止=>开始
docker stop 开始=>停止
docker run
docker logs 查看容器运行日志
docker ps 查看所有运行的容器及状态
docker exec 进入容器执行命令
–案例一:创建运行docker 容器:创建运行一个Nginx容器
步骤一:去docker hub查看Nginx的容器运行命令
docker run –name containerName -p 80:80 -d nginx
命令解读:
docker run :创建并运行一个容器
–name : 给容器起一个名字,比如叫做mn
-p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端
–案例二:进入Nginx容器,修改HTML文件内容,添加“欢迎您” 传智教育
步骤一:进入容器。进入我们刚刚创建的nginx容器的命令为:
docker exec -it mn bash
命令解读:
docker exec :进入容器内部,执行一个命令
-it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
mn :要进入的容器的名称
bash:进入容器后执行的命令,bash是一个linux终端交互命令
步骤二:进入nginx的HTML所在目录 /usr/share/nginx/html:
cd /usr/share/nginx/html
步骤三:修改index.html的内容
sed -i 's#Welcome to nginx#传智教育欢迎您#g' index.html
sed -i 's#<head>#<head><meta charset=”utf-8″>#g' index.html
总结:
docker run命令的常见参数有哪些?
–name:指定容器名称
-p:指定端口映射
-d:让容器后台运行
查看容器日志的命令:
docker logs
添加 -f 参数可以持续查看日志
查看容器状态:
docker ps
–案例三:创建并运行一个redis容器,并且支持数据持久化(视频10)
步骤一:到DockerHub搜索Redis镜像
步骤二:查看Redis镜像文档中的帮助信息
步骤三:利用docker run 命令运行一个Redis容器
五、数据卷
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
数据卷操作的基本语法如下:
docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:
create 创建一个volume
inspect 显示一个或多个volume的信息
ls 列出所有的volume
prune 删除未使用的volume
rm 删除一个或多个指定的volume
–案例一:创建一个数据卷,并查看数据卷在宿主机的目录位置
创建数据卷docker volume create html
查看所有数据docker volume ls
查看数据卷详细信息卷docker volume inspect html