Docker容器技术
第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 容器优化
目前创建的容器还有几个问题:
- 容器创建后,会自动进入容器内部,没有后台运行
容器名称随机生成,不利于运维管理
为了解决上述问题,需要掌握以下参数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
服务的访问方式有三种:
- 容器ip地址:容器服务端口
- localhost:真实机端口 (本地访问)
真实机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.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 | / | 版本声明 |
services | container_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