docker基础入门

1、容器跟虚拟机什么区别?

在这里插入图片描述
App在虚拟机中运行时,调用需要经过虚拟化软件的处理,才能调用到真正的宿主机操作系统。

在容器中运行,直接可以使用宿主机操作系统,省事省力,可喜可贺。

容器技术的优点:敏捷和高性能:直接调用宿主机操作系统,不需要经过虚拟化软件的处理。

2、docker是什么?

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在GitHub 上进行维护。

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何支持docker的机器上运行。容器是完全使用沙箱机制,相互之间不会有任何接口调用。
Docker logo:
在这里插入图片描述
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被装在集装箱里,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送蔬菜的船和专门运送货物的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
docker就是类似的理念。云计算就好比大货轮。docker就是集装箱。

3、docker的优点

(1)快

  • 运行时的性能快,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。

(2)敏捷

  • 像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。

(3)灵活

  • 将应用和系统“容器化”,不添加额外的操作系统

’(4)轻量

  • 在一台服务器上可以布署100~1000个Containers容器。

(5)便宜

  • 开源的,免费的,低成本的。

docker分类

  • docker-ce:社区版
  • docker-ee: 商业版
4、docker缺点

所有容器共用linux kernel资源,资源能否实现最大限度利用,所以在安全上也会存在漏洞。

5、安装Docker
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld

关闭iptables防火墙
yum install iptables-services -y  #安装iptables

禁用iptables
service iptables stop   && systemctl disable iptables

清空防火墙规则
iptables -F 

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

getenforce
显示Disabled表示selinux关闭成功

# 配置时间同步
yum install -y ntp ntpdate
ntpdate cn.pool.ntp.org

#编写计划任务
crontab -e
* */1 * * * /usr/sbin/ntpdate   cn.pool.ntp.org
* 
重启crond服务使配置生效
systemctl restart crond

安装基础软件包
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-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

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

#启动docker服务
systemctl start docker && systemctl enable docker

#查看Docker 版本信息
docker version
6、开启包转发功能和修改内核参数

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

[root@node1 ~]# modprobe br_netfilter
[root@node1 ~]# 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

#使参数生效
[root@node1 ~]# sysctl -p /etc/sysctl.d/docker.conf

重启后模块失效,下面是开机自动加载模块的脚本,在/etc/新建rc.sysinit 文件

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

在/etc/sysconfig/modules/目录下新建文件如下

cat /etc/sysconfig/modules/br_netfilter.modules
modprobe br_netfilter

增加权限

[root@node1 etc]# chmod +x /etc/sysconfig/modules/br_netfilter.modules

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

[root@node1 etc]# lsmod | grep br_netfilter
br_netfilter           22256  0
bridge                155432  1 br_netfilter

注:Docker 安装后出现:WARNING: bridge-nf-call-iptables is disabled 的解决办法:

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

net.ipv4.ip_forward = 1 将Linux系统作为路由或者VPN服务就必须要开启IP转发功能。当linux主机有多个网卡时一个网卡收到的信息是否能够传递给其他的网卡 ,如果设置成1 的话 可以进行数据包转发,可以实现VxLAN 等功能。不开启会导致docker部署应用无法访问。

#重启docker

[root@node1 etc]# systemctl restart docker
7、配置docker镜像加速器

登陆阿里云镜像仓库:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,如果没有开通,可开通阿里云的镜像服务
在这里插入图片描述
找到镜像加速器,然后按照箭头方向操作
修改/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"]
}

让配置文件生效

sudo systemctl daemon-reload
sudo systemctl restart docker

在这里插入图片描述

8、docker的基本用法
8.1 镜像相关操作
#从dockerhub查找镜像
[root@node1 ~]# docker search centos
NAME                                         DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                                       DEPRECATED; The official build of CentOS.       7475                [OK]
kasmweb/centos-7-desktop                     CentOS 7 desktop for Kasm Workspaces            33

couchbase/centos7-systemd                    centos7-systemd images with additional debug…   6                                       [OK]
dokken/centos-7                              CentOS 7 image for kitchen-dokken               6
解释说明:
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 是否为自动构建。

