每天1小时,一周时间轻松搞懂Docker容器技术!偷偷努力 卷死Ta们

Docker容器技术初识

| Docker容器技术简介

Docker是一个开源项目,诞生与2013年初,由Docker公司(前dotCloud公司,PaaS市场中的老牌提供商)的团队编写,最初是dotCloud公司内部的一个业余项目,整个程序是基于google公司推出的Go语言实现。

Docker的思想来自于集装箱,集装箱解决了什么问题?

在一艘大船上,可以把货物规整地摆放起来,并且各种各样的货物被装在集装箱里,集装箱和集装箱之间不会相互影响,那么我就不需要专门运送蔬菜的船和专门运送货物的船了。

只要这些货物在集装箱里封装得好好的,那我就可以用一艘大船把他们都运走。

简而言之:可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器环境。

  • Docker官方网站:https://docs.docker.com
  • Docker参考资料:https://github.com/moby/moby
  • Docker仓库网站:https://registry.hub.docker.com

Docker容器技术优势

  • 简单轻量的建模:Docker上手超级快,用户只需要几分钟,就可以把自己的程序“Docker化”。
  • 职责的逻辑分离:使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。
  • 快速高效的开发生命周期:Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。
  • 鼓励使用面向服务的架构:Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型

每天1小时,一周时间轻松搞懂Docker容器技术!偷偷努力 卷死Ta们

从上图容器技术与虚拟技术对比可知:

  • 容器技术:

是隔离的环境中运行的一个进程,如果容器对应的进程结束,容器就会随之停止;

容器在隔离环境中,拥有自己的IP地址、系统文件、主机名称、进程管理等信息;

容器不需要物理硬件CPU的支持,是共用宿主机内核,启动容器环境并运行容器中的进程。

容器环境启动流程较快,运行性能较高,资源损耗较小,属于比较轻量级的服务。

  • 虚拟技术:

需要物理主机CPU支持(vt虚拟化),并且虚拟主机是模拟计算机硬件运行的环境,会正常有开启运行启动流程;

虚拟主机启动流程较慢,运行性能较低,资源损耗较大,属于比较重量级的服务器。

性能对比分析:

每天1小时,一周时间轻松搞懂Docker容器技术!偷偷努力 卷死Ta们

| Docker容器组件简介

Docker技术包含以下几个核心组件部分:

  • Docker客户端和服务器(也称为Dcoker引擎);
  • Docker镜像
  • Docker仓库(Registry)
  • Docker容器

01. Docker客户端和服务器

Docker是一个客户端/服务器(C/S)架构的程序。

Docker客户端只需要向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。

Docker守护进程有时也称为Docker引擎。

Docker提供了一个命令行工具docker以及一整套RESTful API来与守护进程交互。

  • 用户可以在同一台宿主机上运行Docker守护进程和客户端;
  • 用户可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

每天1小时,一周时间轻松搞懂Docker容器技术!偷偷努力 卷死Ta们

02. Docker镜像

可以把镜像当作容器的“源代码”。镜像体积很小,超级“便携”,易于分享、存储和更新。

03. Docker仓库(Registry)

Docker用Registry来保存用户构建的镜像。

Registry分为公共和私有两种:Docker公司运营的公共Registry称为Docker Hub。

用户可以在Dcoker Hub注册账号,分享并保存自己的镜像。

04. Docker容器

Docker可以协助用户构建和部署容器,用户只需要把自己的应用程序或服务打包放进容器即可。

容器是基于镜像启动起来的,容器中可以运行一个或多个进程。

可以这样认为,镜像是Docker生命周期中的构建或打包阶段,而容器则是启动或执行阶段。

今天给大家分享一个数据库全套学习资料包,【Docker快速入门视频+Docker学习笔记+视频配套资料合集】,一份资料包涵盖99%核心技术点。

Docker快速入门视频

每天1小时,一周时间轻松搞懂Docker容器技术!偷偷努力 卷死Ta们

Docker学习笔记

每天1小时,一周时间轻松搞懂Docker容器技术!偷偷努力 卷死Ta们

每天1小时,一周时间轻松搞懂Docker容器技术!偷偷努力 卷死Ta们

