docker镜像制作(Docker Desktop)

[复制链接]
发表于 2026-3-18 22:06:40 | 显示全部楼层 |阅读模式
本篇记录全部流程


  • (第9次按文档流程重写,完玉成部流程)
  • (第10次按文档流程重写,测试可行,团体完成)
第十次测试开始


测试完成,团体流程走下来,快的半小时,慢两小时内可以完成

任务目标


  • 在Desktop Docker中安装一个Ubuntu镜像的docker。
  • 使用OneInStack工具安装Redis+MySql8.0+nginx。
  • redis设置只能127.0.0.1本机访问。
  • MySql须要设置表名巨细写忽略。MySql设置本身姓名缩写的账号,设置暗码,能远程访问,能使用Navicat/DataGrid之类的数据库访问工具举行远程毗连。
  • 完成以上操纵后,请把docker提交为新的镜像Ubuntu-new,并把镜像生存为硬盘上某个tar文件。(作为日后完备的初始态的项目服务器情况镜像文件)
  • 在docker中运行若依后端编译好的jar文件,分别运行于docker中的8080和8081两个端口。
  • 在nginx中设置若依前端,负载平衡方式访问若依后端,并在本机举行访问。
docker镜像制作-详细流程

1.下载Docker Destop

1.1 开启vpn

1.2下载Docker Desktop

网址:https://www.docker.com/products/docker-desktop/

注意事项:


  • 安装位置默以为c盘
  • 修改安装位置须要使用cmd指定安装位置
  • cmd下令:start /w "" "D:\windows\下载\Docker_Desktop_Installer.exe" install --installation-dir=D:\Docker --windows-containers-default-data-root=D:\DockerData
cmd下令参数分析

参数值分析--installation-dirD:\DockerDocker Desktop 步伐本身的安装目次(默认在 C 盘)--windows-containers-default-data-rootD:\DockerDataWindows 容器的默认数据存储根目次(镜像、容器文件等)2.下载Ubuntu

2.1 打开Docker Desktop


2.2 修改镜像安装位置


2.3 拉取Ubuntu




拉取乐成TAG会打钩后,而且下方会出现ubuntu:lastest
3.设置Ubuntu

3.1 启动容器


  • win+R

  • 输入cmd,打开下令行窗口

  • 创建容器下令:docker run -itd --privileged -p 13306:3306 -p 8080:80 -p 22222:22 --name ubuntu-server ubuntu /bin/bash

cmd参数分析


参数作用--privileged提供管理员权限--name ubuntu-server将容器定名为ubuntu-server参数宿主机端口容器端口用途-p 13306:3306133063306MySQL 数据库服务-p 8080:80808080HTTP/Web 服务(Nginx)-p 22222:222222222SSH 远程登录3.2进入容器


  • 运行下令:docker exec -it ubuntu-server bash

    大概图形界面进入


3.3安装vim、wget、ssh


  • 检察文件是否存在,并备份文件
    检察下令: cat /etc/apt/sources.list
    备份下令: cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
  • 更换为国内镜像源
    更换下令:sed -i -e 's|http://archive.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' -e 's|http://security.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.list.d/ubuntu.sources


  • 实行效果
    检察是否乐成:cat /etc/apt/sources.list.d/ubuntu.sources


  • 更新软件包索引
    下令: apt-get update
  • 安装vim(安装过程碰到Y/N全部选择y)
    下令: apt-get install vim(vim 文本编辑器,比vi好用一些)


    此处选择5.Asia(亚洲)

    此处选择69.Shanghai(上海)

  • 安装wget(安装过程碰到Y/N全部选择y)
    下令: apt-get install wget (wegt 下令行下载工具)

  • 安装ssh(安装过程碰到Y/N全部选择y)
    下令: apt-get install ssh (ssh 用于远程毗连)

  • 重置暗码(Docker容器默认没有暗码)
    下令: passwd root
  • 编辑SSH设置允许root登录
    下令: vim /etc/ssh/sshd_config
  • 按 i 进入编辑模式
    修改以下设置项:
    PermitRootLogin yes           (允许root远程登录,在正式使用中存在安全隐患)

    允许22端口与22222端口举行远程毗连

  • 生存退出
    按esc退出编辑模式,输入:wq生存退出
  • 重新启动ssh
    下令: service ssh restart
  • 远程毗连测试
    下令: ssh -p 22222 [email protected]

出现远程主机变更告诫



  • 在Docker 容器重修,会出现此告诫导致远程毗连失败
    删除 SSH 已知主机密钥下令: ssh-keygen -R [127.0.0.1]:22222

