1、 安装docker和下载docker镜像等完成前置工作。
YUM安装Docker引擎服务;
yum install docker* -y
查看Docker软件是否安装;
rpm -qa|grep docker
启动Docker引擎服务;
service docker restart
systemctl restart docker.service
查看Docker引擎服务进程;
ps -ef|grep docker
如果出错要更换yum源,阿里云测试的不行,要换清华源:
该文件夹只提供 CentOS 7 与 8,架构仅为 x86_64 ,如果需要较早版本的 CentOS,请参考 centos-vault 的帮助,若需要其他架构,请参考 centos-altarch 的帮助。
建议先备份 /etc/yum.repos.d/ 内的文件。
然后编辑 /etc/yum.repos.d/ 中的相应文件,在 mirrorlist= 开头行前面加 # 注释掉;并将 baseurl= 开头行取消注释(如果被注释的话)。 对于 CentOS 7 ,请把该行内的域名(例如mirror.centos.org)替换为 mirrors.tuna.tsinghua.edu.cn。 对于 CentOS 8 ,请把 mirror.centos.org/$contentdir 替换为 mirrors.tuna.tsinghua.edu.cn/centos。
yum makecache
#从docker官网仓库搜索tomcat|nginx|redis镜像;
docker search tomcat
docker search nginx
docker search redis
#从公共仓库下载tomcat镜像;
docker pull docker.io/tomcat
docker pull docker.io/nginx
docker pull docker.io/redis
docker pull docker.io/lemonbar/centos6-ssh
镜像名字太长了,改名字:
Docker tar docker docker.io/lemonbar/centos6-ssh centos6
改完后删除原来那个名字长的:
Docker rmi docker.io/lemonbar/centos6-ssh
改完后再用这个新镜像时记得这样的格式来指定镜像了:
Centos6:latest
docker images
查看下载好到本地的镜像
#基于Docker镜像启动Tomcat容器(-i interactive交互、-t tty终端、-d daemon后台运行);
此案例只用于实验学习,如果生产中不要这样启容器,生产用—net=none不设置网卡先的,要手动指定网卡和真实物理网卡绑定的模式。
Docker run -–privileged –name=yeng-web01 –itd –p 80:80 docker.io/tomcat:latest
Privileged是超级管理权限意思,--name改名
Docker exec –it id或名称 passwd root
直接执行命令改密码等
Cp /etc/skel/.bash* /root/
这样解决容器里面的centos机器名称问题老是显示bash-4.1
Docker history docker.io/nginx
查看镜像到底是怎么做的,可以看到一些初始密码之类的东西
#查看Docker tomcat容器的运行状态;
docker ps -a
#查看Docker tomcat容器的IP地址;
docker inspect 0499058becea |grep -i ipaddr
host模式;(生产很少用)
Docke引擎启动容器,本来默认方式会分配给容器网络子系统,如果指定–net=host,启动后的容器不会拥有独立的网络系统,跟宿主机公用一个网络子系统,公用宿主机的IP和端口;(宿主机使用了22端口,容器不能用22端口)
docker run -itd --net=host --name=none_test docker.io/lemonbar/centos6-ssh
None模式(生产常用,单独起个容器虚拟机系统就用这种)
Docker引擎启动容器,会分配给容器网络子系统,但是并不会设置网卡、IP、路由等信息,需要用户自定义去配置和添加,借助pipework工具去实现;
docker run -itd --net=none --name=centos6_test docker.io/lemonbar/centos6-ssh
Container模式(忽略,生产环境一般没人用)
Docker引擎启动容器,不会分配给容器网络子系统,共享已经存在的容器的IP和网络空间,跟host模式类似的,host模式是共享宿主机,而Container模式共享容器;
docker run -itd --net=container:692de87ac76c --name=container_test docker.io/lemonbar/centos6-ssh sleep 999d
Bridge模式(桥接模式)(如果把应用软件直接跑在dcoker上,不装操作系统容器,就用这种。用真实物理机IP+端口访问应用服务,真实机用nat转给应用,网络效率不高)
默认Docker引擎启动容器,是使用桥接模式,Bridge默认模式,桥接模式:Docker0(绑定在宿主机网卡、虚拟二层交换机);
将宿主机系统的8080端口映射到容器的8080端口;(第一个端口宿主机监听的,第二个端口是容器内部服务端口)
docker run -p 8080:8080 -itd docker.io/tomcat:latest
4、必须先装安装 pipework,如果只有一块网卡,一会改完绑定,物理机网卡就不能上网了,如果有两块网卡可以先不装这个,一会还可以用另一网卡,绑定只用了一个物理网卡,另一个可以再设置ip进行上网。
下载地址:wget https://codeload.github.com/jpetazzo/pipework/zip/refs/heads/master
Unzip pipework-master.zip
cp -p /root/pipework-master/pipework /usr/local/bin/
5、如果想整完后删除原来不用的docker0网卡,还要再装一个软件(可以不用删除的,不影响,只是ifconfig查看有,但又不用,看着不爽):
Yum install bridge* -y
Ifconfig docker0 down ( 先停掉)
Brctl delbr docker0 (再删除)
完后重启docker 服务
6、物理机上先在netwrok-script里面建立一个网卡ifcfg-br0文件
[root@client opt]# cat ifcfg-br0
TYPE="Bridge"
DEVICE="br0"
ONBOOT="yes"
IPADDR=192.168.1.110
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
7、改真实网卡ifcfg-ens33:
[root@client opt]# cat ifcfg-ens33
TYPE="Ethernet"
DEVICE="ens33"
BRIDGE="br0"
ONBOOT="yes"
重启网卡服务
8、创建容器
docker run -itd --privileged --cpuset-cpus=0-0 -m 512m --memory-swap=512m --name=centos110 --net=none docker.io/lemonbar/centos6-ssh
(0-0代表使用第一颗cpu,用第二颗就是1-1,每个容器都要分配不同的cpu才能进行监控方便,-m就是内存)
查看有几颗cpu按top命令后在交互状态下按数字1就看出来了
查看配置参数用:
Docker inspect 容器id名
另一种查看方法最流行:
Docker stats 容ID名 --no-stream
2种改容器的最大磁盘使用量:Docker从1.13版本开始默认磁盘驱动模式:overlay2,
默认是这样的:所有容器无限制,自由使用物理机磁盘空间。
先查看当前docker用哪种磁盘模式:
cat /etc/sysconfig/docker-storage
第一种:默认是overlay2,这种模式的修改方法:
用磁盘配额来限制,但是只能是xfs分区,其它的分区格式不支持
可以单独加一块盘格式化成xfs
Mkfs.xfs –f /dev/sdb
创建个目录来挂载新磁盘并开配额(对目录做配额用pquota/prjquota;如果对用户uquota/usrquota/quota):
Mkdir /data/ -p
Mount –o pquota,prjquota /dev/sdb /data/
然后查看
Mount |grep data
创建并查看配额详情:
Xfs_quota -x -c ‘limit bsoft=10M bhard=10M jfedu’ /data
Xfs_quota –x -c ‘report’ /data/
把docker引擎默认数据存储目录/var/lib/docker重命名,并将/data/docker目录软链接到/var/lib/下
Mkdir –p /data/docker/
Cd /var/lib/
Mv docker docker.bak
Ln –s /data/docker/ ./
第二种:可以修改为磁盘模式为device mapper模式(前提是分区格式不能是xfs,要ext2-4才行):
默认是这样的:
可以修改为Device mapper模式,修改方法:
Cat /etc/sysconfig/docker-storage-setup
STORAGE_DRIVER=devicemapper
下图改完后顺便给每台起的容器20G的最大使用空间,
cat /etc/sysconfig/docker-storage
DOCKER_STORAGE_OPTIONS="–storage-driver devicemapper --storage-opt dm.basesize=20G"
设置完成后,重启docker服务查看是不是配好:
Ps –ef|grep docker
9、用pipework改容器ip地址(最后的地址是真实物理网络的网关)
Pipework br0 容器ID(或用刚才建立的name:centos01) 192.168.1.110/[email protected]
设置好ip后,docker服务不能重启,如果重启了,容器中的ip就没了就变成127.0.0.1了,还要重新这条命令来配置,写脚本加入开机启动项也可以。
10、改好后进容器查看地址是否正确:
Docker exec centos01 ifconfig
Docker exec –it centos01 /bin/bash
进去容器虚拟机操作一切
docker update --restart=always a9a83c499b0c
设置开机自动启动容器,要不然关机或重启docker服务后,容器不会自动开
Docker web 页面配置:
先下载下来这个镜像
docker pull docker.io/uifd/ui-for-docker
再启容器:
用brige模式,用真机的另一个网卡加上9000访问(亲测必须这样,不能用那种none模式网络):
docker run -itd --privileged --cpuset-cpus=0-0 -m 512m --memory-swap=512m --name=apiweb -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock docker.io/uifd/ui-for-docker
再用浏览器打开真机的网卡地址:9000就能打开web页面了
10、cadvisor监控:
先下载镜像:
docker pull docker.io/google/cadvisor
docker run -itd --privileged --cpuset-cpus=0-0 -m 512m --memory-swap=512m --name=jk -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock docker.io/google/cadvisor
再用浏览器打开真机的网卡地址:8080就能打开web页面了