序言: 记得准备放假时,接到了一个 在centos系统上,部署产品docker运行的环境; docker是比较新型的技术, 我从网上多方面整理,并完成了部署, 途中遇到的问题也分享分享。
一、 dokcer 原理是什么?
可以参照 原理:https://www.jianshu.com/p/5c81dc531963 写得很仔细。
安装:http://www.cnblogs.com/qgc1995/archive/2018/08/29/9553572.html
基本上按照上博客命令运行,就可以在centos 下按照 docker**。
二 、熟悉 docker 命令操作
[常用命令]
终端 输入 docker help
以及常见的 操作 docker option
和 docker run 的搭配
三、 安装过程中, 常伴随的问题:
1)、当你装完centos系统后, 和安装完docker后,home目录
空间会显得不足。(尽管在ESXi创建这个虚拟机,分配了足够大的内存)
df /home -h 查看 home 目录空间;
du --max-depth=1 -h // 查看当前目录下, 所有文件夹大小‘;;; (此命令可以定位到 哪个文件夹最大,你可以选择性删除) 但是系统刚刚新装, 还是扩容比较实在。
大致步骤
:
df -h 查看分区大小 、 虚拟机中新增物理磁盘块、 重启
ls /dev/sd* //产看新增的磁盘编号 比如是 /dev/sdb
pvcreate /dev/sdb 创建pv
vgs //查看vg组大小
vgextend centos /dev/sdb //扩展vg
vgs //查看vg组大小 ,变大了
lvextend -L +20G /dev/mapper/centos-root
//拓展lv, 增加 /dev/mapper/centos-root目录空间
xfs_growfs /dev/mapper/centos-root
// 使系统重新读取大小
df -h 再查看 ; 此时添加成功。
2)问题2
docker 容器运行时, 会不断的膨胀空间。 膨胀的目录是名为 overlay , 路径:/var/lib/docker/overlay/下
1、停止docker服务。
systemctl stop docker; //每个liunx版本的命令不一样。
2、创建新的docker目录,执行命令df -h,找一个大的磁盘。我的是放在/home目录下面,我的/home目录大小有900G。 我在 /home目录下面建了 /home/docker/lib目录,执行的命令是:mkdir -p /home/docker/lib
3、迁移/var/lib/docker目录下面的文件到 /home/docker/lib下面
cp -R /var/lib/docker/* /home/docker/lib/
注意:如果文件内容很多的话,为了确保成功最好是一个文件一个文件的拷贝。如果在拷贝过程中报“设备上没有空间”的错误,就使用mv剪切。
4、修改docker配置(/etc/systemd/system/docker.service.d/devicemapper.conf),在文件末添加 --graph=/home/docker/lib
devicemapper.conf文件的内容如下:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --insecure-registry=私服地址 --graph=/home/docker/lib
注意:如果/etc/systemd/system/docker.service.d/devicemapper.conf,这个路径找不到的话,就新建,新建之后加入内容,没有私服地址的话就可以去掉”--insecure-registry=私服地址”。
5、重载配置,重启docker
systemctl daemon-reload;
systemctl restart docker;
systemctl enable docker;
6、启动成功后,确定容器没问题后删除/var/lib/docker/目录中的文件,然后就OK了。
三、、
2) 容器与宿主机间拷贝文件
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
实例
将主机./RS-MapReduce目录拷贝到容器30026605dcfe的/home/cloudera目录下。
docker cp RS-MapReduce 30026605dcfe:/home/cloudera
将容器30026605dcfe的/home/cloudera/RS-MapReduce目录拷贝到主机的/tmp目录中。
docker cp 30026605dcfe:/home/cloudera/RS-MapReduce /tmp/
三、 进入容器四种方法:
在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法。
进入Docker容器比较常见的几种做法如下:
1.使用docker attach
2.使用SSH
3.使用nsenter
4.使用exec
目前最为常用的是第四种,exec
经过筛选:
1
二、使用SSH进入Docker容器
在生产环境中排除了使用docker attach命令进入容器之后,相信大家第一个想到的就是ssh。在镜像(或容器)中安装SSH Server,这样就能保证多人进入容器且相互之间不受干扰了,相信大家在当前的生产环境中(没有使用Docker的情况)也是这样做的。但是使用了Docker容器之后不建议使用ssh进入到Docker容器内。关于为什么不建议使用,请参考如下文章:
2
使用nsenter进入Docker容器。。。该方法的缺点在于步骤比较繁琐
我接触第一种,attach 进入容器, 缺点是 (1)退出时,容器会停止 ,(2)而且还不算怎么灵活。
(3)但在,使用该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。
因为这个原因,所以docker attach命令不太适合于生产环境,平时自己开发应用时可以使用该命令。
。
所以最优是 exec:
语法格式:
docker exec --help
[产看语法格式]
操作 可以组合 ; -it 是常用
CONTAINER:可以是名字、或者容器ID
CIMMAND::命令的意思: /bin/bash 代表控制台
例如: docker exec -i lv5 ./ProcessCtrl -License 交互式进入了容器,运行这个命令