2022
我们一起努力

想要启动一个停止的容器可以加上-a查看

通过 ps 只能看到运行中的容器,但是我们停止的容器是看不到的,可以加上-a 查看所有的容器

docker ps -a

虚拟主机如何搭建数据库_虚拟主机服务器租用_mysql虚拟主机租用怎么配置

我们可以看到 加上-a参数可以看到刚才已经停止掉的容器

启动停止的容器

想要启动一个停止的容器可以使用 start 容器ID

docker start 3752f7088a04

mysql虚拟主机租用怎么配置_虚拟主机服务器租用_虚拟主机如何搭建数据库

这样就把刚才已经停止的容器启动了

删除容器

已经停止的容器可以使用 rm 容器ID删除容器,但是对于运行中的容器可以加上-f参数强制删除

docker rm -f 3752f7088a04

mysql虚拟主机租用怎么配置_虚拟主机服务器租用_虚拟主机如何搭建数据库

这样可以将一个运行的容器强制删除,如果停止的容器可以通过通过 rm删除

docker rm 3752f7088a04

这个时候就把容器给删除掉了

日志挂载优化存储卷优化什么是存储卷

“卷”是容器上的一个或多个“目录”,此类目录可绕过联合文件系统,与宿主机上的某个目录“绑定(关联)”;

mysql虚拟主机租用怎么配置_虚拟主机服务器租用_虚拟主机如何搭建数据库

​ 在中,要想实现数据的持久化(所谓的数据持久化即数据不随着的结束而结束),需要将数据从宿主机挂载到容器中。

​ 管理宿主机文件系统的一部分,默认位于 /var/lib// 目录中;(最常用的方式)

存储卷优化写入速度

镜像由多个只读层叠加而成,启动容器时,会加载只读镜像层并在镜像栈顶部加一个读写层;

虚拟主机如何搭建数据库_虚拟主机服务器租用_mysql虚拟主机租用怎么配置

​ 如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层**到读写层,该文件版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即“写时**(COW)”机制。

虚拟主机如何搭建数据库_mysql虚拟主机租用怎么配置_虚拟主机服务器租用

为了避免这种情况,构建的时候应该加入一个存储卷

增加存储卷增加存储卷

编写增加存储卷,增加日志存储卷/logs,这会是一个匿名存储卷

FROM openjdk:8-jdk-alpineVOLUME /tmp /logsADD learn-docker-storage-1.0-SNAPSHOT.jar app.jarEXPOSE  8003ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

构建镜像

因为我们原来已经构建了镜像,这次使用版本号是 0.0.2

#构建镜像docker build -t learn-docker-storage:0.0.2 .# 查看镜像列表docker images

mysql虚拟主机租用怎么配置_虚拟主机服务器租用_虚拟主机如何搭建数据库

运行容器

通过run命令运行容器

# 运行容器docker run -d -p 8003:8003 learn-docker-storage:0.0.2# 查看运行中的容器docker ps

虚拟主机服务器租用_mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库

查看存储卷

通过 ls可以看到存储卷

docker volume ls

虚拟主机服务器租用_mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库

查看容器信息

我们发现都是匿名的存储卷,如何来确定都是那个呢,可以通过 容器ID来查看存储新鲜

 docker inspect 2041965c3e87|grep Mounts -A20

虚拟主机如何搭建数据库_虚拟主机服务器租用_mysql虚拟主机租用怎么配置

通过这个命令可以看到数据卷的名称以及宿主机的存储路径,我们可以直接到宿主机打印日志

 # 进入文件挂载目录cd /var/lib/docker/volumes/d35de1b7e4631908b05635db4c1f114ab3aafbdf25a9843c068696e66a779c75/_data# 输出日志tail -f learn-docker-storage.log

虚拟主机如何搭建数据库_mysql虚拟主机租用怎么配置_虚拟主机服务器租用

这样就看到了我们的日志文件

验证存储卷

删除容器检查存储卷释放消失

