docker快速入门
1.2 Docker容器化技术的介绍和使用场景
什么是Docker?
Docker 是一个开源的应用容器引擎,允许开发者将应用及其依赖打包到一个可移植的容器中,发布到任何流行的 Linux 机器上,实现虚拟化。
为什么要使用Docker?
总结一句话:开箱即用,快速部署,可移植性强,环境隔离。
Docker的特点
快速部署:可以快速启动应用。
资源隔离:实现虚拟化,完整资源隔离。
可移植性:一次编写,四处运行。(注意:Docker 仅支持基于 Linux 64位的环境)
使用Docker的优势
优势 说明
提供一次性的环境 例如安装MySQL时,可以通过镜像直接启动,无需安装多个依赖库和版本。
快速动态扩容 使用Docker部署的应用可以制作成镜像后,快速启动多个实例。
组建微服务架构 可以在单台机器上模拟多个微服务,启动多个应用。
更好的资源隔离与共享 各个容器之间相互隔离,互不影响。
🛠️ Docker容器基础入门实战
2.1 Windows 10 环境下安装Docker
安装包下载地址
Docker for Windows 10: Docker下载链接
国内镜像加速
Docker中国区镜像加速: https://registry.docker-cn.com
网易镜像: http://hub-mirror.c.163.com
2.2 Linux CentOS 7 环境下安装Docker
安装条件
Docker官方要求:至少3.8以上,建议3.10以上。
Docker 版本
Docker EE:企业版本
Docker CE:社区版本
安装步骤
关闭防火墙:
bash
Copy
systemctl stop firewalld.service
vi /etc/selinux/config
安装Docker CE社区版本:
bash
Copy
yum install -y docker-ce.x86_64
设置开机启动:
bash
Copy
systemctl enable docker
启动Docker:
bash
Copy
systemctl start docker
查看版本:
bash
Copy
docker version
查看详细信息:
bash
Copy
docker info
2.3 Docker镜像的搜索、下载及查看删除实战
什么是镜像?
Docker镜像是一个轻量级、可执行的独立软件包,包含运行某个软件所需的所有代码、库、依赖、工具和设置。
常用命令
命令 说明
docker images 查看本地镜像
docker search centos 搜索镜像
docker search --filter “is-official=true” centos 搜索官方镜像
docker search --filter stars=10 centos 搜索大于10颗星的镜像
docker pull centos:7 下载centos7镜像
docker tag centos:7 mycentos:1 修改本地镜像名字
docker rmi centos:7 删除本地镜像
2.4 Docker核心基础之配置阿里云镜像加速
配置步骤
配置阿里云镜像加速器:
bash
Copy
vi /etc/docker/daemon.json
重启Docker:
bash
Copy
systemctl daemon-reload && systemctl restart docker
2.5 Docker的体系结构之镜像与容器
镜像与容器的关系
一个镜像可以启动无数台容器(受限于机器性能)。
容器之间的操作互不影响,处于隔离的环境。
2.6 Docker核心基础之容器的构建等基本操作
构建容器
使用以下命令构建一个新的Docker容器:
bash
Copy
docker run -itd --name=mycentos centos:7
参数 说明
-i 以交互模式运行容器。
-d 后台运行容器,并返回容器ID。
-t 为容器重新分配一个伪输入终端。
容器的基本操作
操作 命令
查看所有容器 docker ps -a
查看正在运行的容器 docker ps
停止容器 docker stop CONTAINER_ID/CONTAINER_NAME
启动容器 docker start CONTAINER_ID/CONTAINER_NAME
删除容器 docker rm CONTAINER_ID/CONTAINER_NAME
查看容器详细信息 docker inspect CONTAINER_ID/CONTAINER_NAME
进入容器 docker exec -it CONTAINER_ID /bin/bash
2.7 Docker核心基础之容器的文件复制与挂载
文件操作命令
操作 命令
从宿主机复制到容器 docker cp 宿主机路径 容器名字/ID:容器路径
从容器复制到宿主机 docker cp 容器名字/ID:容器路径 宿主机路径
宿主机文件夹挂载到容器 docker run -itd -v 宿主机路径:容器路径 镜像ID
3.1 构建自定义镜像的意义与应用场景
自定义镜像的重要性
通过自定义镜像,可以更好地满足特定应用的需求。
镜像构建方法
方法 说明
基于Docker Commit制作镜像 直接修改并保存容器的当前状态。
基于Dockerfile制作镜像 使用Dockerfile定义构建过程,是主流方法。
3.2 Commit构建自定义镜像
操作步骤
启动并进入容器:
bash
Copy
docker run -it centos:7 /bin/bash
在容器内创建文件夹:
bash
Copy
mkdir /home/xdclass
安装命令:
bash
Copy
yum -y install net-tools
重启容器,检查文件夹是否存在:
bash
Copy
docker restart CONTAINER_ID
构建镜像:
bash
Copy
docker commit CONTAINER_ID mycentos:7
3.3 Dockerfile构建镜像实战
Dockerfile 示例
dockerfile
Copy
this is a dockerfile
FROM centos:7
MAINTAINER XD 123456@qq.com
RUN echo “正在构建镜像!!!”
WORKDIR /home/xdclass
COPY 123.txt /home/xdclass
RUN yum install -y net-tools
构建镜像命令
bash
Copy
docker build -t mycentos:v2 .
3.4 Docker核心知识之镜像分层结构剖析
镜像分层结构总结
共享资源:镜像层之间可以共享相同的资源。
容器层:对容器的任何改动都是发生在容器层,容器层是可写可读的。
镜像层:只读。
3.5 Dockerfile基础指令
指令 说明
FROM 基于哪个镜像
MAINTAINER 注明作者
COPY 复制文件进入镜像(相对路径)
ADD 复制文件进入镜像(支持解压.tar.gz文件)
WORKDIR 指定工作目录(路径不存在会创建)
ENV 设置环境变量
EXPOSE 暴露容器端口
RUN 在构建镜像时执行的命令
ENTRYPOINT 容器启动时执行的命令
CMD 容器启动后执行的默认命令或参数
3.6 Dockerfile构建JAVA网站镜像
示例 Dockerfile
dockerfile
Copy
FROM centos:7
RUN echo “images building!”
CMD [“echo”,“container”,“starting…”]
ENTRYPOINT [“echo”,“container”,“starting !!!”]
3.7 Dockerfile构建nginx镜像
示例 Dockerfile
dockerfile
Copy
FROM centos:7
ADD nginx-1.16.0.tar.gz /usr/local
COPY nginx_install.sh /usr/local
RUN sh /usr/local/nginx_install.sh
EXPOSE 80
制作Nginx镜像命令
bash
Copy
docker build -t mycentos:nginx .
3.8 Dockerfile构建redis镜像
示例 Dockerfile
dockerfile
Copy
FROM centos:7
ADD redis-4.0.9.tar.gz /home
COPY redis_install.sh /home
RUN sh /home/redis_install.sh
ENTRYPOINT /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
3.9 Docker快速部署MySQL数据库并初始化
启动命令
bash
Copy
docker run --name some-mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -d mysql:5.7
Dockerfile 示例
dockerfile
Copy
FROM mysql:5.7
WORKDIR /docker-entrypoint-initdb.d
ENV LANG=C.UTF-8
ADD init.sql .
初始化SQL语句
sql
Copy
– 创建数据库
CREATE DATABASE db_student
;
– 设置字符集
SET character_set_client = utf8;
USE db_student;
– 创建表
DROP TABLE IF EXISTS user
;
CREATE TABLE user (
id tinyint(5) zerofill auto_increment NOT NULL COMMENT ‘学生学号’,
name varchar(20) DEFAULT NULL COMMENT ‘学生姓名’,
age tinyint DEFAULT NULL COMMENT ‘学生年龄’,
class varchar(20) DEFAULT NULL COMMENT ‘学生班级’,
sex char(5) NOT NULL COMMENT ‘学生性别’,
UNIQUE KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
– 插入数据
INSERT INTO user VALUES(‘1’,‘小明’,‘15’,‘初三’,‘男’);
INSERT INTO user VALUES(‘2’,‘小红’,‘13’,‘初二’,‘女’);
4.1 Docker容器的网络模式介绍
默认的三种网络模式
网络模式 说明
bridge 桥接模式
host 主机模式
none 无网络模式
查看网络模式
bash
Copy
docker network ls
4.2 Docker容器的bridge模式实战演练
桥接模式详解
桥接模式是Docker的默认网络设置,会在主机上创建一个名为docker0的虚拟网桥。
安装工具
bash
Copy
yum -y install net-tools
yum install -y bridge-utils
查看桥接情况
bash
Copy
brctl show
4.3 Docker容器的host模式实战演练
主机模式详解
在host模式下,容器使用宿主机的IP地址和端口,没有自己的IP地址。
启动nginx容器命令
bash
Copy
docker run -d --net=host mycentos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;”
防火墙设置
bash
Copy
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
4.4 Docker容器的none模式介绍
关闭网络模式
在none模式下,容器无法连外网。
4.5 Docker容器间基于Link实现单向通信
启动MySQL数据库容器
bash
Copy
docker run --name mydb -e MYSQL_ROOT_PASSWORD=abc123456 -d mysql:5.7
启动Tomcat应用容器并link到MySQL数据库
bash
Copy
docker run -itd --link mydb:mysql --name=myapp tomcat
🐳 Docker 网络与容器操作
4.6 Docker容器间利用Bridge网桥实现双向通信
“介绍基于Bridge网桥实现双向通信。”
创建与管理网络
- 执行命令查看网络:
docker network ls
创建新的网桥:
bash
Copy
docker network create -d bridge my_bridge
启动容器并连接网络
启动第一个容器:
bash
Copy
docker run -itd --name tomcat centos:7
启动第二个容器:
bash
Copy
docker run -itd --name redis centos:7
连接容器到网桥:
bash
Copy
docker network connect my_bridge tomcat
docker network connect my_bridge redis
验证连接
进入两个容器中进行验证。
4.7 Docker容器的特权模式介绍
“介绍特权模式。”
启动普通容器
启动普通容器:
bash
Copy
docker run -itd --name mycentos centos:7 /bin/bash
安装网络工具:
bash
Copy
yum -y install net-tools
执行路由命令:
bash
Copy
route -n
启动拥有特权模式的容器
启动特权模式容器:
bash
Copy
docker run -itd --privileged=true --name mycentos1 centos:7 /bin/bash
验证特权模式
进入容器并删除网关:
bash
Copy
route del default gw 172.17.0.1
成功执行。
注意:特权模式使用频率较低。
4.8 Docker核心知识之Volume数据共享
“介绍Volume的使用。”
Volume的定义与使用
在Dockerfile中设置Volume:
dockerfile
Copy
FROM centos:7
VOLUME "/usr/local""/usr/local""/usr/local"
注意:在Dockerfile里设置的Volume无法修改宿主机的挂载路径。
创建nginx集群
创建nginx1容器:
bash
Copy
docker run -itd -p 8080:80 -v /usr/local/nginx/html:/usr/local/nginx/html --name nginx1 mycentos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;”
创建nginx2容器:
bash
Copy
docker run -itd -p 8081:80 --volumes-from nginx1 --name nginx2 mycentos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;”
创建nginx3容器:
bash
Copy
docker run -itd -p 8082:80 --volumes-from nginx1 --name nginx3 mycentos:nginx /usr/local/nginx/sbin/nginx -g “daemon off;”
修改与验证
修改/usr/local/nginx/html/index.html,并在浏览器中访问进行测试。
使用docker inspect 容器ID查看详细的挂载信息。
5.1 实用工具Docker-Compose的介绍与安装
“介绍Docker-Compose的功能与安装。”
Docker-Compose的定义
docker-compose:用于定义和运行多容器应用程序的工具,方便高效地管理容器。
安装步骤
安装pip工具:
bash
Copy
yum install -y epel-release
yum install -y python-pip
安装docker-compose:
bash
Copy
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose==1.24.1
查看版本:
bash
Copy
docker-compose version
处理安装错误
如果yum install python-pip失败,可尝试以下解决方案:
联系上游仓库修复问题。
重新配置基础URL。
禁用仓库。
配置跳过不可用的仓库。
5.2 实用工具Docker-Compose的快速上手
“快速上手Docker-Compose。”
编写最简单的yml文件
yaml
Copy
version: ‘3’
services:
redis:
image: mycentos:redis
运行与管理容器
后台启动容器:
bash
Copy
docker-compose up -d
查看容器运行情况:
bash
Copy
docker-compose ps
停止并删除容器:
bash
Copy
docker-compose down
停止启动容器:
bash
Copy
docker-compose stop
docker-compose start
进入容器:
bash
Copy
docker-compose exec redis bash
操作docker-compose时需在配置文件目录下执行,确保YAML格式正确。
5.3 实用工具Docker-Compose核实用技能
“掌握Compose的核心实用技能。”
docker-compose.yml的结构
三大部分:
version
services
networks
服务与网络设置
设置网络模式。
使用端口映射。
设置文件共享。
管理多个容器。
yaml
Copy
version: ‘3’
services:
nginx:
image: mycentos:nginx
network_mode: “host”
volumes:
- /home:/usr/local/nginx/html
- /var/logs/nginx/logs:/usr/local/nginx/logs
command: /usr/local/nginx/sbin/nginx -g “daemon off;”
redis:
image: mycentos:redis
ports:
- “6380:6379”
5.4 实战项目篇之利用Docker-Compose快速搭建个人博客
“快速搭建个人博客WordPress。”
Docker-Compose配置
yaml
Copy
version: ‘3.3’
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- “8000:80”
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
启动与访问
启动WordPress:
bash
Copy
docker-compose up -d
打开浏览器访问:IP:8000进行安装配置。
删除容器与网络
删除容器和默认网络,但保留WordPress数据库:
bash
Copy
docker-compose down
删除容器、默认网络和WordPress数据库:
bash
Copy
docker-compose down --volumes
5.5 实战项目篇之Docker-Compose详细分析
“分析docker-compose.yml文件。”
docker-compose.yml解析
yaml
Copy
version: ‘3.3’
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- “8000:80”
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
Volumes的设置方式
有两种方式设置Volumes:
具体路径直接挂载到本地。
使用卷标的形式,特点简洁但不直观。
6.1 公司中Docker镜像仓库使用讲解
“讲解公司中docker仓库的使用。”
镜像仓库的定义
存放众多镜像的仓库。
使用镜像仓库的原因
起到备份作用。
方便其他机器下载使用。
镜像仓库的种类
公共镜像仓库
官方:https://hub.docker.com/
非官方:其他组织或公司开发的镜像。
私有镜像仓库
公司自行搭建,存放内部镜像,避免商业项目暴露风险。
6.2 阿里云镜像仓库的搭建与使用
“介绍阿里云镜像仓库。”
阿里云镜像仓库申请
访问地址:https://cr.console.aliyun.com/cn-shanghai/instances/repositories
操作步骤
登录阿里云Docker Registry:
bash
Copy
sudo docker login --username=用户名 registry.cn-shenzhen.aliyuncs.com
将镜像推送到Registry:
bash
Copy
sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/xdclassimages/mysql:[镜像版本号]
sudo docker push registry.cn-shenzhen.aliyuncs.com/xdclassimages/mysql:[镜像版本号]
从Registry中拉取镜像:
bash
Copy
sudo docker pull registry.cn-shenzhen.aliyuncs.com/xdclassimages/mysql:[镜像版本号]
6.3 企业核心篇幅之harbor仓库搭建
“构建自己的镜像仓库。”
安装前置条件
确保安装docker、docker-compose、openssl及python2.7以上版本。
安装步骤
安装openssl:
bash
Copy
yum -y install openssl
下载Harbor离线版安装包。
修改配置文件harbor.yml:
修改主机名与密码。
执行安装命令:
bash
Copy
sh install.sh
访问Harbor,默认用户名为admin。
6.4 企业核心篇幅之harbor仓库配置与使用
“配置与使用harbor仓库。”
Docker配置使用自建仓库
默认Docker只允许访问HTTPS仓库。
配置允许访问HTTP仓库:
json
Copy
{
“insecure-registries”: "http://192.168.0.151""http://192.168.0.151""http://192.168.0.151"
}
重启Docker服务:
bash
Copy
systemctl restart docker.service
登录与推送操作
登录:
bash
Copy
docker login --username=admin 192.168.0.151
改名与推送:
bash
Copy
docker tag mysql:5.7 192.168.0.151/xdclass/mysql:5.7
docker push 192.168.0.151/xdclass/mysql:5.7
6.5 实战系列之本地镜像容器的载入与载出
“镜像的本地载入载出。”
保存与载入镜像
保存镜像:
bash
Copy
docker save cd3ed0dff7e -o /home/mysql.tar
docker save mysql:5.7 > /home/mysql.tar
载入镜像:
bash
Copy
docker load -i mysql.tar
保存与载入容器
保存容器:
bash
Copy
docker export 974b919e1fdd -o /home/mysql-export.tar
载入容器:
bash
Copy
docker import mysql-export.tar