如下文档
https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d
注意因为docker也是一个服务,所以也要启动docker,也可以对Doceker进行开机自启动
镜像,就是一个包,将应用本身以及应用运行所需要的环境都打包,形成了镜像
容器,镜像的实例,可以理解为镜像运行时所创建的一个隔离环境,容器之间互不干扰
也就是镜像是一个应用,容器是该应用的各个的运行时的隔离环境,可以理解为应用多开,每个容器都在运行同一个应用
(另一种较为好说法是,镜像就是一个类或者模板,而容器就是他们的实例,相当于实例化对象)
镜像仓库,官方会提供镜像仓库,可以理解为类库,里面有着许多应用的镜像,当然,国内大厂也维护了许多镜像仓库,我们上面因为使用的是阿里云的加速,所以就是阿里云的镜像仓库
Docker主机,运行Docker的虚拟机,也称为宿主机
我们在进行团队开发时,如果遇到有人使用的开发工具的版本不一致,那么会造成许多麻烦,而Docker就保证了应用版本的绝对一致,因为只要是同一个镜像实例化出来的容器,那么就一定是同一个版本
运行思路如下所示:
先从仓库(本地或者云)找到需要的镜像并拉取到宿主机、
之后创建该镜像的容器,给容器命名,该容器就是一个实实在在的应用了
-d:后台运行
–name 名称 :给容器起个名字
-p :对于-p选项,第一个是宿主机准备开放的端口号,第二个是容器的端口号,其中宿主机端口号可以自定义修改,而容器的端口号轻易不改
-e:设置环境变量,对于mysql来说,必须要设置的环境变量是数据库的密码,具体还有哪些环境变量可以设置可以去官网查阅:hub.docker(访问外网)
最后是指定的运行的镜像的名字
其中,对于p选项:端口映射,
我们可以通过宿主机的ip访问到宿主机,但是无法通过容器的端口访问到容器,所以,如果pc客户端想要访问到容器,可以将容器的端口映射到宿主机的某个端口,通过访问宿主机这个端口,就可以直接访问到容器的端口,也就访问到了容器,如上图
注意,这里介绍了一种将自己写的镜像给别人使用的方法:
即,将自己的镜像文件上传到镜像仓库(一般是公司的私服),之后同事就可以从镜像仓库拉取到他们的本地进行使用
案例:
1、搜索镜像,查看镜像名称,可以进入dockerhub官网进行查文档:
2、拉取镜像:
docker pull nginx
3、查看本地镜像列表:(确定是否拉取成功)
docker images
该命令会将本地宿主机所有已经下载的镜像展示出来
补充:4、镜像的保存和下载的一种方式:(可以用于自定义镜像在不同电脑之间的转移)
tip:如果忘了一个命令怎么写,可以使用–help 就会显示帮助文档:
将镜像文件保存到一个tar包内,之后可以将次tar包用U盘拷到另一台电脑并下载
拿到tar包之后,下载该包,就可以下载里面的镜像到本地仓库了
5、创建并运行容器(注意,每次run一次,就会创建新容器)
docker run -d --name nginx -p 80:80 nginx
(无环境变量,无需-e)
6、查看容器运行状态
docker ps(只能查看运行中的容器)
docker ps -a(查看所有容器,包括停止的容器)
7、停掉容器(相当于关闭应用)
注意,这里只是把容器停止,而不是删除容器,容器虽然被停止,但是还存在
8、运行容器(相当于运行应用)
9、查看日志
docker logs nginx
docker logs -f nginx(持续访问nginx日志)
当持续访问nginx日志时,会实时更新nginx的日志,
例如,我们通过pc端的浏览器访问虚拟机的开放映射的端口
可以进行访问,这条访问信息就会在控制台进行更新显示
注意,要想访问到虚拟机的本地ip的80端口(不写默认80),需要将虚拟机的防火墙关闭,或者开放80端口的防火墙
10、进入容器
docker exec -it nginx bsah(表示进入容器的命令行窗口)
之后就可以在这个界面,进行mysql的一些操作
首先登录,可以进入到mysql客户端
之后可以执行show databases
输入exit 就退出mysql客户端,到了当前容器命令行
再次输入exit,就退出容器,到了操作系统
11、删除容器
docker rm 容器名
(注意不是rmi rmi是用来删除镜像的)
我们不可以删除正在运行的容器,
第一种方法,将容器停掉,再去删除
第二种方法,强制删除。docker rm -f mysql
使用vi编辑器,进入到root账户下 ~/.bashrc目录,如下:
进来之后,alias 别名=‘原始名’
可以使用此方法,将图示第四个优化显示方法的命令,改为dps
https://b11et3un53m.feishu.cn/wiki/MWQIw4Zvhil0I5ktPHwcoqZdnec
宿主机中的目录(一般是固定的)与数据卷进行映射,而数据卷与容器中指定目录形成映射,从而也就是宿主机的目录与容器中的指定目录形成双向映射
向宿主机中的目录增删改查,那么映射到的容器的指定目录会实时同步
先删除原有容器(因为要再创建一般,当然如果创建不同的容器,则不用再删除)
之后在run命令里,加一个-v 数据卷名字:容器内指定目录
(数据卷名字可以随意起)
创建完之后,可以通过docker volume inspect 数据卷名字
来查看宿主机的哪个目录与数据卷建立了链接,一般这个路径是固定的
之前我们使用过docker volume inspect html ,表示查看数据卷的详情
现在不加volume 表示查看容器的详情
我们之前已经对容器nginx进行过挂载,所以显示没问题
但是我们之前没有对mysql挂载,他这里却显示挂载,说明系统自动进行了挂载,称为匿名挂载(有一些容器会进行自动挂载)
但是这种挂载的数据卷名字很复杂,并且当更新容器版本时,容易造成数据的丢失,所以要使用本地挂载对其进行解决
当完成挂载之后,我们去宿主机查询data目录,里面会有容器的对应的文件内容
同时,修改宿主机的本地挂载目录,数据库的内容也会被更改
其中mysql容器的数据目录、配置文件目录、初始化脚本目录等等,都需要去官方文档查看