7.11学习笔记

68 阅读5分钟

docker

 

三、docker常用操作:

image.png

需要学会自定义镜像的构建,方便将本地的项目部署到docker上。docker bulid;

docker save 保存文件到本地为一个压缩包。

docker load 将一个压缩包加载到本地镜像中。

但是最常用的还是将镜像推送到镜像仓库,docker push。

  image.png

 

-p 参数用于显式地指定端口映射。它的语法是 -p [hostPort:]containerPort[/protocol],其中:

hostPort 是宿主机上的端口。

containerPort 是容器内的端口。

protocol 可选,默认为 tcp,也可以是 udp 或 sctp。

 

例如,如果你有一个容器运行了一个 Web 服务在容器的端口 8080 上,你可以使用以下命令将它映射到宿主机的端口 80:

docker run -p 80:8080 my-image

这将使得任何对宿主机 IP 地址和端口 80 的请求都会被转发到容器的 8080 端口。

image.png  

 

对nginx服务器上的一个目录进行挂载,映射到本地Linux主机上的html目录中。

image.png

也就是这两个目录相互关联,哪一方修改,另一方也会跟着修改。

 

请注意,数据卷的默认存储位置是在宿主机的 /var/lib/docker/volumes/ 目录下,但是具体的存储位置可能因驱动程序的不同而变化。此外,数据卷的使用和管理可以通过 Docker Compose 或 Kubernetes 等编排工具进一步自动化。

 

数据卷、数据卷容器及容器互联相关:  

juejin.cn/post/717031…

 

image.png  

给MySQL做挂载实现数据持久化。

-v 前面是宿主机也就是本地的Linux虚拟机目录,‘:’后面是容器内的最小化系统中的目录。

也是就 宿主机目录:容器目录。

image.png

运行没成功是因为复制的时候把 ‘>’ 符号也赋值进去了。

image.png

总之两种都是对的,上面那个去掉前面一列的’>’符号就可以了。

 

 

自定义镜像:

image.png

右边是Dockerfile文件,描述镜像结构。

运行如下:

image.png 其中,要求运行命令的目录里需要有dockerfile文件,否则在使用命令的时候需要自己描述镜像结构。后面的.表示在当前目录下,也就是demo目录。

dockerfile文件内容如下:

image.png

 

执行docker images可以发现:

image.png 刚刚自定义的镜像已在docker中了。

   

实现容器间的通信,7.10学习笔记中有链接可以看看。

如下是具体实现过程:

image.png

使用docker自带的网络会有一种缺陷,就是docker会按顺序自动的给启动的容器分配一个地址,那么可以考虑一个问题。也就是不同的启动顺序每次容器分配的网络地址是会变化的。所以为了不那么麻烦每次都要查看网络地址。

docker提供了一个创建网络和容器链接指定网络的能力,也就是上述命令。

那么如何完成不同容器之间的通信呢?

我们需要创建一个自己的网络,然后让容器加入这个网络,每一个容器在网络上都有一个固定的地址,所以我们就可以通过容器名映射到网址上,从而实现容器间的通信。

拓展,我们知道,在docker 每一个容器都有它自己的配置文件,正是因为这些文件我们才能通过名字就可以实现不同容器之间的通信了,我们使用inspect命令就可以查看到容器的网络等其他的配置信息。

 

ip addr命令出现下面内容(最下面的那个网络):

image.png

让容器连接网络

image.png

查看MySQL数据库的信息,容器名为mysql01

image.png

运行信息:

image.png

挂载信息:

image.png  

端口信息:

  image.png

具体的挂载信息:

image.png

最后就是我们所学的网络信息了:

image.png  

可以看到这里有两段网络信息,上面的就是docker自动分配的网络地址和信息,下面的就是连接的“ywcm”网络的地址和信息。

笔者在写的时候,nginx容器是未启动的,所以nginx的inspect信息是这样的:

image.png  

启动后就可以看到像这样子的信息了:

image.png


这是第一种连接网络的办法!****


下面是第二种:****

在容器创建的时候就连接指定网络。

image.png

这种就比较方便了。但是此时配置文件里就有不一样的地方了,这种方式仅连接了一个网络。

这时就无法与docker默认的网桥里的容器连接上了。但是一般我们都是会指定网络来连接的,很少放到默认网桥去,所以知道一下就好。

image.png

进入容器中与其他容器进行互ping也是可以的

image.png

可以看到这里用网络地址或者容器名都可以ping到。

 

 

基础的docker知识就学完了,现在学习真实项目的部署是如何实现的。

项目部署****

真实项目部署时,像数据库这样子的容器基本是不会做端口映射的,所以无法通过网络地址来访问的,所以我们只能通过容器名来访问。

image.png

可以看到yml文件里面没有写死。

这里是dev环境下的。

image.png

这里是本地环境下的:

image.png

修改

image.png  

转到当前目录,并准备好dockerfile 和 将要部署的环境也就是压缩包.jar或者.tar

image.png  

 

创建容器并配置: image.png

部署前端:

docker run -d \

 --name nginx \

 -p 18080:18080 \

 -p 18081:18081 \

 -v /root/demo/nginx/html:/usr/share/nginx/html \

 -v /root/demo/nginx/nginx.conf:/etc/nginx/nginx.conf \

 --network ywcm \

 nginx

 

image.png  

docker composer一键部署。

  网络相关:

image.png