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(容器里部署的服务的端口)->就可以访问到容器里部署的应用了

posted @ 2022-11-21 15:20  Krill_ss  阅读(281)  评论(0编辑  收藏  举报