# 查看运行的容器列表docker ps#删除容器docker rm -f 2041965c3e87#查看所有的容器列表(运行+停止)docker ps -a

mysql虚拟主机租用怎么配置_虚拟主机服务器租用_虚拟主机如何搭建数据库

我们看到容器已经被删除了,检查我们的存储卷

docker volume ls

mysql虚拟主机租用怎么配置_虚拟主机服务器租用_虚拟主机如何搭建数据库

发现存储卷还存在,数据还是存在的,并且数据也存在

# 查看存储卷列表docker volume ls# 查看存储卷详情docker inspect 296ccc64d919e86bb8329bf6b08447c2ea6a118458d3fcb86d5c7c9a3177dfe0

虚拟主机服务器租用_mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库

重新运行镜像启动一个新的容器

# 运行容器docker run -d -p 8080:8080 e1222496c69f# 查看运行中的容器docker ps

mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库_虚拟主机服务器租用

启动容器后查看存储卷列表

# 查看存储卷列表docker volume ls

mysql虚拟主机租用怎么配置_虚拟主机服务器租用_虚拟主机如何搭建数据库

我们发现有创建了两个存储卷,查看容器详情

 docker inspect 2041965c3e87|grep Mounts -A20

虚拟主机服务器租用_mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库

我们发现新启动的容器新开了一个匿名存储卷

bind挂载共享存储什么是bind

