第1章 Docker容器技术

1.1 容器技术核心概念

​ 抓住两点核心概念,轻松理解容器技术

  • 容器化技术是一种 划分硬件资源 的技术。

    将真实机的硬件资源,按照工程需要,划分成小块,形成容器

  • 一个容器,就是一个主机

    具备CPU、内存、磁盘、网卡等硬件资源,具有一台主机的完整机能

​ 容器技术有几项重大优势:

  • 安全性:约束了风险范围
  • 隔离性:进程与文件隔离,容易解决批量进程端口冲突问题
  • 低成本:容器按需分配硬件资源,资源冗余少,无需购置额外硬件
  • 易移植:容器中的软件不直接依赖真实机系统和CPU架构,一次编译,到处运行

1.2 Docker安装部署

​ Docker官网: https://www.docker.com/
​ Docker官方文档: https://docs.docker.com/engine/install/centos/

实训:安装Docker

#安装yum管理工具
yum install -y yum-utils

#设置docker官方软件仓库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
#安装docker相关软件
yum install docker-ce docker-ce-cli containerd.io

#centos8需要安装依赖:
yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
#安装docker相关软件
yum install docker-ce docker-ce-cli
#查看docker版本 验证安装
docker -v

#启动docker服务
systemctl start docker

#设置随机启动服务
systemctl enable docker

实训:优化Docker镜像代理

#查看docker信息
docker info

#更改docker**镜像保存目录**为/home/docker,通过**代理**拉取镜像
vim /etc/docker/daemon.json

在daemon.json文件中输入以下代理配置

{
"graph": "/home/docker"
"registry-mirrors":["https://obou6wyb.mirror.aliyuncs.com"]
}

加载代理配置

#建立docker代理文件
mkdir /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://ip:port/"

#加载代理配置
systemctl daemon-reload

#重启docker服务
systemctl restart docker

#查看docker信息 验证配置
docker info

1.3 镜像管理

​ 镜像的核心概念

  • 容器技术募集硬件资源的目的,是为了运行软件,提供服务
  • 镜像是容器中运行软件的集合

    Docker镜像仓库: https://hub.docker.com/
    ​ 镜像管理命令主要有:

#搜索镜像 docker search [keyword]
docker search httpd

#拉取镜像 docker pull [image]
docker pull httpd
docker pull centos/httpd

#查看本地镜像
docker images

#高阶技巧 grep指令+regex正则 匹配特定镜像
docker images | grep '正则表达式' | awk '{print $3}'

1.4 容器管理

​ 有了镜像后,容器才能运行
​ 容器管理命令主要有:

#创建容器 容器的作用是运行镜像 docker run -it [image] 
docker run -it httpd

#退出容器 组合键 ctrl+c

#进入容器
docker exec -it 复制容器名称 bash

#查看容器
docker ps -a

#启动容器 docker start [containerID/containerName]
docker rm 复制容器名称
#停止容器 docker stop [containerID/containerName]
docker stop 复制容器名称

#删除容器 docker rm [containerID/containerName]
docker rm 复制容器名称

#高阶技巧 批量删除容器
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

1.5 容器优化

​ 目前创建的容器还有几个问题:

  1. 容器创建后,会自动进入容器内部,没有后台运行
  2. 容器名称随机生成,不利于运维管理
    ​ 为了解决上述问题,需要掌握以下参数

    docker run 
     -d 容器后台运行
     --name 容器命名
     
    #优化httpd服务容器
    docker run -d --name webserver httpd
    
    #方便容器管理
    docker stop webserver
    docker rm webserver

1.6 端口映射

​ 为了将容器服务对外暴露,应当把容器服务监听端口映射到真实机端口,让外界可以访问

docker run 
    -p 真实机端口:容器服务端口

#端口映射
docker run -d --name webserver -p 8080:80 centos/httpd

