windows中hyperv版的docker怎么开机自动启动

windows中hyperv版的docker怎么开机自动启动,第1张

首先我们点击左下角的windows徽蚂信标,然后点击所有应用。

然后点击windows系统中的控制面板

进入控制面板后,点击程序

然后点击启用或关闭慎敬windows功能

5

把Hyper-V前面的方块勾上,然后点确定

6

然后出现这个

7

然后点关闭就行了

8

然后我们还是点开左下角的windows徽标,点击所有应用,然后在winows管理工具中闷孝轮就可以看到了

2.1 在测试机启动容器,安装ssh

docker run -i -t ubuntu /bin/bash #此方式运行的容器,退出后容器就会关闭。

apt-get install openssh-server #安装ssh

#需要修改/etc/sshd/sshd_config文件中内容

PermitRootLogin yes

UsePAM no

2.2 启动ssh,容器以后台方式运行

docker run -d -p 50001:22 <容器id>/usr/sbin/sshd-D

#容器id可通过 docker ps-a查看,最上面的为最新的。

2.3 通过ssh连接到容器安装软件

ssh [email protected] 50001

#连上后想装什么就装什么,可使用exit退出容器,但后台还会运行。

2.4 服务安装完成后,停止容器。

docker stop <容器id>#停止运行的容器

2.5 把容器提交生成最新的镜像

docker commit <容器id>debian02 #把这个容器提交生成新的debian02镜像(该镜像是原始镜像与容器的整合)

2.6 打包镜像

docker save debian02 >/root/debian02.tar #debian02镜像打包

2.7 在另外的机器上导入镜像

docker load <debian02.tar #导入镜像

docker images #查看存在的镜像

2.8 启动容器

docker run -h="redis-test" --name redis-test -d -p 51000:22 -p51001:3306 -p 51003:6379 -p 51004:6381 -p 51005:80 -p 51006:8000 -p 51007:8888 debian02 /etc/rc.local

#此处是我测试机器启动命薯禅困令,指定主机名与端口映射。

#启动后,后面又装了程序,开机自启动命令可放在/etc/rc.local文件中。

docker容器迁移简单方便,可以任意的拷贝部署,以后再也不怕新部署环境了,一堆依赖装的想死有木有。

3、关于docker容器的端口映射

由于docker容器的IP地址每次启动都会变,所以不适用于手动添加端口映射(难道每次重启都来查看容器的IP么?),所以需要每次启动容器袭旅时由docker程序自动添加NAT规则,前期尽可能的把需要映射的端口在创建容器时配置好,如下:docker run -h="activemq" --name activemq -d -p 51000:22 -p 51001:3306-p 51003:6379 -p 51004:6381 -p 51005:80-p 51006:8000 -p 51007:8888 debian/base/etc/rc.local

#此处我把mysql,redis,nginx,ssh都进行了映射。

后续对于docker容器的管理,记住容器的名称,如上述名称是activemq,则使用docker stop,start来控制容器进程。docker stop activemq

docker start activemq

当然,也可以不让docker每次启动容器修改容器的IP地址,参考如下:

docker网络配置:http://www.open-open.com/lib/view/open1404896485747.html

4、关于docker容器的多程序开机自动运行

docker容器每次启动时,开机自启动的命令都要在启动容器前指定。如 docker run -I -t debian /bin/bash命令,只会运行/bin/bash程序,数念其它的程序都不会运行,对于要跑多个程序的容器特别纠结。

多程序开机自动运行方法:

可把前面所说的启动命令换成dockerrun -I -t debian /etc/rc.local,在容器中把所有需要开机自的启动命令放在/etc/rc.local中,就可以达到多程序开机自启动了。

后台运行则是:docker run -d -p 50001:22 debian /etc/rc.local。注意:run命令是创建一个新的容器,如果要启动一个曾经运行过的容器,则用命令docker ps -a中找对应的容器ID,然后使用docker start <容器ID>即可。

1.shell方式启动

如dockerfile中定义

CMD "./run"

则容器内的PID为1的进程为/bin/sh -c "./run"

另外又有个进程./run

2.exec方式启动

如dockerfile中定义

CMD ["./run"]

则容器禅首内的PID为1的进程直接就是./run

有何不同?退出机制可能大不相同

背景: docker stop的时候,会向PID为1的进程发送SIGTERM信号,通知进程关闭。如果10秒钟依然没有关闭,将会发送SIGKILL强制kill进程。

不同之处:

1.exec启动的进程会接收到SIGTERM信号,程序自行处理该信号,清理资源,优雅关闭。

2.shell启动的进程会接收到SIGTERM信号,但是shell进程没有处理该信号的逻辑,所以直接忽略该信号。

一直等到10秒后超时贺颂数,收樱弯到了SIGKILL信号,强制kill所有的进程。

这时资源来不及释放,会导致各种数据不一致的问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8244287.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存