​ Bind 模式和非常相似,不同点在于Bind 模式是将宿主机上的任意文件或文件夹挂载到容器,而本质上是将服务管理的一块区域(默认是/var/lib//下的文件夹)挂载到容器。

共享存储

经过上面的测试,我们发现每一个容器都是单独用一个存储卷,用于临时文件没有问题的,但是如果要让容器都用同一个存储路径怎么办呢,这个时候就用到了 bind挂载了,可以使用-v进行挂载挂载刚才的存储卷。

# 级联创建文件夹mkdir -p /tmp/data/logs# 运行容器,指定挂载路径 docker run -d -v /tmp/data/logs:/logs \-p 8003:8003 --name learn-docker-storage \learn-docker-storage:0.0.2

这里面--name是指定容器的名称,我们操作容器就可以使用名称进行操作了

虚拟主机服务器租用_虚拟主机如何搭建数据库_mysql虚拟主机租用怎么配置

然后使用 命令来检查容器详情

docker inspect learn-docker-storage|grep Mounts -A20

mysql虚拟主机租用怎么配置_虚拟主机服务器租用_虚拟主机如何搭建数据库

我们发现挂载日志的挂载方式已经变了,由原来的变为了bind,并且挂载路径变为了我们自己定义的路径,进入目录查看

# 进入目录并浏览目录文件cd /tmp/data/logs/&&ll# 打印日志详情tail -f learn-docker-storage.log

mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库_虚拟主机服务器租用

验证共享存储

我们也按照上面步骤验证下bind方式挂载的存储,先删除容器,检查日志文件是否存在

# 停止并删除容器docker rm -f learn-docker-storage# 查看容器已经被删除了docker ps -a# 进入日志挂载路径查看日志是否村咋cd /tmp/data/logs/&&ll

我们发现容器被删除但是日志文件还存在本地

虚拟主机如何搭建数据库_mysql虚拟主机租用怎么配置_虚拟主机服务器租用

启动一个新的容器

# 运行容器,指定挂载路径 docker run -d -v /tmp/data/logs:/logs \-p 8003:8003 --name learn-docker-storage \learn-docker-storage:0.0.2# 查看日志文件cat learn-docker-storage.log

我们发现新的容器的日志文件追加进来了

虚拟主机服务器租用_虚拟主机如何搭建数据库_mysql虚拟主机租用怎么配置

我们发现日志已经追加,我们让不同的容器挂载同一个目录了

和bind的区别

对于多个容器需要共享访问同一数据目录,或者需要持久化容器内数据(如数据库)时,我们都是采用挂载目录形式(bind ),将宿主机的某一目录挂载到容器内的指定目录,这种方式能解决问题,但这种方式也一直有一些缺点

​ bind mount和其实都是利用宿主机的文件系统,不同之处在于是自身管理的目录中的子目录,所以不存在权限引发的挂载的问题,并且目录路径是自身管理的,所以也不需要在不同的服务器上指定不同的路径,你不需要关心路径。

虚拟主机服务器租用_mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库

清理挂载

挂载方式,会生成很多匿名的目录,我们可以找到对应的没有使用的进行删除

docker volume ls

虚拟主机服务器租用_虚拟主机如何搭建数据库_mysql虚拟主机租用怎么配置

通过查看我们发现里面,有很多的,我们可以找到没有用的删除

 docker volume rm volume_name

mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库_虚拟主机服务器租用

还可以通过命令将没有引用的全部清除掉,但是这个命令很危险

docker volume prune

mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库_虚拟主机服务器租用

这样就将我们服务器上无效的清除掉了

网络优化网络原理

​ 使用Linux桥接,在宿主机虚拟一个容器网桥(),启动一个容器时会根据网桥的网段分配给容器一个IP地址,称为-IP,同时网桥是每个容器的默认**。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的-IP直接通信。

​ 网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 run创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。

网络模式

网络模式

配置

说明

host模式

–net=host

容器和宿主机共享 。

模式

–net=:

容器和另外一个容器共享 。 中的pod就是多个容器共享一个 。

none模式

–net=none

容器有独立的 ,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。

模式

--

跨主机通信模式,使用分布式计算机架构后需要使用网络模式

模式

–net=

(默认为该模式)

host模式

​ 如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的 ,而是和宿主机共用一个 。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

​ 使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是 host上已经使用的端口就不能再用了,网络的隔离性不好。

Host模式如下图所示

mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库_虚拟主机服务器租用

模式

​ 这个模式指定新创建的容器和已经存在的一个容器共享一个 ,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。

模式示意图

虚拟主机如何搭建数据库_虚拟主机服务器租用_mysql虚拟主机租用怎么配置

none模式

​ 使用none模式,容器拥有自己的 ,但是,并不为容器进行任何网络配置。也就是说,这个容器没有网卡、IP、路由等信息。需要我们自己为容器添加网卡、配置IP等。

​ 这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过--=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

None模式示意图

虚拟主机服务器租用_mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库

模式

虚拟主机服务器租用_虚拟主机如何搭建数据库_mysql虚拟主机租用怎么配置

​ 容器在两个跨主机进行通信的时候,是使用 这个网络模式进行通信,如果使用host也可以实现跨主机进行通信,直接使用这个物理的ip地址就可以进行通信。它会虚拟出一个网络比如10.0.9.3这个ip地址,在这个网络模式里面,有一个类似于服务**的地址,然后把这个包转发到物理服务器这个地址,最终通过路由和交换,到达另一个服务器的ip地址。

模式

​ 当进程启动时,会在主机上创建一个名为的虚拟网桥,此主机上启动的容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

​ 从子网中分配一个IP给容器使用,并设置的IP地址为容器的默认**。在主机上创建一对虚拟网卡veth pair设备,将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以这样类似的名字命名,并将这个网络设备加入到网桥中。可以通过brctl show命令查看。

​ 模式是的默认网络模式,不写--net参数,就是模式。使用 run -p时,实际是在做了DNAT规则,实现端口转发功能。可以使用 -t nat -vnL查看。

模式如下图所示

虚拟主机服务器租用_mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库

我们的网络结构

下图是我们自己的网络结构,我们是通过宿主机访问Mysql容器的,刚才我们学过,默认已经接入了一个名字叫的桥接网络

mysql虚拟主机租用怎么配置_虚拟主机服务器租用_虚拟主机如何搭建数据库

我们可以让我们的网络直接接入桥接网络,例如下图

mysql虚拟主机租用怎么配置_虚拟主机服务器租用_虚拟主机如何搭建数据库

创建网络查看网络列表

可以通过 ls命令查看网络列表

# 查看网络列表docker network ls

虚拟主机服务器租用_虚拟主机如何搭建数据库_mysql虚拟主机租用怎么配置

上面就是容器默认几种网络

创建一个桥接网络

默认容器启动会自动默认接入的桥接网络,为了区分我们的服务也防止各种网络问题,我们创建一个专用网络,可以通过 网络名称来创建一个默认的桥接网络

# 创建一个桥接网络docker network create learn-docker-network# 查看网络列表docker network ls

虚拟主机如何搭建数据库_虚拟主机服务器租用_mysql虚拟主机租用怎么配置

服务接入网络停止并删除原有容器

停止和删除我们的微服务以及mysql服务

# 删除当前运行中的容器docker rm -f learn-docker-storage nacos mysql

虚拟主机如何搭建数据库_虚拟主机服务器租用_mysql虚拟主机租用怎么配置

创建MySQL

因为我们的微服务依赖MySQL先启动MySQL并接入网络,因为MySQL不需要通过宿主机访问,所有也不需要映射端口了,-- 是配置接入哪一个网络

docker run -d \-v /tmp/etc/mysql:/etc/mysql/mysql.conf.d/ \-v /tmp/data/mysql:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=root \--name mysql --network=learn-docker-network \mysql:5.7.34

虚拟主机如何搭建数据库_虚拟主机服务器租用_mysql虚拟主机租用怎么配置

这样我们就把我们的MySQL服务启动起来了并且加入了learn--的网络

创建Nacos

我们的nacos是需要暴漏端口的,因为我们需要外部能够看到nacos页面,但是我们也需要我们的nacos连接到当前网络

docker run -d -p 8848:8848 \--network=learn-docker-network \--name nacos --env MODE=standalone \nacos/nacos-server

虚拟主机服务器租用_虚拟主机如何搭建数据库_mysql虚拟主机租用怎么配置

查看网络详情

可以通过 网络名称可以查看当前的网络的详细信息

docker network inspect learn-docker-network|grep Containers -A 20

mysql虚拟主机租用怎么配置_虚拟主机服务器租用_虚拟主机如何搭建数据库

修改微服务配置

因为需要使用自定义网络访问mysql容器以及nacos容器,需要修改微服务数据库连接地址,

​ 网络访问 可以通过IP或者通过服务名称都是可以的,这里我们通过服务名称访问,因为我们使用了maven打包的方式,我们只需要将pom文件修改就可以

    mysql:3306    nacos:8848

修改完成后进行编译项目

虚拟主机服务器租用_mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库

这里将数据库连接地址改为mysql容器的服务名称mysql,nacos的连接地址变为了nacos

重新打包服务

将打包的文件上传服务器后按照上面步骤同上面打包,打包版本为 0.0.3

docker build -t learn-docker-storage:0.0.3 .

虚拟主机服务器租用_虚拟主机如何搭建数据库_mysql虚拟主机租用怎么配置

创建微服务

下面就按部就班的创建微服务就可以,只是注意需要加入网络,这里这个端口需要映射***

docker run -d \-v /tmp/data/logs:/logs \-p 8003:8003 \--name learn-docker-storage \--network=learn-docker-network \learn-docker-storage:0.0.3

虚拟主机服务器租用_mysql虚拟主机租用怎么配置_虚拟主机如何搭建数据库

测试微服务

到现在微服务已经启动,我们尝试访问以下

 curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.toolSHELL ** 全屏

mysql虚拟主机租用怎么配置_虚拟主机服务器租用_虚拟主机如何搭建数据库

本文内容来源于互联网,若侵权,请联系我们删除

文章来源:https://www.toutiao.com/a7225439060666368516/

赞(0)
文章名称:《想要启动一个停止的容器可以加上-a查看》
文章链接:https://www.fzvps.com/221712.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!