服务的访问方式有三种:

  1. 容器ip地址:容器服务端口
  2. localhost:真实机端口 (本地访问)
  3. 真实机ip地址:真实机端口 (外部访问)

    创建与主机通网段的网络

    docker network create -d macvlan --subnet=192.168.10.0/24 --gateway=192.168.10.1 -o parent=enp2s0 macnet
    docker run -it --name vm2 --network=macnet --ip=192.168.10.3 ubuntu:dgq bash

1.7 文件映射

​ 容器服务重运算,轻存储。容器本身不宜存放大量数据
​ 数据、网页等文件应当存储在真实机磁盘中,不会随着容器删除而丢失
​ 将存储在真实机中的文件映射到容器中,容器服务可以使用这些文件

docker run 
    -v 真实机目录:容器目录
    
#文件映射
docker run -d --name webserver -p 8080:80 -v /root/html:/var/www/html centos/httpd

1.8 docker-compose介绍

​ docker-compose是docker官方提供的容器集群管理工具
​ docker-compose官网: https://docs.docker.com/compose/install/
docker-compose采用配置文件的方式管理工程,有以下优点:

  1. 把临时性的搭建工程,转变为有文件记载的工程,利于维护
  2. 把多步骤逐个搭建,转变为一次性批量搭建,效率高

    1.9 docker-compose安装

#下载docker-compose源码 
#curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

或者
#curl -L "http://dgq.msdgq.com/down/docker-compose" -o /usr/local/bin/docker-compose

#添加可执行权限
chmod +x /usr/local/bin/docker-compose

#查看docker-compose版本 验证安装
docker-compose version

1.10 docker-compose使用

​ docker-compose的使用重点在于配置文件的编写,以下为主要配置项:

一级配置二级配置配置作用与含义
version/版本声明
servicescontainer_name容器名称
image所用镜像
volumes数据卷映射
ports端口号映射
environment环境变量设置
working_directory工作目录设置
command启动执行命令

​ 编写一个web服务容器配置

version: "2"
services:
  webserver1:
    container_name: "webserver1"
    image: "centos/httpd"
    volumes:
      - /root/html:/var/www/html
    ports:
      - 8080:80

容器配置编写完成后,可通过docker-compose指令进行批量管理:

[root@localhost ~]# docker-compose -h
Define and run multi-container applications with Docker.
Options:
  -f, --file FILE             Specify an alternate compose file
                              (default: docker-compose.yml)
#查看docker-compose指令帮助可知:
##这是一个多容器集群管理工具
##默认配置文件名为docker-compose.yml

#启动集群
docker-compose up -d
docker-compose -f 配置文件路径 up -d

#关闭集群
docker-compose down -d

实训:搭建web服务容器集群

​ 编写docker-compose.yaml文件,定义多个web服务

version: "2"
services:
  web_server1:
    container_name: web_server1
    image: centos/httpd
    ports:
      - 80:80
    volumes:
      - /root/html:/var/www/html

  web_server2:
    container_name: web_server2
    image: httpd
    ports:
      - 8080:80
    volumes:
      - /root/html:/usr/local/apache2/htdocs

​ 完成后,在配置文件所在目录,执行docker-compose up -d指令启动容器

#清除多余容器
docker rm $(docker stop $(docker ps -aq))

#以下为界面显示内容,请勿直接复制
[root@localhost deploy]# pwd
/root/deploy
[root@localhost deploy]# ll
总用量 4
-rw-r--r-- 1 root root 318 6月  17 13:17 docker-compose.yaml
[root@localhost deploy]# docker-compose up -d
Creating web_server2 ... done
Creating web_server1 ... done
[root@localhost deploy]# docker ps -a
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
b861b14d5b41        centos/httpd        "/run-httpd.sh"      7 seconds ago       Up 6 seconds        0.0.0.0:80->80/tcp     web_server1
fe5b9b7a173b        httpd               "httpd-foreground"   7 seconds ago       Up 6 seconds        0.0.0.0:8080->80/tcp   web_server2

标签: none

评论已关闭