测试毗连


  • 使用ssh -p 22222 [email protected],毗连乐成
    缘故起因 : 在创建容器时,设置了端口映射22222:22
    容器内22222端口并未用到,要用到可以设置22222:22222
点击检察主动化安装步调### (废弃,太慢了,服务器大概处于关闭状态)主动化安装(注意host is down,出现就洗洗睡,换个时间再来)OneStack一键安装:https://oneinstack.com/auto/**本次任务: Redis + MySql 8.0 + nginx**- 安装下令(第一次下载使用国外源,花了7小时左右,第8次切换源下载,预计3小时)`wget -c http://mirrors.oneinstack.com/oneinstack.tar.gz && tar xzf oneinstack.tar.gz && ./oneinstack/install.sh --db_option 1 --dbinstallmethod 1 --dbrootpwd 1234567890 --nodejs  --redis `4.测试主动化安装内容

4.1 Redis运行


  • 查找 Redis 设置文件位置
    下令: find / -name "redis.conf" 2>/dev/null

  • 使用设置文件启动Redis服务
    下令: redis-server /usr/local/redis/etc/redis.conf
  • 进入Redis客户端
    下令: redis-cli

    在 redis-cli 中实行以下下令:
    ping 预期返回: PONG
    set test_key "Hello Redis" 预期返回: OK
    get test_key 预期返回: "Hello Redis"
    del test_key 预期返回: (integer) 1
    exit

    Redis运行正常
4.2 Mysql运行


  • 进入mysql
    下令: mysql -u root -p

  • 查抄 MySQL 是否安装
    下令:which mysql
    下令: find /usr/local -name "mysql" -type d 2>/dev/null

  • 设置情况变量
    下令: echo 'export PATH=/usr/local/mysql/binPATH' >> /etc/profile
    下令: source /etc/profile
  • 安装依靠(中心省略部分流程,按照下面运行大概无法乐成运行)
    下令: apt-get install -y libaio1t64
  • 创建软链接
    下令: ln -sf /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1
    下令: ldconfig
  • 初始化数据库
    下令: /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql
  • 启动 MySQL
    下令: /usr/local/mysql/bin/mysqld_safe --user=mysql &
    实行后,ctrl+c退出
  • 进入mysql
    下令: mysql -u root -p

  • 测试mysql
    下令: SHOW DATABASES;

    下令: SELECT VERSION();

  • 退出
    下令: exit
4.3 Tomact运行


  • 启动Tomact
    下令: /usr/local/tomcat/bin/catalina.sh start

  • 测试
    下令: curl http://localhost:8080

  • 克制Tomact
    下令:/usr/local/tomcat/bin/catalina.sh stop
  • 编辑设置文件
    下令: vi /usr/local/tomcat/conf/server.xml
4.4 Nginx运行


  • 启动nginx
    下令: /usr/local/nginx/sbin/nginx  -c /usr/local/nginx/conf/nginx.conf
  • 测试(须要先克制Tomact)
    下令: curl http://localhost

5.docker重启后启动清单


  • 启动对应容器
  • 进入容器: docker exec -it ubuntu-server bash
  • 开启ssh服务: service ssh restart
  • 启动redis: redis-server /usr/local/redis/etc/redis.conf
  • 启动mysql: /usr/local/mysql/bin/mysqld_safe --user=mysql &
  • 启动Tomact: /usr/local/tomcat/bin/catalina.sh start
  • 启动nginx: /usr/local/nginx/sbin/nginx  -c /usr/local/nginx/conf/nginx.conf
3.4 手动安装nginx + mysql80 + redis

mysql8.0安装


  • 安装mysql8.0
    下令: apt install mysql-server-8.0

  • 查抄是否安装完成
    下令: service mysql status

  • 启动mysql
    下令: service mysql start

    下方的warning不影响mysql启动
  • 检察是否启动
    下令: service mysql status

  • 进入mysql
    下令: mysql -u root

  • 设置暗码
    下令:ALTER USER 'root'@'localhost' IDENTIFIED BY '新暗码';
  • 测试是否设置乐成
    下令: mysql -u root -p



  • mysql8.0安装完成,功能正常
redis安装


  • 安装redis
    下令: apt install -y redis-server

  • 检察是否安装乐成
    下令: redis-cli --version

  • 启动redis
    下令: redis-server

    背景运行下令: redis-server --daemonize yes
  • 测试redis客户端毗连
    下令: redis-cli ping

  • 设置暗码
    下令: sed -i 's/^# requirepass foobared/requirepass 暗码/' /etc/redis/redis.conf
  • 重启redis加载设置
    克制下令: redis-cli shutdown
    启动下令: redis-server /etc/redis/redis.conf --daemonize yes
  • 测试暗码是否设置乐成
    进入redis下令: redis-cli
    测试下令: ping

    输入暗码: AUTH 暗码,暗码准确返回OK
    测试下令: ping



  • redis安装完成,功能正常
安装nginx


  • 安装nginx
    下令:apt install -y nginx

  • 查抄是否安装乐成
    下令: nginx -v

  • 启动nginx
    下令: service nginx start

  • 安装curl
    下令: apt install -y curl
  • 测试是否可以正常使用
    下令: curl http://localhost



  • nginx安装完成,功能正常
4.制作新的镜像文件并生存到本地


  • 制作新的镜像文件
    下令:docker commit ubuntu-server ubuntu-new
    未实行前

    实行后


  • 生存到本地
    下令:docker save -o ubuntu-new.tar ubuntu-new
    此下令会将ubuntu-new.tar默认生存到到当前的工作目次
    指定生存位置的下令(地点: D:\ubuntu-new.tar):
    docker save -o D:\ubuntu-new.tar ubuntu-new


  • 找不到文件
    下载Everything搜刮ubuntu-new.tar
    注意: 不要去Microsoft Store下载,去官网这东西是免费的
  • docker制作简朴示例

任务完成情况


  • 在Desktop Docker中安装一个Ubuntu镜像的docker。
  • 使用OneInStack工具安装Redis+MySql8.0+nginx。
  • redis设置只能127.0.0.1本机访问。
  • MySql须要设置表名巨细写忽略。MySql设置本身姓名缩写的账号,设置暗码,能远程访问,能使用Navicat/DataGrid之类的数据库访问工具举行远程毗连。
  • 完成以上操纵后,请把docker提交为新的镜像Ubuntu-new,并把镜像生存为硬盘上某个tar文件。(作为日后完备的初始态的项目服务器情况镜像文件)
  • 在docker中运行若依后端编译好的jar文件,分别运行于docker中的8080和8081两个端口。
  • 在nginx中设置若依前端,负载平衡方式访问若依后端,并在本机举行访问。
redis任务


  • 检察redis设置文件位置
    下令: ls -l /etc/redis/redis.conf
  • 编辑redis设置文件
    下令: vim /etc/redis/redis.conf
  • 添加只允许访问本机(redis默认设置即为只允许本机访问)
    添加 bind 127.0.0.1 -::1(同时运行IPV6与IPV4的本机地点访问)



  • redis设置只能127.0.0.1本机访问。
mysql任务

设置表名巨细写忽略(注意: 此操纵须要删除数据库全部数据,不要轻易实行)


  • 克制mysql服务
    下令: service mysql stop
  • 删除删除旧数据目次并重修
    下令1:rm -rf /var/lib/mysql
    下令2:mkdir /var/lib/mysql
    下令3:chown mysql:mysql /var/lib/mysql
  • 编辑设置文件
    下令: vim /etc/mysql/mysql.conf.d/mysqld.cnf
    添加: lower_case_table_names = 1

  • 初始化数据库
    下令: /usr/sbin/mysqld --initialize --user=mysql --lower-case-table-names=1
  • 启动mysql
    下令: service mysql start
  • 检察临时暗码
    下令: grep 'temporary password' /var/log/mysql/error.log

  • 进入mysql
    下令: mysql -u root -p

  • 设置暗码
    下令: ALTER USER 'root'@'localhost' IDENTIFIED BY '新暗码';
  • 测试是否见效
    创建数据库: CREATE DATABASE testdb;
    使用数据库: use testdb;
    创建表: CREATE TABLE TestTable (id INT);
    再次创建表: CREATE TABLE testtable (id INT);



  • 设置表名巨细写忽略
MySql设置账号,设置暗码,能远程访问,能使用数据库访问工具举行远程毗连。


  • 进入mysql
    下令: mysql -u root -p
  • 创建一个账号('%' 体现允许从任何主机远程毗连)
    下令: CREATE USER '账号'@'%' IDENTIFIED BY '暗码';
  • 授予创建的账号权限
    下令: GRANT ALL PRIVILEGES ON *.* TO '账号'@'%';
    *.*中的第一个 * 体现为 允许访问的数据库名 ,* 为全部数据库
    *.*中的第一个 * 体现为 允许访问的表名 ,* 为全部当前数据库下的全部表明
    my_db.table_1体现,允许访问my_db数据库的table_1表
  • 革新权限,使权限见效
    下令: FLUSH PRIVILEGES;
  • 退出mysql
    下令: exit
  • 编辑设置文件,允许远程毗连
    下令; vim /etc/mysql/mysql.conf.d/mysqld.cnf

    直接修改为0.0.0.0存在安全隐患(并不发起)
  • 重新加载设置
    下令: service mysql reload

  • 检察mysql暗码
    下令: cat /etc/mysql/debian.cnf

  • 进入mysql
    下令: mysql -u root -p
  • 创建debian-sys-maint用户并设置体系设置暗码
    下令: CREATE USER 'debian-sys-maint'@'localhost' IDENTIFIED BY 'mysql暗码';
  • 授予权限
    下令: GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' WITH GRANT OPTION;
  • 革新权限
    下令: FLUSH PRIVILEGES;
  • 重启mysql,debian-sys-maint见效
    下令: service mysql restart
  • 远程毗连



  • 设置mysql账号并远程毗连
将docker提交为新的镜像Ubuntu-new,并把镜像生存为硬盘上Ubuntu-new.tar文件


  • 将docker提交为新的镜像Ubuntu-new
    cmd下令: docker commit ubuntu-server ubuntu-new

  • 将镜像生存到硬盘上并定名为Ubuntu-new.tar
    cmd下令: docker save -o ubuntu-new.tar ubuntu-new




  • 将docker提交为新镜像并生存到本地
在docker中运行jar文件,分别运行于8080和8081两个端口。


  • 使用winSCP工具毗连docker

  • 将jar包、sql文件、dist文件放入到docker的root/ruoyi/下

  • 导入sql文件
    进入数据库 : mysql -u root -p
    创建数据库 : CREATE DATABASE IF NOT EXISTS mes_system CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    使用数据库 : use mes_system
    导入sql脚本 : source /root/ruoyi/mes_system2.sql
  • 进入ruoyi文件夹
    下令: cd /root/ruoyi/
  • 创建application.yml并写入设置
    下令: vi application.yml
application.yml设置
  1. spring:
  2.   datasource:
  3.     type: com.alibaba.druid.pool.DruidDataSource
  4.     driverClassName: com.mysql.cj.jdbc.Driver
  5.     druid:
  6.       master:
  7.         url: jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
  8.         username: 用户名
  9.         password: 密码
  10.       slave:
  11.         enabled: false
  12.         url:
  13.         username:
  14.         password:
  15.       initialSize: 5
  16.       minIdle: 10
  17.       maxActive: 20
  18.       maxWait: 60000
  19.       timeBetweenEvictionRunsMillis: 60000
  20.       minEvictableIdleTimeMillis: 300000
  21.       maxEvictableIdleTimeMillis: 900000
  22.       validationQuery: SELECT 1
  23.       testWhileIdle: true
  24.       testOnBorrow: false
  25.       testOnReturn: false
  26.       webStatFilter:
  27.         enabled: true
  28.       statViewServlet:
  29.         enabled: true
  30.         allow:
  31.         url-pattern: /druid/*
  32.         login-username: ruoyi
  33.         login-password: 123456
  34.       filter:
  35.         stat:
  36.           enabled: true
  37.           log-slow-sql: true
  38.           slow-sql-millis: 1000
  39.           merge-sql: true
  40.         wall:
  41.           config:
  42.             multi-statement-allow: true
  43.   redis:
  44.     # 主机地址(本地填 localhost 或 127.0.0.1,远程填服务器IP)
  45.     host: 127.0.0.1
  46.     # 端口(默认6379)
  47.     port: 6379
  48.     # 密码
  49.     password: Redis密码
  50.     # 数据库索引(默认0)
  51.     database: 0
  52.     # 连接超时时间(毫秒)
  53.     timeout: 10s
  54.     # 连接池配置
  55.     lettuce:
  56.       pool:
  57.         # 最小空闲连接
  58.         min-idle: 0
  59.         # 最大空闲连接
  60.         max-idle: 8
  61.         # 最大活跃连接
  62.         max-active: 8
  63.         # 最大等待时间(负数表示无限制)
  64.         max-wait: -1ms
复制代码

  • 安装JAVA17
    下令: apt install -y openjdk-17-jdk
  • 运行jar包与8081与8080接口(cmd的窗口不要关,关了历程也会克制)
    8080端口下令: java -jar /root/ruoyi/ruoyi-admin.jar --spring.config.additional-location=/root/ruoyi/application.yml --server.port=8080 &

    8081端口下令: java -jar /root/ruoyi/ruoyi-admin.jar --spring.config.additional-location=/root/ruoyi/application.yml --server.port=8081 &

    5.检察ruoyi-admin运行端口
    下令: ps aux | grep ruoyi-admin



  • 完成在docker中运行jar文件,分别运行于8080和8081两个端口
在nginx中设置若依前端,负载平衡方式访问若依后端,并在本机举行访问。


  • 将root/ruoyi/dist文件放入/var/www/html
    下令:cp -r /root/ruoyi/dist /var/www/html
  • 修改nginx设置
    下令: vim /etc/nginx/sites-available/default
    进入后删除全部内容,本身手动设置,简便
  • 设置负载平衡(这个须要放在server外部)

负载平衡代码
  1. # 负载均衡
  2. upstream OrdinaryPolling {
  3.          # 负载均衡策略:ip_hash 保证同一个用户请求落在同一台服务器上
  4.          # ip_hash;
  5.          # 权重配置:8080权重1,8081权重1
  6.     server 127.0.0.1:8080 weight=1;
  7.         server 127.0.0.1:8081 weight=1;
  8. }
复制代码

  • 前端设置编写

前端设置代码
  1. server {
  2.         listen 80 default_server;                        # IPv4:监听80端口,设为默认服务器
  3.         listen [::]:80 default_server;                        # IPv6:监听80端口,设为默认服务器
  4.         root /var/www/html/dist;                        # 前端文件根目录
  5.         index index.html index.htm;                        # 检索顺序
  6.         # 前端请求
  7.         server_name localhost;
  8.         location / {
  9.                 # try_files 解决前端路由404问题,并返回静态页面
  10.                     try_files $uri $uri/ /index.html;
  11.         }
  12. }
复制代码

  • 后端设置编写

proxy_pass http://OrdinaryPolling/ 反面的/肯定要带上,否则会导致404
后端设置代码
  1.         # 后端API请求
  2.         location /prod-api/ {
  3.                     proxy_set_header Host $http_host;
  4.                     proxy_set_header X-Real-IP $remote_addr;
  5.                     proxy_set_header REMOTE-HOST $remote_addr;
  6.                     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  7.                 # 将请求转发给上面定义的 upstream 池
  8.                 proxy_pass http://OrdinaryPolling/;
  9.         }
复制代码

  • 检测nginx设置是否正常
    下令: nginx -t

  • 重新加载nginx设置
    下令: nginx -s reload

  • 主机访问localhost:8080


  • 添加日志打印

日志打印代码
  1. # ========== 定义日志格式,显示后端端口 ==========
  2. log_format  loadbalancing  '$remote_addr -$remote_user [$time_local] "$request" '
  3.                            'status=$status body_bytes_sent=$body_bytes_sent '
  4.                            'upstream_addr=$upstream_addr upstream_status=$upstream_status';
  5. # ========== 使用自定义日志格式 ==========
  6.             access_log  /var/log/nginx/access.log  loadbalancing;
复制代码

  • 测试负载平衡是否实现
    下令1: nginx -t
    下令2: nginx -s reload
    下令3: for i in {1..20}; do curl -s http://localhost/prod-api/captchaImage > /dev/null && echo "哀求 $i 完成"; done
    下令4: tail -n 30 /var/log/nginx/access.log
    下令5: > /var/log/nginx/access.log

    设置的比例为1:1,但是现实并没有,但是负载平衡已经实现


  • 在nginx中设置若依前端,负载平衡方式访问若依后端,并在本机举行访问
任务完成


  • 在Desktop Docker中安装一个Ubuntu镜像的docker。
  • 使用OneInStack工具安装Redis+MySql8.0+nginx。
  • redis设置只能127.0.0.1本机访问。
  • MySql须要设置表名巨细写忽略。MySql设置本身姓名缩写的账号,设置暗码,能远程访问,能使用Navicat/DataGrid之类的数据库访问工具举行远程毗连。
  • 完成以上操纵后,请把docker提交为新的镜像Ubuntu-new,并把镜像生存为硬盘上某个tar文件。(作为日后完备的初始态的项目服务器情况镜像文件)
  • 在docker中运行若依后端编译好的jar文件,分别运行于docker中的8080和8081两个端口。
  • 在nginx中设置若依前端,负载平衡方式访问若依后端,并在本机举行访问。
容器重新启动后须要实行


  • 启动ssh:   service ssh start
  • 启动redis(背景运行) : redis-server /etc/redis/redis.conf &
  • 启动mysql : service mysql start
  • 启动nginx : nginx
  • 启动jar包(背景运行) : nohup java -jar /root/ruoyi/ruoyi-admin.jar --spring.config.additional-location=/root/ruoyi/application.yml --server.port=8080 > /root/ruoyi/log8080.log 2>&1 &

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表