阿里云的服务时怎么划分的,今天自己也做了一套划分容器的方法

110 阅读2分钟

「这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战」

前言

  • 还记得很久很久以前,我们需要对某个领域进行学习前都会按照文档进行相关软件、插件的安装。
  • 还记得大学那会安装C++工具真的是头疼。安装失败后还必须卸载完全之后才能继续安装
  • 直到后来我们遇见了docker

docker开启centos

  • 拉取镜像;我们拉去最新的版本也可以自由选择固定的版本,命令有所不同。

    docker pull centos:lastest

  • 启动镜像;我们进入容器后就相当于一个新的Linux系统,我们在里面可以任意操作而不会影响外部的配置

    docker run -dit imageId /usr/sbin/init 然后 docker attach containId 进入容器

ps : 容器启动时一定加上/usr/sbin/init 。 后面问题里有解释

  • 新启动的centos此时是个纯净的系统。需要安装ifconfig(查看IP),sshd-server(方便xshell等连接)

安装ifconfig

yum search ifconfig] yum install -y net-tools.x86_64 安装完成后就可以看到本机的IP了。

安装sshd

  • 查看是否开启ssh了。

    rpm -qa | grep sshd rpm -qa | grep ssh

  • 安装

yum install -y openssh-server

  • 启动,停止,重启

systemctl start sshd systemctl stop sshd systemctl restart sshd 启动好之后我们的容器就是一个完全独立的部分。我们甚至可以将内部容器通过绑定端口到外部容器上从而暴露给别人使用。

问题

  • 在新的centos执行systemctl可能报错。(Failed to get D-Bus connection: Operation not permitted。) 报这个错的原因是dbus-daemon没能启动。systemctl并不是不能使用。将CMD或者entrypoint设置为/usr/sbin/init即可。docker容器会自动将dbus等服务启动起来 docker run -dit --privileged --name centos docker.io/centos:7 /usr/sbin/init 上述启动容器后就可以在容器内部执行systemctl命令了。

docker在原镜像基础上开发

  • 先将原有的容器停止 docker stop containId
  • 提交在容器中的修改为新的镜像 docker commit containId newImages:tag
  • 启动新的镜像 docker run -d -p 8980:8080 newImages:tag