简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
再说简单一点,就和虚拟机,模拟器功能类似,常规用法的时候,你的docker运行起来的容器,就相当于一个独立的系统,与你的宿主机是网络通讯的方法,其他内容都是相互独立的。 这样就有一种常见现象,你的宿主机可以比你的容器版本还低,挺有意思吧。
简单介绍一下使用方法,以后可以很迅速的用起来。
安装docker环境
安装必要软件,能够允许你的系统运行docker容器。我这里是CentOS7.9的版本。
yum -y install yum-utils device-mapper-persistent-data lvm2
增加docker 源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker平台容器包
yum -y install docker-ce
启动docker
systemctl start docker
自启动
systemctl enable docker
到这里就类似我们已经安装好了VMware这种工具了,后续想运行什么系统,只管去找镜像,安装即可
安装探针系统docker
在线安装centos7-host模式
docker run --net=host --privileged -itd -v /sys/fs/cgroup:/sys/fs/cgroup --name mydocker centos:7 /usr/sbin/init
参数介绍,结尾还有更详细的介绍。
–net=host :容器与宿主机共享网络接口 –privileged:使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。 -v:挂载宿主机的一个目录。 -name:指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字 centos:7:下载centos7版本 -d:指定容器运行与前台或者后台,不加上时前台 -i: 打开 STDIN,用于控制台交互 -t: 支持终端登录 /usr/sbin/init:系统启动命令
进入容器的shell
docker exec -it mydocker /bin/bash
然后就当它是一个纯净的系统,安装部署你自己的软件,并且调试完成之后,就可以用来拷贝部署了。 不过这个纯净系统,可能过于纯净,好多常用指令都需要重新安装
如果run的时候,我们并没有让容器开机启动,后续可以通过如下方式增加自启动
docker update --restart=always mydocker
制作探针镜像包
首先停止容器
docker stop mydocker
把容器制作成镜像(docker commit 容器ID 新镜像名称)
docker commit mydocker mydocker
把镜像保存在当前路径下(docker save -o 新镜像名称.tar 镜像名称)
docker save -o mydocker.tar mydocker
此时的mydocker.tar,我们就可以拷贝出来,用来部署到其他设备了。不过这个东西随便装一下,也不小,记得删除掉那些不需要的文件,可以让镜像小一些
部署到其他设备
加载解压镜像包。
docker load --input mydocker.tar
从镜像重新创建容器
docker run --restart=always --privileged -itd -v /sys/fs/cgroup:/sys/fs/cgroup --name mydocker mydocker /usr/sbin/init
这种就只要求你的宿主机有docker环境,就可以运行你的全部软件了,是不是很酷
其他操作
启动容器
docker start mydocker
查看所有容器
docker ps -a
镜像列表
docker images
检索镜像, 从镜像仓库中检索
docker search xxx
下载镜像
docker pull xxx
删除镜像
docker rmi xxx
Docker run 参数 常用选项说明
参数 | 含义 |
---|
-d, --detach=false | 指定容器运行于前台还是后台,默认为false | -i, --interactive=false | 打开STDIN,用于控制台交互 | -t, --tty=false | 分配tty设备,该可以支持终端登录,默认为false | -u, --user=“” | 指定容器的用户 | -a, --attach=[] | 登录容器(必须是以docker run -d启动的容器) | -w, --workdir=“” | 指定容器的工作目录 | -c, --cpu-shares=0 | 设置容器CPU权重,在CPU共享场景使用 | -e, --env=[] | 指定环境变量,容器中可以使用该环境变量 | -m, --memory=“” | 指定容器的内存上限 | -P, --publish-all=false | 指定容器暴露的端口 | -p, --publish=[] | 指定容器暴露的端口 | -h, --hostname=“” | 指定容器的主机名 | -v, --volume=[] | 给容器挂载存储卷,挂载到容器的某个目录 | –volumes-from=[] | 给容器挂载其他容器上的卷,挂载到容器的某个目录 | –cap-add=[] | 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities | –cap-drop=[] | 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities | –cidfile=“” | 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法 | –cpuset=“” | 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU | –device=[] | 添加主机设备给容器,相当于设备直通 | –dns=[] | 指定容器的dns服务器 | –dns-search=[] | 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件 | –entrypoint=“” | 覆盖image的入口点 | –env-file=[] | 指定环境变量文件,文件格式为每行一个环境变量 | –expose=[] | 指定容器暴露的端口,即修改镜像的暴露端口 | –link=[] | 指定容器间的关联,使用其他容器的IP、env等信息 | –lxc-conf=[] | 指定容器的配置文件,只有在指定–exec-driver=lxc时使用 | –name=“” | 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字 | –net=“bridge” | 容器网络设置: | | bridge 使用docker daemon指定的网桥 | | host //容器使用主机的网络 | | container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源 | | none 容器使用自己的网络(类似–net=bridge),但是不进行配置 | –privileged=false | 指定容器是否为特权容器,特权容器拥有所有的capabilities | –restart=“no” | 指定容器停止后的重启策略: | | no:容器退出时不重启 | | on-failure:容器故障退出(返回值非零)时重启 | | always:容器退出时总是重启 | –rm=false | 指定容器停止后自动删除容器(不支持以docker run -d启动的容器) | –sig-proxy=true | 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理 |
各种参数,满足你的不同需求
结束语
这几天的核心内容就是核酸,工作地核酸三次,间隔一天,居住地核酸三次,间隔一天,好巧不巧,没有一天重合。 老老实实配合工作,希望能早点结束这场战争。至于囤物资什么的,当然不屯了,相信政府,就是最大的支持。 就算囤物资,我也偷偷囤,不告诉你们,偷偷囤在身上。
|