#下载镜像
[root@node1 ~]# docker pull centos

#查看本地镜像
[root@node1 ~]# docker images

#把镜像做成离线压缩包
[root@node1 ~]# docker save -o centos.tar.gz centos

#解压离线镜像包
[root@node1 ~]# docker load -i centos.tar.gz

#删除镜像
[root@node1 ~]# docker rmi -f centos:latest
8.2 容器相关操作

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

[root@node1 ~]# docker run --name=hello -it centos /bin/bash
[root@6a5cb28982f7 /]#
[root@node1 ~]# docker ps
CONTAINER ID        IMAGE                                               COMMAND                  CREATED             STATUS              PORTS               NAMES
6a5cb28982f7        centos                                              "/bin/bash"              34 seconds ago      Up 32 seconds                           hello

输入exit,退出容器,退出之后容器也会停止,不会再前台运行
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE                                               COMMAND                  CREATED              STATUS                      PORTS                  NAMES
6a5cb28982f7        centos                                              "/bin/bash"              About a minute ago   Exited (0) 12 seconds ago                          hello

#docker run运行并创建容器
--name 容器的名字
-i 交互式
-t 分配伪终端
centos: 启动docker需要的镜像
/bin/bash说明你的shell类型为bash,bash shell是最常用的一种shell, 是大多数Linux发行版默认的shell。 此外还有C shell等其它shell。

7.2.2 以守护进程方式启动容器

[root@node1 ~]# docker run --name=hello1 -td centos
03a1db0a31454794bf995270ff99824b91a1138d3567842932b898db271d0a91
You have new mail in /var/spool/mail/root
[root@node1 ~]# docker ps | grep hello1
03a1db0a3145        centos                                              "/bin/bash"              15 seconds ago      Up 14 seconds                           hello1
-d在后台运行docker

进入容器
[root@node1 ~]# docker exec -it hello1 /bin/bash
[root@03a1db0a3145 /]#

7.2.3 查看正在运行的容器

# 查看正在运行的容器
[root@node1 ~]# docker ps

#查看所有容器,包括运行和退出的容器
[root@node1 ~]# docker ps -a  

# 停止容器
[root@node1 ~]# docker stop hello1

# 启动已经停止的容器
[root@node1 ~]# docker start hello1

# 进入容器
[root@node1 ~]# docker exec -it hello1 /bin/bash

# 强制删除容器
[root@node1 ~]# docker rm -f hello1 
9、通过docker部署nginx服务
[root@node1 ~]# docker run --name nginx -p 80 -itd centos
#-p把容器端口随机在物理机随机映射一个端口

[root@node1 ~]# docker ps | grep nginx
dae2434e66fa        centos                                              "/bin/bash"              28 seconds ago      Up 27 seconds       0.0.0.0:32768->80/tcp   nginx

# 在docker里安装nginx
[root@node1 ~]# docker exec -it nginx /bin/bash
[root@dae2434e66fa /]#
[root@dae2434e66fa /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@dae2434e66fa /]#
[root@dae2434e66fa /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
24: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
#通过上面可以看到容器的ip是172.17.0.3

#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 install wget -y
yum install nginx -y 

# 安装文本编辑器vim
yum install vim-enhanced -y

# 创建静态页面
mkdir /var/www/html -p
cd /var/www/html/
cat index.html
<html>
        <head>
                 <title>nginx in docker</title>
        </head>
        <body>
                <h1>hello </h1>
        </body>
</html>

# 修改nginx配置文件中的root路径,如下
vim /etc/nginx/nginx.conf
root         /var/www/html/;

启动nginx
/usr/sbin/nginx

访问docker里的nginx服务,复制一个终端窗口,执行如下命令

[root@node1 ~]# docker ps | grep nginx
dae2434e66fa        centos                                              "/bin/bash"              4 minutes ago       Up 4 minutes        0.0.0.0:32768->80/tcp   nginx

#能查看到nginx容器在物理机映射的端口是32768
[root@node1 ~]# curl http://192.168.75.141:32768

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值