Docker教程目录

  • 数据库服务知识排错
  • 容器技术课程概述介绍
  • 容器技术概念介绍说明
  • 容器技术作用优势介绍
  • 容器技术核心组件构成
  • 容器服务部署前期优化
  • 容器服务部署安装过程
  • 容器服务镜像相关命令
  • 容器服务容器相关命令
  • 容器服务知识内容梳理
  • 容器服务技术梳理扩展
  • 容器服务数据持久存储
  • 容器服务网络模拟介绍
  • 容器虚拟网卡作用详述
  • 容器虚拟网卡通讯实践
  • 容器虚拟网卡模式应用
  • 容器镜像仓库自建作用
  • 容器镜像仓库证书创建
  • 容器镜像仓库构建过程-harbor
  • 容器镜像仓库应用说明
  • 容器服务构建靶场环境

【领取方式见文末】

【领取方式见文末】

【领取方式见文末】

Docker环境构建方法

| Docker主机环境规划

在部署docker主机环境时,先对需要进行部署的主机地址与名称信息,以及用途进行规划:

每天1小时,一周时间轻松搞懂Docker容器技术!偷偷努力 卷死Ta们

系统虚拟主机部署完毕后,需要进行基本的系统初始化操作:

01. 配置虚拟主机名称:

hostnamectl set-hostname docker-01

02. 关闭系统安全软件:

# 关闭系统防火墙软件
[root@docker-01 ~]# systemctl stop firewalld          
[root@docker-01 ~]# systemctl is-active firewalld.service 
inactive
[root@docker-01 ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@docker-01 ~]# systemctl is-enabled firewalld.service 
disabled
说明:如果需要使用iptables防火墙可以进行安装,在部署docker是可以先关闭iptables

# 安装iptables
[root@docker-01 ~]# yum install iptables-services -y
# 禁用iptables
[root@docker-01 ~]# systemctl stop iptables && systemctl disable iptables
# 清空iptables规则配置
[root@docker-01 ~]# iptables -F

# 关闭系统selinux程序
[root@docker-01 ~]# setenforce 0        
[root@docker-01 ~]# getenforce 
Permissive              
-- 表明临时关闭selinux
[root@docker-01 ~]# sed -i '7s#enforcing#disabled#g' /etc/selinux/config
[root@docker-01 ~]# sed -n '7p' /etc/selinux/config 
SELINUX=disabled        
-- 表明永久关闭selinux(需要重启生效)    

03. 进行系统时间同步:

# 下载时间同步软件
[root@docker-01 ~]# yum install -y ntp ntpdate   
[root@docker-01 ~]# ntpdate cn.pool.ntp.org 

# 编写计划任务
[root@docker-01 ~]# crontab -e 
* */1 * * * /usr/sbin/ntpdate  cn.pool.ntp.org &>/dev/null

# 重启crond服务使配置生效:
[root@docker-01 ~]# systemctl restart crond

04. 安装系统基础软件:

[root@docker-01 ~]# 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 yum-utils

| Docker容器软件部署

【Linux系统命令行界面安装】

01. 进行docker下载源优化:

# 配置docker-ce国内下载yum源(阿里云/清华源)
[root@docker-01 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
… 省略部分内容…
repo saved to /etc/yum.repos.d/docker-ce.repo
说明:将指定下载源文件保存到/etc/yum.repos.d/目录中
--清华源配置:https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/

02. 进行docker依赖包安装:

[root@docker-01 ~]# yum install -y device-mapper-persistent-data lvm2

03. 进行docker社区版安装:

[root@docker-01 ~]# yum install docker-ce -y 
[root@docker-01 ~]# docker version
Client: Docker Engine - Community
 Version:                    20.10.7            
-- 查看使用的Docker版本信息
 API version:           1.41
 Go version:            go1.13.15
 Git commit:               f0df350
 Built:                      Wed Jun  2 11:58:10 2021
 OS/Arch:                    linux/amd64
 Context:                    default
 Experimental:           true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

04. 进行docker社区版启动:

[root@docker-01 ~]# systemctl start docker && systemctl enable docker
[root@docker-01 ~]# systemctl status dockerdocker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2021-07-31 04:11:16 CST; 9s ago
     Docs: https://docs.docker.com
说明:看到running,表明docker正常运行

| Docker容器内核配置

01. 修改内核参数实现数据包转发功能:

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

# 进行内核参数信息配置:
[root@docker-01 ~]# modprobe br_netfilter
[root@docker-01 ~]# 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@docker-01 ~]# cat /etc/sysctl.d/docker.conf 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

# 加载内核参数配置信息:
[root@docker-01 ~]# sysctl -p /etc/sysctl.d/docker.conf 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

# 检查确认内核模块状态:
[root@docker-01 ~]# lsmod | grep br_netfilter
br_netfilter         22256      0 
bridge              151336  1   br_netfilter

重启系统主机后模块会失效,可以设置开机自动加载模块:

# 在/etc/sysconfig/modules目录下新建模块文件
[root@docker-01 ~]# vim /etc/sysconfig/modules/br_netfilter.modules
modprobe br_netfilter

# 对新增的模块文件增加执行权限
[root@docker-01 ~]# chmod +x /etc/sysconfig/modules/br_netfilter.modules
或者
[root@docker-01 ~]# chmod 755 /etc/sysconfig/modules/br_netfilter.modules

# 在/etc目录下新建rc.sysinit文件
[root@docker-01 ~]# vim /etc/rc.sysinit
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules
do
  [ -x $file ] && $file
done

# 系统重启后查看内核模块是否加载
[root@docker-01 ~]# lsmod | grep br_netfilter
br_netfilter        22256       0 
bridge              151336        1 br_netfilter

在未开启内核参数时,docker安装运行时会常常出现如下错误:

WARNING: bridge-nf-call-iptables is disabled
# 需要将iptables的内核参数开启,才不会影响docker容器之间的通讯
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

将Linux系统作为路由或者VPN服务就必须要开启IP转发功能。

当linux主机有多个网卡时一个网卡收到的信息是否能够传递给其他的网卡,如果设置成1的话可以进行数据包转发,可以实现VxLAN等功能,不开启会导致docker部署应用无法访问。

# 开启系统主机数据包内核转发功能
net.ipv4.ip_forward = 1

所有内核参数信息配置完毕后,需要重启docker服务程序

[root@docker-01 ~]# systemctl restart docker 

| Docker容器加速配置

docker镜像加速器可以提升拉取镜像的效率。

国内从DockerHub拉取镜像有时会遇到困难,此时可以配置镜像加速器,Docker官方和国内许多云服务商都提供了国内加速器服务。

01. 镜像加速器服务配置_阿里云

登录阿里云镜像仓库:(如果没有开通,可开通阿里云的镜像服务)

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

每天1小时,一周时间轻松搞懂Docker容器技术!偷偷努力 卷死Ta们

CentOS系统配置docker镜像加速器方法:

# 1. 安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce

# 2. 配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

[root@docker-01 ~]# mkdir -p /etc/docker
[root@docker-01 ~]# tee /etc/docker/daemon.json <<-'EOF'{
   "registry-mirrors": ["https://y1edhblz.mirror.aliyuncs.com"] 
   -- 根据自己阿里云加速器地址配置
}
EOF# 3. 查看镜像加速器配置文件信息[root@docker-01 ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://y1edhblz.mirror.aliyuncs.com"]      
  -- 单一加速器配置
  或者
  "registry-mirrors": ["https://y1edhblz.mirror.aliyuncs.com","https://registry.docker- cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
  -- 多个加速器配置
}# 4. 重新加载docker配置环境并重启docker服务[root@docker-01 ~]# systemctl daemon-reload
[root@docker-01 ~]# systemctl restart docker

Docker基本管理命令

| Docker镜像相关操作说明

01. 在Docker hub上查找镜像信息

[root@docker-01 ~]# docker search centos 

02. 在Docker hub上下载镜像信息

[root@docker-01 ~]# docker pull centos

03. 查看本地已经下载的镜像

[root@docker-01 ~]# docker images

04. 已有镜像制作离线压缩包

[root@docker-01 ~]# docker save -o centos.tar.gz centos     
说明:一旦压缩包制作完成,就可以利用压缩文件分享容器镜像数据信息

05. 加载镜像离线压缩包文件

[root@docker-01 ~]# docker load -i centos.tar.gz 
Loaded image: centos:latest
说明:容器镜像压缩包不要用tar命令进行解压,要用docker load加载及解压镜像压缩包

06. 删除本地已经下载的镜像

[root@docker-01 ~]# docker rmi centos   rmi 
或者
[root@docker-01 ~]# docker rmi -f centos    
-- 表明强制删除镜像信息

[root@docker-01 ~]# docker images           
-- 镜像信息查看,确认指定镜像已经删除
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

| Docker容器相关操作说明

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

[root@docker-01 ~]# docker run --name=hello -it centos /bin/bash
说明:运行以上命令表明启动容器并进入容器中进行交互操作,docker run表明运行容器命令

02. 守护进程方式运行启动容器

[root@docker-01 ~]# docker run --name=hello1 -td centos
31f18b2ddf88a72b2ef62e14b7a383d9e27a07e514fc1de0b37c537b37f78402
-- 利用td参数可以实现指定容器以守护进程方式运行

[root@docker-01 ~]# docker ps 
CONTAINER ID IMAGE     COMMAND        CREATED              STATUS         PORTS    NAMES
31f18b2ddf88  centos  "/bin/bash"   11 seconds ago  Up 10 seconds                   hello1
-- 指定的hello1容器已经实现守护进程方式运行,容器操作退出后,容器仍旧处于运行状态

[root@docker-01 ~]# docker exec -it hello1 /bin/bash
[root@31f18b2ddf88 /]#
-- 表明进入到指定的守护进程方式运行的容器中,利用docker exec进入到指定容器  

03. 查看容器处于运行状态命令

# 查看正在运行的容器
[root@docker-01 ~]# docker ps
CONTAINER ID IMAGE  COMMAND   CREATED        STATUS         PORTS    NAMES
f575329c7325  centos   "/bin/bash"  4 minutes ago   Up 4 minutes             hello

# 查看所有可用的容器
[root@docker-01 ~]# docker ps -a
CONTAINER ID IMAGE  COMMAND   CREATED        STATUS         PORTS    NAMES
f575329c7325  centos  "/bin/bash"  6 minutes ago   Exited (0) 6 seconds ago   hello
说明:docker ps -a表明将所有容器信息显示,包括已经退出的容器  

04. 管理容器运行状态相关命令

# 停止指定容器运行状态
[root@docker-01 ~]# docker stop hello1
hello1
[root@docker-01 ~]# docker ps -a 
CONTAINER ID IMAGE  COMMAND           CREATED        STATUS         PORTS    NAMES
31f18b2ddf88  centos  "/bin/bash"  12 minutes ago  Exited (0)…                   hello1

# 激活指定容器活跃状态
[root@docker-01 ~]# docker start hello1
hello1
[root@docker-01 ~]# docker ps
CONTAINER ID IMAGE  COMMAND            CREATED        STATUS         PORTS    NAMES 
31f18b2ddf88  centos  "/bin/bash"  14 minutes ago  Up 3 seconds                 hello1

05.进入运行状态容器当中命令

# 进入到指定运行容器中
[root@docker-01 ~]# docker exec -it hello1 /bin/bash
[root@31f18b2ddf88 /]#

06. 删除指定使用容器相关命令

# 删除未运行状态的容器,直接利用docker rm删除即可
[root@docker-01 ~]# docker rm hello
hello
[root@docker-01 ~]# docker ps -a        
-- 普通删除生效,hello容器已经消失
CONTAINER ID IMAGE  COMMAND           CREATED          STATUS         PORTS    NAMES 
31f18b2ddf88  centos  "/bin/bash"   18 minutes ago Up 4 minutes                  hello1

# 删除已运行状态的容器,直接利用docker rm -f 删除即可
[root@docker-01 ~]# docker rm -f hello1
hello1
[root@docker-01 ~]# docker ps -a        
-- 强制删除生效,hello1容器已经消失
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

07. 获取容器运行过程日志信息

# 获取容器操作日志信息
[root@docker-01 ~]# docker logs hello1
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
皈依妙乐的头像 - 宋马社区
评论 共4条

请登录后发表评论