一:初识Docker
1.1Docker是什么:
docker是一个快速交付应用,运行运用的技术;
1.2.Docker有什么优势:
1).可以将程序及其依赖,运行环境一起打包为一个镜像,可以迁移到任意的Linux系统;
2).运行时利用沙箱机制行成隔离机制,各个应用互不干扰;
3).启动、移除可以通过一行命令完成,方便快捷;
1.3.Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?
1).Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像;
2).Docker应用运行在容器中,使用沙箱机制,相互隔离。
1.4.Docker如何解决开发、测试、生产环境有差异的问题?
Docker镜像中包含了完整的运行环境,包括系统函数库,仅依赖Linux系统内核,因此可以在任意Linux系统上运行。
2.Docker和虚拟机的区别:
虚拟机:是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。
Docker:仅仅是封装函数库,并没有完整的操作系统。如图
对比来看:
小结:
Docker与虚拟机的差异:
1).Docker是一个系统进程,虚拟机是在操作系统中的操作系统;
2).Docker体积小,启动速度快,性能好,虚拟机体积大,启动速度慢,性能一般。
3.Docker的架构:
3.1镜像和容器
镜像(Image):Docker将应用程序及其所需要的依赖,函数库,环境,配置等文件打包在一起,称为镜像;
容器(Container):镜像中应用程序运行后行成的进程就是容器,只是Docker会给容器的进程做隔离,对外不可见;
3.2Docker架构
3.3安装Docker
4.Docker的基本操作
4.1镜像基本操作:
docker --help 查看所有指令
docker pull 镜像名:版本号(拉取镜像)
docker images :查看镜像
docker images -q 只查看id
docker save -o 文件名:保存镜像为tar的压缩包
docker load -i 指定一个tar文件:加载一个镜像
docker rmi 镜像名称/镜像id:删除镜像
4.2容器相关命令
容器基本操作
docker run:创建并运行一个容器
docker pause:让一个运行的容器暂停
docker unpause:让一个容器从暂停状态恢复到运行
docker stop:停止一个运行的程序
docker start:让一个停止的容器再次运行
docker rm:删除一个容器
4.2.1运行
docker run 运行一个容器
--name 别名
-p 宿主机端口号(可以更改):容器端口号(不可更改)
-d 后台运行
指定镜像名称
注意:以上为一整条完整的命令;
在找不到镜像的时候会自动下载
4.2.2查看容器日志的命令
docker logs
-f 持续监控日志
查看运行状态
docker ps 查看运行状态 -a查看全部
4.2.3案例:进入容器,修改文件
执行命令:
1.进入容器
docker exec -it mn bash
exec:进入容器内部,执行一个命令
-it:允许我们与容器交互
bash:进入容器后执行的命令,bash是一个linux终端交互命令
2.进入nginx的HTML所在目录 /usr/share/nginx/html
cd /usr/share/nginx/html
3.修改index.html内容
sed -i -e 's#Welcome to nginx#努力吧少年#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html
4.访问本地虚拟机地址
4.2.4
数据卷的操作
docker volume create 创建数据间
docker volume ls 查看所有数据卷
docker volume inspect 数据卷名 查看详细数据
docker volume
docker volume
数据卷的挂载
重点:
案例:给mysql挂载本地目录
首先我们在这里要搞清楚数据卷的作用,其实,在这个图当中,数据卷就相当于一个中介,它负责将宿主机和容器连接在一起,所有,在我们修改宿主机或者容器的任意一方时候,另一方也会跟着相应的更改,同步数据
容器不仅可以挂载在数据卷上,还可以挂载在宿主机上
如图:
目录挂载与数据卷挂载的语法是类似的:
-v [宿主机目录]:[容器内目录]
-v [宿主机文件]:[容器内文件]
基本过程如下所示:
1)在将课前资料中的mysql.tar文件上传到虚拟机,通过load命令加载为镜像
2)创建目录/tmp/mysql/data mkdir -p
3)创建目录/tmp/mysql/conf,将课前资料提供的hmy.cnf文件上传到/tmp/mysql/conf
4)去DockerHub查阅资料,创建并运行MySQL容器,要求:
① 挂载/tmp/mysql/data到mysql容器内数据存储目录
② 挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件
③ 设置MySQL密码
此时,我们面临的问题就是写启动命令;
我先将我写启动命令时候出现的一些bug列出:
1.首先用过从dockerhub上进行查询挂载语法该怎么写
2.通过查询:
错误一:故 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d 注意:这种命令是错误的,错误示范如图:
改正后 /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf
错误二:在执行过程中遇到了端口号被占用的问题,如图:
通过命令 netstat -tanlp 如图:
接着通过命令kill 1509杀死该进程后解决
最后通过执行正确的命令:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /tmp/mysql/data:/var/lib/mysql -p 3306:3306 -d mysql:5.7.25;成功完成挂载:如图所示:
测试: