一、定义
快速构建、运行、管理应用的工具。
Docker可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用。
所谓镜像,就是将应用所需的函数库、依赖、配置等应用一起打包得到的。
所谓容器,为每个镜像的应用进程创建的隔离运行环境就是容器。
所谓镜像仓库,存储和管理镜像的服务,DockerHub是目前最大的镜像仓库。
二、快速入门(以CentOS7.9为例)
(一)CentOS7.9虚拟机配置
1、NAT的IP设置
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=ce7dc1ff-a3ff-4f7f-9868-1a8da06e5483
DEVICE=ens33
ONBOOT=yes
IPADDR=10.15.253.10
NETMASK=255.255.255.0
GATEWAY=10.15.253.254
2、yum源配置
备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backu
下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
(二)安装Docker
1、安装必要的依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2、添加 Docker 的官方仓库
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装 Docker 社区版(Docker CE)
sudo yum install -y docker-ce docker-ce-cli containerd.io
4、启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
5、验证 Docker 安装
sudo docker run hello-world
6、(可选)配置国内镜像源
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]
}
EOF
7、(可选)重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
(三)部署MySQL
1、前提条件
先停掉虚拟机中的MySQL;确保虚拟机已经安装Docker;网络畅通
2、部署
docker run -d \
--name mysql \
-p 3306:3306
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql:5.7
3、Docker命令解读
docker run -d \ 创建并运行一个容器,-d是让容器在后台运行
--name mysql \ 给容器起个名字,必须唯一
-p 3306:3306 设置端口映射,前是宿主机的端口,后是容器的端口。
-e TZ=Asia/Shanghai \ 设置环境变量
-e MYSQL_ROOT_PASSWORD=123 \ 设置环境变量
mysql:5.7 指定运行的镜像名字,一般由两部分组成:镜像名:镜像版本。
三、Docker基础
(一)常见命令
1、搜索 Nginx 镜像
在 Docker Hub 中搜索 Nginx 镜像,查看镜像名称:
docker search nginx
2、拉取 Nginx 镜像
拉取最新版本的 Nginx 镜像:
docker pull nginx
如果需要拉取特定版本的 Nginx,可以指定版本号,例如:
docker pull nginx:1.18.0
3、查看本地镜像列表
查看本地已拉取的镜像:
docker images
4、创建并运行 Nginx 容器
创建并运行一个 Nginx 容器,将容器的 80 端口映射到宿主机的 80 端口:
docker run -d -p 80:80 --name my-nginx nginx
5、查看容器
查看正在运行的容器:
docker ps
如果需要查看所有容器(包括已停止的),可以使用:
docker ps -a
6、停止容器
停止名为 my-nginx
的容器:
docker stop my-nginx
7、再次启动容器
启动名为 my-nginx
的容器
docker start my-nginx
8、进入 Nginx 容器
进入名为 my-nginx
的容器:
docker exec -it my-nginx /bin/bash
9、删除容器
删除名为 my-nginx
的容器:
docker rm my-nginx
如果容器正在运行,可以使用 -f
参数强制删除:
docker rm -f my-nginx
(二)数据卷
1、数据卷定义
数据卷(Volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
2、数据卷常用命令
命令 | 含义 |
docker volume create | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker volume rm | 删除指定数据卷 |
docker volume inspect | 查看某个数据卷详情 |
docker volume prune | 清除数据卷 |
3、利用Nginx容器部署静态资源
(挂载本地目录案例实操)
(1)在宿主机上创建静态资源目录:
mkdir -p ~/nginx/html
(2)创建自定义 index.html
文件:
echo '<!DOCTYPE html>
<html>
<head><title>Welcome to Nginx!</title>
</head>
<body><h1>Hello, this is a custom Nginx page!</h1>
</body>
</html>' > ~/nginx/html/index.html
(3)启动容器并挂载本地目录:
docker run --name mynginx \
-d -p 80:80 \
-v ~/nginx/html:/usr/share/nginx/html \
nginx
(4)验证
Windows机器访问:http://10.15.253.10/index.html
(三)自定义镜像
1、镜像含义
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。
2、Dockerfile
Dockerfile就是一个文本文件,其中包含一个个的指令,用指令来说明要执行什么操作来构建镜像。
指令 | 说明 | 示例 |
from | 指定基础镜像 | from centos:6 |
env | 设置环境变量 | env key value |
copy | 拷贝本地文件到镜像的指定目录 | copy ./jrell.tar.gz /tmp |
run | 执行Linux的shell命令,一般是安装过程的命令 | run tar -zxyf /tmp/jrell.tar.gz&& EXPORTS path=/tmp/jre11:$path |
expose | 指定容器运行时监听的端口 | expose 8080 |
entrypoint | 镜像中应用的启动命令 | entrypoint java -jar xx.jar |
构建镜像的命令:
docker build -t 镜像名 Dockerfile目录
(四)网络
1、网络定义
默认情况下,所有容器的网络都是以Bridge方式连接到Docker的一个虚拟网桥上。
加入自定义网络的容器才可以通过容器名互相访问。
2、网络常用命令
命令 | 说明 |
docker network create | 创建一个网络 |
docker network ls | 查看所有网络 |
docker network rm | 删除指定网络 |
docker network prune | 清除未使用的网络 |
docker network connect | 使指定容器连接加入某网络 |
docker network disconnect | 使指定容器连接离开某网络 |
docker network inspect | 查看网络详细信息 |
3、创建自定义网络案例
(1)创建自定义网络
docker network create my_custom_network
(2)启动容器并连接到自定义网络
docker run -d --name nginx1 --network my_custom_network nginx
docker run -d --name nginx2 --network my_custom_network nginx
(3)验证容器间的通信
进入其中一个容器:
docker exec -it nginx1 bash
在容器内通过另一个容器的名称访问它:
curl http://nginx2
四、项目部署
(一)部署后端
(二)部署前端
(三)DockerCompose