docker简介、部署及常用命令。
百度网盘链接:https://pan.baidu.com/s/15t_TSH5RRpCFXV-93JHpNw?pwd=8od3 提取码:8od3
1 docker简介
1.1 docker是什么?
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在GitHub 上进行维护。
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的 可移植的 自给自足的容器。开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何支持docker的机器上运行。容器是完全使用沙箱机制,相互之间不会有任何接口调用。
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被装在集装箱里,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送蔬菜的船和专门运送货物的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
docker就是类似的理念。云计算就好比大货轮。docker就是集装箱。
1.2 docker的优点
1.2.1 快
运行时的性能快,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
1.2.2 敏捷
像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。
1.2.3 灵活
将应用和系统“容器化”,不添加额外的操作系统。
1.2.4 轻量
在一台服务器上可以布署100~1000个Containers容器。
1.2.5 便宜
开源的,免费的,低成本的。
1.3 docker缺点
所有容器共用linux kernel资源,资源能否实现最大限度利用,所以在安全上也会存在漏洞。
2 部署docker服务
2.1 初始化机器
2.1.1 修改机器ip
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
NAME=eth0
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.40.180
NETMASK=255.255.255.0
GATEWAY=192.168.40.253
DEFROUTE=yes
2.1.2 关闭selinux
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
2.1.3 配置主机名称
# hostnamectl set-hostname docker && bash
2.1.4 关闭交换分区swap
注释swap挂载,给swap这行开头加一下注释。
# vim /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 0
2.1.5 修改机器内核参数
# modprobe br_netfilter
# echo "modprobe br_netfilter" >> /etc/profile
# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# sysctl -p /etc/sysctl.d/k8s.conf
重启后模块失效,下面是开机自动加载模块的脚本,在/etc/新建rc.sysinit 文件
# vim /etc/rc.sysinit
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules; do
[ -x $file ] && $file
done
在/etc/sysconfig/modules/目录下新建文件
# vim
/etc/sysconfig/modules/br_netfilter.modules
modprobe br_netfilter
增加权限
# chmod 755 /etc/sysconfig/modules/br_netfilter.modules
2.1.6 关闭防火墙
# systemctl stop firewalld ; systemctl disable firewalld
2.1.7 配置yum源
备份基础repo源
# mkdir /root/repo.bak
# cd /etc/yum.repos.d/
# mv * /root/repo.bak/
下载阿里云的repo源,把CentOS-Base.repo和epel.repo文件上传到master1主机的/etc/yum.repos.d/目录下
配置国内阿里云docker的repo源
# yum -y install yum-utils
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.1.8 配置时间同步
安装ntpdate命令
# yum -y install ntpdate
跟网络时间做同步
# ntpdate cn.pool.ntp.org
把时间同步做成计划任务
# crontab -e
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
重启crond服务
# service crond restart
2.1.9 安装基础软件包
# yum -y install yum-utils openssh-clients device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm
2.2 部署docker服务
2.2.1 安装docker-ce
# yum -y install docker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io
# systemctl start docker && systemctl enable docker && systemctl status docker
2.2.2 配置docker镜像加速器和驱动
# vim /etc/docker/daemon.json
{
"registry-mirrors":["https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","https://glrgy8jw.mirror.aliyuncs.com"],
}
# systemctl daemon-reload
# systemctl restart docker
3 docker的基本用法
3.1 镜像相关操作
# docker search centos //从dockerhub查找镜像
# docker pull centos //下载镜像
# docker images //查看本地镜像
# docker save -o centos.tar.gz centos //把镜像做成离线压缩包
# docker load -i centos.tar.gz //解压离线镜像包
# docker rmi -f centos:latest //删除镜像
3.2 容器相关操作
3.2.1 以交互式方式启动并进入容器
# docker run --name=hello -it centos /bin/bash //创建并运行容器
[root@09c4933b5cd7 /]#
输入exit,退出容器,退出之后容器也会停止,不会在前台运行
--name 容器的名字
-i 交互式
-t 分配伪终端
centos: 启动docker需要的镜像
/bin/bash说明你的shell类型为bash,bash shell是最常用的一种shell, 是大多数Linux发行版默认的shell。 此外还有C shell等其它shell。
3.2.2 以守护进程方式启动容器
# docker run --name=hello -td centos
# docker ps |grep hello
1a2b73ba0ac2 centos "/bin/bash" hello1
-d在后台运行docker
# docker exec -it hello /bin/bash
3.2.3 查看正在运行的容器
# docker ps
# docker ps -a //查看所有容器,包括运行和退出的容器
3.2.4 停止容器
# docker stop hello1
3.2.5 启动已经停止的容器
# docker start hello1
3.2.6 进入容器
# docker exec -it hello1 /bin/bash
# docker rm -f hello1 //删除容器
# docker --help //查看docker帮助命令
3.2.7 docker容器运行结束自动释放资源
# docker run -it --rm --name docker centos sleep 6
3.3 通过docker部署nginx服务
# docker run --name nginx -p 80 -itd centos
-p把容器端口随机在物理机随机映射一个端口
# docker ps | grep nginx
在docker里安装nginx:
# docker exec -it nginx /bin/bash
# ip addr
yum安装nginx:
# rm -rf /etc/yum.repos.d/*
# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
# yum -y install wget nginx vim-enhanced
创建静态页面:
# mkdir /var/www/html -p
# cd /var/www/html/
# vim index.html
<html>
<head>
<title>nginx in docker</title>
</head>
<body>
<h1>hello,My Name is DockerNginx</h1>
</body>
</html>
修改nginx配置文件中的root路径:
# vim /etc/nginx/nginx.conf
root /var/www/html/;
启动nginx:
# /usr/sbin/nginx
访问docker里的nginx服务,复制一个终端窗口,执行如下命令
# docker ps | grep nginx
ecfa046e9681 centos "/bin/bash" 12 minutes ago Up 12 minutes 0.0.0.0:49153->80/tcp, :::49153->80/tcp nginx
能查看到nginx容器在物理机映射的端口是49153
# curl http://192.168.40.180:49153
<html>
<head>
<title>nginx in docker</title>
</head>
<body>
<h1>hello,My Name is DockerNginx</h1>
</body>
</html>
也可以直接访问容器的ip:port
流量走向:访问物理节点ip:port(容器在物理节点映射的端口)--à容器ip:port(容器里部署的服务的端口)->就可以访问到容器里部署的应用了