Docker#Docker当做虚拟机使用

docker容器当做虚拟机使用,一劳永逸

在这里插入图片描述
容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用"装"起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去,这其实是 PaaS 最理想的状态。容器的本质是进程,容器就是未来云计算系统中的进程。
云计算服务类型
基础设施即服务IaaS
平台即服务(PaaS)
软件即服务(SaaS)

docker容器和虚拟机的对比

在这里插入图片描述

docker容器当做虚拟机使用的痛点

1、docker原生容器基础命令ip a 、ss、ssh、等没有
2、docker原生容器systemctl命令没有
3、docker启动命令太长,不好记

解决方案

用dockerfile构建镜像,先把能想到的基础命令需要的包安装一下,解决问题1,用特权模式构建容器,解决问题2,docker启动命令用alias设置别名,解决问题3。做完上面的步骤,恭喜你,虚拟机任你开,全程无痛

具体做法

1、先利用dockerfile构建自定义的基础镜像

[root@sun ~]# cd /mnt
[root@sun mnt]# mkdir centos7
[root@sun mnt]# cd centos7/
[root@sun centos7]# vim Dockerfile
[root@sun centos7]# cat Dockerfile 
FROM centos:7
RUN yum install -y \
    vim bash-com* openssh-clients openssh-server iproute cronie;\
    yum group install -y "Development Tools";yum clean all;\
    localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV LANG=zh_CN.UTF-8
构建自定义的docker镜像,名字自定义
[root@sun centos7]# docker build . -t base-centos
出现下面语句,表示构建成功
Successfully built 325f14a33587
Successfully tagged base-centos:latest
[root@sun centos7]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
base-centos         latest              325f14a33587        3 minutes ago       522MB
sunlizhen-ng        latest              380f3ce262e9        4 days ago          843MB
centos              7                   7e6257c9f8d8        2 months ago        203MB
hello-world         latest              bf756fb1ae65        9 months ago        13.3kB

可以看到base-centos基础镜像已经在我们的自己的镜像仓库里面
现在已经拥有了一个支持基本命令和支持中文的镜像了。

2、以特权模式进入可以使用systemctl命令

docker run -it --name mydocker1 --rm --privileged=true base-centos /usr/sbin/init

–name 容器命名
–rm 退出自动删除容器
–privileged 特权模式
/usr/sbin/init 系统的1号进程命令

遇到的一个问题,可能是我的系统环境问题:
docker run -it --name mydocker1 --rm --privileged=true base-centos /usr/sbin/init
执行这一条命令之后,导致我centos7真机系统重启
个人水平有限解决不了,不知道什么原因,只能换一种方式
先后台运行docker,然后与exec进入
docker run -itd --name mydocker1 --rm --privileged=true base-centos /usr/sbin/init
docker exec -it mydocker1 bash

3、启动docker命令、参数太长。设置命令别名
  首先说明:个人习惯在构建容器的时候给容器起一个便于记忆和区别的名字,好处是便于管理。所以在设置别名的时候设置一个位置变量$1,用作容器命名。

[root@sun ~]# vim /etc/profile.d/docker.sh
function mydocker(){
    
    
docker run -it --name $1 --rm --privileged=true base-centos /usr/sbin/init
}
alias ops='mydocker'
[root@sun ~]# source /etc/profile.d/docker.sh

测试示例:
在这里插入图片描述
在这里插入图片描述
如果还想更改容器主机名加一个–hostname参数

[root@sun ~]# vim /etc/profile.d/docker.sh
function mydocker(){
    
    
docker run -it --name $1 --hostname $2 --rm base-centos
}
alias ops='mydocker'
[root@sun ~]# source /etc/profile.d/docker.sh

也就是执行命令的话需要传递两个位置变量
容器名称和容器主机名称
测试示例
在这里插入图片描述
至此,可以很简单拥有一台新的虚拟机

补充一:如果直接run构建并且进入容器导致系统重启就这样

[root@sun ~]# vim /etc/profile.d/docker.sh
function mydocker(){
    
    
docker run -itd --name $1 --rm --privileged=true base-centos /usr/sbin/init
docker exec -it $1 bash
}
alias ops='mydocker'
[root@sun ~]# source /etc/profile.d/docker.sh

补充二:容器的导出和导入

使用场景:在一个容器里安装了mysql等服务,想再次构建一个容器里面同样有mysql等服务
可以先将当前容器导出为一个任意命名的压缩包:
docker export 容器名/id > centos7-mysql.tar
然后拷贝压缩包给需要的服务器,本机需要就直接导入
将容器压缩包导入为本地镜像
docker import centos7-mysql.tar
注意,import命令是将容器快照导入为的镜像
docker images
需要重新定义镜像标签
docker tag 镜像id centos:7
tag加的镜像ID,给新import的镜像加上仓库名和标签,重复操作不会覆盖,会新建
(docker tag centos:7 sun:8)
docker run -it --rm sunlizhen bash 自己导入的镜像,run后面需要跟一个命令

猜你喜欢

转载自blog.csdn.net/kakaops_qing/article/details/109089858
今日推荐