docker
三、docker常用操作:
需要学会自定义镜像的构建,方便将本地的项目部署到docker上。docker bulid;
docker save 保存文件到本地为一个压缩包。
docker load 将一个压缩包加载到本地镜像中。
但是最常用的还是将镜像推送到镜像仓库,docker push。
-p 参数用于显式地指定端口映射。它的语法是 -p [hostPort:]containerPort[/protocol],其中:
hostPort 是宿主机上的端口。
containerPort 是容器内的端口。
protocol 可选,默认为 tcp,也可以是 udp 或 sctp。
例如,如果你有一个容器运行了一个 Web 服务在容器的端口 8080 上,你可以使用以下命令将它映射到宿主机的端口 80:
docker run -p 80:8080 my-image
这将使得任何对宿主机 IP 地址和端口 80 的请求都会被转发到容器的 8080 端口。
对nginx服务器上的一个目录进行挂载,映射到本地Linux主机上的html目录中。
也就是这两个目录相互关联,哪一方修改,另一方也会跟着修改。
请注意,数据卷的默认存储位置是在宿主机的 /var/lib/docker/volumes/ 目录下,但是具体的存储位置可能因驱动程序的不同而变化。此外,数据卷的使用和管理可以通过 Docker Compose 或 Kubernetes 等编排工具进一步自动化。
数据卷、数据卷容器及容器互联相关:
给MySQL做挂载实现数据持久化。
-v 前面是宿主机也就是本地的Linux虚拟机目录,‘:’后面是容器内的最小化系统中的目录。
也是就 宿主机目录:容器目录。
运行没成功是因为复制的时候把 ‘>’ 符号也赋值进去了。
总之两种都是对的,上面那个去掉前面一列的’>’符号就可以了。
自定义镜像:
右边是Dockerfile文件,描述镜像结构。
运行如下:
其中,要求运行命令的目录里需要有dockerfile文件,否则在使用命令的时候需要自己描述镜像结构。后面的
.表示在当前目录下,也就是demo目录。
dockerfile文件内容如下:
执行docker images可以发现:
刚刚自定义的镜像已在docker中了。
实现容器间的通信,7.10学习笔记中有链接可以看看。
如下是具体实现过程:
使用docker自带的网络会有一种缺陷,就是docker会按顺序自动的给启动的容器分配一个地址,那么可以考虑一个问题。也就是不同的启动顺序每次容器分配的网络地址是会变化的。所以为了不那么麻烦每次都要查看网络地址。
docker提供了一个创建网络和容器链接指定网络的能力,也就是上述命令。
那么如何完成不同容器之间的通信呢?
我们需要创建一个自己的网络,然后让容器加入这个网络,每一个容器在网络上都有一个固定的地址,所以我们就可以通过容器名映射到网址上,从而实现容器间的通信。
拓展,我们知道,在docker 每一个容器都有它自己的配置文件,正是因为这些文件我们才能通过名字就可以实现不同容器之间的通信了,我们使用inspect命令就可以查看到容器的网络等其他的配置信息。
ip addr命令出现下面内容(最下面的那个网络):
让容器连接网络
查看MySQL数据库的信息,容器名为mysql01
运行信息:
挂载信息:
端口信息:
具体的挂载信息:
最后就是我们所学的网络信息了:
可以看到这里有两段网络信息,上面的就是docker自动分配的网络地址和信息,下面的就是连接的“ywcm”网络的地址和信息。
笔者在写的时候,nginx容器是未启动的,所以nginx的inspect信息是这样的:
启动后就可以看到像这样子的信息了:
这是第一种连接网络的办法!****
下面是第二种:****
在容器创建的时候就连接指定网络。
这种就比较方便了。但是此时配置文件里就有不一样的地方了,这种方式仅连接了一个网络。
这时就无法与docker默认的网桥里的容器连接上了。但是一般我们都是会指定网络来连接的,很少放到默认网桥去,所以知道一下就好。
进入容器中与其他容器进行互ping也是可以的
可以看到这里用网络地址或者容器名都可以ping到。
基础的docker知识就学完了,现在学习真实项目的部署是如何实现的。
项目部署****
真实项目部署时,像数据库这样子的容器基本是不会做端口映射的,所以无法通过网络地址来访问的,所以我们只能通过容器名来访问。
可以看到yml文件里面没有写死。
这里是dev环境下的。
这里是本地环境下的:
修改
转到当前目录,并准备好dockerfile 和 将要部署的环境也就是压缩包.jar或者.tar
创建容器并配置:
部署前端:
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
docker composer一键部署。
网络相关: