一、Docker零基础入门到企业实战

1、Docker概述及基本原理介绍

(1)docker是什么?

Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目,它基于Goolgle公司退出的Go语言实现。项目后来加入了Linux基金会,遵从了Apache2.0协议,项目代码在GitHub上进行维护。
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的,可移植的、自给自足的容器。开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何支持docker的机器上运行。容器是完全使用沙箱机制,相互之间不会有任何接口调用。

(2)docker的优缺点

优点:
快:运行时的性能快,管理操作(启动,停止,开始,重启等等)都是以秒或毫秒为单位的。
敏捷:像虚拟机一样敏捷,而且会更便宜,在bar metal(裸机)上部署像点个按钮一样简单。
灵活:将应用和系统“容器化”,不添加额外的操作系统。
轻量:在一台服务器上可以部署100~1000个Containers容器。
便宜:开源的,免费的,低成本的。(docker-ee:商业版;docker-ce:社区版)
缺点:
所有的容器共用linux kerner资源,资源能否实现最大限度利用,所以在安全上也会存在漏洞。

2、Docker安装和配置

(1)系统环境配置

系统配置:

主机:IP(172.21.120.144)

centos7.6-7.9

配置:2Gi/2vCPU

查看服务器hostname

#hostnamectl

docker +k8s dockerk8s好学吗_docker


#hostnamectl set-hostname wenqianmaster1 –static 修改静态服务器名称为wenqianmaster1
 #hostnamectl status

docker +k8s dockerk8s好学吗_centos_02


安装防火墙

#yum install firewalld firewall-config
 #systemctl status firewalld
 #systemctl stop firewalld
 #systemctl disable firewalld 禁用,防止开机再次启动
 #iptables -F 清空防火墙规则
 #setenforce 0
 关闭selinux
 #vim /etc/selinux/config

docker +k8s dockerk8s好学吗_运维_03


#getenforce

docker +k8s dockerk8s好学吗_kubernetes_04

#sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config注意:修改selinux配置文件之后,重启机器,selinux才能永久生效

#getenforce

docker +k8s dockerk8s好学吗_docker_05


#yum install -y ntp ntpdate

与网络源同步时间

#ntpdate cn.pool.ntp.org

docker +k8s dockerk8s好学吗_运维_06


#编写计划任务

#crontab -e

  • */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
    重启crond生效
    #systemctl restart crond

(2)安装docker

安装基础软件包

#yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack

安装docker-ce

配置docker-ce国内yum源(阿里云)

#yum install yum-utils -y

#yum-config-manager --add-repo

#yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker依赖包

#yum install -y yum-utils device-mapper-persistent-data lvm2

#yum install docker-ce -y //安装docker-ce

#docker version //查看docker版本

启动docker服务

#systemctl start docker && systemctl enable docker

#systemctl status docker

docker +k8s dockerk8s好学吗_docker_07

(3)优化内核参数

#开启包功转发能和修改内核参数

#内核参数修改:br_netfilter模块用于将桥接流量转发至iptables链,br_netfilter内核参数需要开启转发。

#modprobe br_netfilter

#cat > /etc/sysctl.d/docker.conf <<EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

EOF

docker +k8s dockerk8s好学吗_运维_08


docker +k8s dockerk8s好学吗_运维_09


#使参数生效

#sysctl -p /etc/sysctl.d/docker.conf

docker +k8s dockerk8s好学吗_docker +k8s_10


#查看是否加载成功

#lsmod | grep br_netfilter

docker +k8s dockerk8s好学吗_docker_11


#重启后模块失效,下面是开机自启加载模块的脚本

#开机自动加载

在/etc/新建rc.sysinit 文件

cat /etc/rc.sysinit
 #!/bin/bash
 for file in /etc/sysconfig/modules/*.modules ; do
 [ -x $file ] && $file
 done

docker +k8s dockerk8s好学吗_centos_12


在/etc/sysconfig/modules/目录下新建文件如下
 cat /etc/sysconfig/modules/br_netfilter.modules
 modprobe br_netfilter
 #chmod +x /etc/sysconfig/modules/br_netfilter.modules
 #chmod 755 /etc/sysconfig/modules/br_netfilter.modules 增加权限

重启机器模块也会自动加载

#lsmod |grep br_netfilter

docker +k8s dockerk8s好学吗_运维_13


#systemctl restart docker

#查看状态

#systemctl status docker

(2)配置docker镜像加速器

登录阿里云镜像仓库

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 如果没有开通,可开通阿里云的镜像服务(支付宝登录)

docker +k8s dockerk8s好学吗_centos_14


#vim /etc/docker/daemon.json

{

“registry-mirrors”:[“https://y8y6vosv.mirror.aliyuncs.com”,“https://registry.docker-cn.com”,“https://docker.mirrors.ustc.edu.cn”,“https://dockerhub.azk8s.cn”,“http://hub-mirror.c.163.com”]

}#还可以增加其他站点

docker +k8s dockerk8s好学吗_kubernetes_15


docker +k8s dockerk8s好学吗_docker +k8s_16

sudo systemctl daemon-reload //重新加载配置
sudo systemctl restart docker //重启docker

3、Docker基本使用

(1)镜像相关操作

#从dockerhub查找镜像

#docker search centos

docker +k8s dockerk8s好学吗_kubernetes_17


解释说明:

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED: 自动构建。

//拉取最新镜像
 #docker pull centos //默认从dockerhub官方拉取
 //查看本地镜像
 #docker images
 //删除镜像
 #docker rmi -f centos:latest
 //把镜像做成离线压缩包
 #docker save -o centos.tar.gz centos
 //解压压缩包
 #docker load -i centos.tar.gz

(2)容器相关操作

/./先把删除的镜像解压出来

#docker load -i centos.tar.gz

以交互方式启动并进入容器

#docker run --name=hello -it centos /bin/bash //hello为容器的名字,基于centos镜像

docker +k8s dockerk8s好学吗_docker_18


#exit退出 //容器也就停了
 #docker ps //查看正在运行的镜像
 #docker ps -a //查看所有的镜像

以守护进程启动方式

#docker run --name=hello1 -d centos /bin/bash
 #docker ps //未起来
 #docker rm -rf hello
 #docker run --name=hello -td centos
 #docker ps //再次查看 -t是分配一个伪终端,d是在后台运行
 #docker exec -it hello1 /bin/bash //-i是交互式 登录容器
 #docker ps

(3)常用命令总结

#docker ps //查看正在运行的容器
 #docker ps -a //将所有运行和退出的容器都列出来
 #docker stop hello1 //停止容器
 #docker start hello1 //启动已经停止的容器
 #docker exec -it hello1 /bin/bash //进入容器
 #docker rm -f hell01 //删除容器
 #docker --help //查看docker支持哪些命令

4、通过Docker部署nginx服务

(1)相关命令

#docker run --name niginx -p 80 -itd centos
 #docker ps | grep nginx

docker +k8s dockerk8s好学吗_docker +k8s_19


//在浏览器访问:IP:49153 不行
 #docker exec -it nginx /bin/bash
 //yum安装nginx
 //更新yum源
 #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
 #cd /etc/yum.repos.d/

docker +k8s dockerk8s好学吗_docker_20


#yum install wget -y
 #yum install nginx -y
 #yum install vim-enhanced -y //安装文本编辑器vim
 //创建静态页面
 mkdir /var/www/html -p
 cd /var/www/html/
 cat index.html

docker +k8s dockerk8s好学吗_docker_21


//修改nginx配置文件中的root路径,如下
 vim /etc/nginx/nginx.conf
 root /var/www/html/;
 #/usr/sbin/nginx //启动nginx
 #exit
 #docker ps | grep nginx

docker +k8s dockerk8s好学吗_centos_22

//能查看到nginx容器在物理机映射的端口是49153
 //再次访问 IP:49153
 curl http://192.168.40.180:49153

docker +k8s dockerk8s好学吗_kubernetes_23

也可以直接访问容器的ip:port

[root@xianchaomaster1 ~]# curl IP:80

docker +k8s dockerk8s好学吗_docker_24


docker +k8s dockerk8s好学吗_docker_25


流量走向:

访问物理节点ip:port(容器在物理节点映射的端口)–容器ip:port(容器里部署的服务的端口)->就可以访问到容器里部署的应用了

//查看容器的IP

#docker inspect nginx

docker +k8s dockerk8s好学吗_centos_26


#192.168.40.180;49153->172.17.0.2:80

二、基于Dockerfile构建企业级生产环境镜像

1、Dockerfile构建文本文件分析流程

Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

基于Dockerfile构建镜像可以使用docker build命名,docker build命令中使用-f可以指定具体的dockerfile文件。

基础的dockerfile内容:

FROM centos
 MAINTAINER wenqian
 RUN yum install wget -y
 RUN yum install nginx -y

docker +k8s dockerk8s好学吗_centos_27