温馨提示
本章节以 CentOS Stream
服务器为例,基于 Docker
容器化部署 Nginx
服务。
镜像检索
去 Docker
官网 镜像仓库,搜索找到自己想要下载的镜像版本。
拉取镜像
js
# 搜索nginx版本
docker search nginx
# 下载镜像
docker pull nginx
# 选择官方最新版本下载
docker pull nginx:latest
# 查看nginx镜像
docker images
拉取镜像输出过程:
js
[root@S1 usr]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
025c56f98b67: Already exists
ec0f5d052824: Pull complete
cc9fb8360807: Pull complete
defc9ba04d7c: Pull complete
885556963dad: Pull complete
f12443e5c9f7: Pull complete
Digest: sha256:75263be7e5846fc69cb6c42553ff9c93d653d769b94917dbda71d42d3f3c00d3
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
创建挂载文件
js
mkdir -p /usr/local/docker/nginx/conf
mkdir -p /usr/local/docker/nginx/logs
mkdir -p /usr/local/docker/nginx/html
mkdir -p /usr/local/docker/nginx/ssl
创建并启动容器
js
docker run \
--name docker_nginx \
--restart=always \
-p 80:80 \
-v /usr/local/docker/nginx/html:/usr/share/nginx/html \
-v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/docker/nginx/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /usr/local/docker/nginx/logs:/var/log/nginx \
-v /usr/local/docker/nginx/ssl/:/ssl/ \
--link docker_nginx:docker_nginx \
-d nginx
参数说明:
--name docker 表示容器名称设为docker_nginx;
-p 80:80 端口进行映射,将本地 80 端口映射到容器内部的 80 端口;
-v 将宿主的目录/文件映射到docker容器内部目录/文件:rw读写权限;
-d nginx设置容器在在后台一直运行;
–restart=always 开机启动,失败也会一直重启
--link docker_nginx:docker_nginx 将nginx容器和php容器连接 通过别名docker_nginx就不再需要去指定docker_nginx容器的ip了;
进入容器
js
# 执行命令进入容器内部
docker exec -it docker_nginx /bin/bash
参数说明:
exec 命令代表附着到运行着的容器内部
-it 是 -i 与 -t两个参数合并写法,-i -t 标志着为我们指定的容器创建了TTY并捕捉了STDIN
docker_nginx 是我们要进入的容器Id或容器名
/bin/bash 指定了执行命令的shell
温馨提示
也可以实行先启动后逐个挂载文件,具体操作步骤如下:
- 创建并启动容器
js
docker run -d --name docker_nginx -p 80:80 nginx
-d 指定容器以守护进程方式在后台运行
–name 指定容器名称,此处我指定的是nginx
-p 指定主机与容器内部的端口号映射关系,格式 -p [宿主机端口号]:[容器内部端口],此处我使用了主机80端口,映射容器80端口
此时可以通过命令查看配置文件目录:
js
docker exec docker_nginx ls /etc/nginx
- 将容器
nginx.conf
、conf.d
、html
等文件或文件夹复制到宿主机目录下:
js
docker cp nginx:/etc/nginx/nginx.conf /usr/local/docker/nginx/conf/nginx.conf
docker cp nginx:/etc/nginx/conf.d /usr/local/docker/nginx/conf/conf.d
docker cp nginx:/usr/share/nginx/html /usr/local/docker/nginx/html
- 停止并删除容器:
js
# 启动容器
docker start docker_nginx
# 停止容器
docker stop docker_nginx
# 删除容器
docker rm docker_nginx
# 删除正在运行的容器
docker rm -f docker_nginx
- 启动容器并实行目录挂载
重新创建容器并启动:
js
docker run \
-p 80:80 \
--name docker_nginx \
-m 200m \
--restart always \
-v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /usr/local/docker/nginx/html:/usr/share/nginx/html \
-v /usr/local/docker/nginx/logs:/var/log/nginx \
-e TZ=Asia/Shanghai \
--privileged=true \
-d nginx
参数说明:
-name 给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器
-p 映射端口,将docker宿主机的80端口和容器的80端口进行绑定
-v 挂载文件用的,
-m 200m 分配内存空间
-e TZ=Asia/Shanghai 设置时区
第一个-v 表示将你本地的nginx.conf覆盖你要起启动的容器的nginx.conf文件,
第二个-v 表示将日志文件进行挂载,就是把nginx服务器的日志写到你docker宿主机的/home/docker-nginx/log/下面
第三个-v 表示的和第一个-v意思一样的。
-d 表示启动的是哪个镜像
- 重启容器
js
# 重启nginx
docker restart docker_nginx
迁移与备份
- 容器保存为镜像
我们可以通过以下命令将容器保存为镜像
js
docker commit docker_nginx nginx_i
- 镜像备份
我们可以通过以下命令将镜像保存为 tar
文件
js
docker save -o docker_nginx.tar nginx_i
- 镜像恢复与迁移
首先我们先删除掉 docker_nginx
镜像,然后执行此命令进行恢复:
js
docker load -i docker_nginx.tar
脚本部署
使用 docker-compose.yml
文件可以快速部署 Nginx
服务。通过定义服务、网络和卷等配置,Docker Compose
可以自动创建并启动 Nginx
容器,同时确保数据持久化和网络配置。
以下是一个简单的 docker-compose.yml
文件示例:
js
version: '3.7'
# 应用服务
services:
# 网络代理服务
docker_nginx:
# 容器名
container_name: docker_nginx
# 容器引用镜像
image: nginx:1.18.0
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 环境变量
environment:
- TZ=Asia/Shanghai
# 端口映射
ports:
- 80:80
- 443:443
- 8080:8080
# 文件挂载
volumes:
# 挂载应用目录
- $PWD/html:/usr/share/nginx/html
# 挂载配置文件
- $PWD/conf/nginx.conf:/etc/nginx/nginx.conf
# 挂载配置文件
- $PWD/conf/conf.d:/etc/nginx/conf.d
# 挂载日志文件
- $PWD/logs:/var/log/nginx
# 挂载缓存目录
- $PWD/cache:/var/cache/nginx
参数说明:
version: 指定 Docker Compose 文件的版本。
services: 定义服务,这里只有一个 mysql 服务。
image: 使用 MySQL 8.0 镜像。
container_name: 指定容器的名称。
environment: 设置环境变量,包括 root 用户密码、默认数据库、用户和密码。
ports: 将容器内的 3306 端口映射到主机的 3306 端口,以便从主机访问 MySQL。
volumes: 使用数据卷 mysql_data 持久化 MySQL 数据,确保数据在容器重启后不会丢失。
networks: 使用自定义网络 mysql_network,以便其他服务可以连接到 MySQL。
使用方法:
将上述
docker-compose.yml
文件上传至目标服务器。在终端中导航到该文件所在的目录。
运行以下命令启动 服务:
jsdocker-compose up -d
使用以下命令停止并删除容器:
jsdocker-compose down
如果需要保留数据卷,可以使用
docker-compose down --volumes
删除数据卷。
总结
通过以上步骤,你已经在 CentOS Stream
上使用 Docker
成功部署了 Nginx
,并实现了配置文件和静态资源的持久化存储。这种方法便于管理和迁移,同时确保了数据的安全性。