找回密码
 立即注册
首页 业界区 安全 docker镜像制作(Docker Desktop)

docker镜像制作(Docker Desktop)

神泱 4 天前
本篇记录全部流程


  • (第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 root@127.0.0.1

出现远程主机变更警告



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

测试连接


  • 使用ssh -p 22222 root@127.0.0.1,连接成功
    原因 : 在创建容器时,设置了端口映射22222:22
    容器内22222端口并未用到,要用到可以设置22222:22222
点击查看自动化安装步骤### (废弃,太慢了,服务器可能处于关闭状态)自动化安装(注意host is down,出现就洗洗睡,换个时间再来)OneStack一键安装:https://oneinstack.com/auto/**本次任务: Redis + MySql 8.0 + nginx**![image](https://img2024.cnblogs.com/blog/3709680/202603/3709680-20260303155006788-1302957252.png)- 安装命令(第一次下载使用国外源,花了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/bin:$PATH' >> /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:  datasource:    type: com.alibaba.druid.pool.DruidDataSource    driverClassName: com.mysql.cj.jdbc.Driver    druid:      master:        url: jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true        username: 用户名        password: 密码      slave:        enabled: false        url:        username:        password:      initialSize: 5      minIdle: 10      maxActive: 20      maxWait: 60000      timeBetweenEvictionRunsMillis: 60000      minEvictableIdleTimeMillis: 300000      maxEvictableIdleTimeMillis: 900000      validationQuery: SELECT 1      testWhileIdle: true      testOnBorrow: false      testOnReturn: false      webStatFilter:        enabled: true      statViewServlet:        enabled: true        allow:        url-pattern: /druid/*        login-username: ruoyi        login-password: 123456      filter:        stat:          enabled: true          log-slow-sql: true          slow-sql-millis: 1000          merge-sql: true        wall:          config:            multi-statement-allow: true  redis:    # 主机地址(本地填 localhost 或 127.0.0.1,远程填服务器IP)    host: 127.0.0.1    # 端口(默认6379)    port: 6379    # 密码    password: Redis密码    # 数据库索引(默认0)    database: 0    # 连接超时时间(毫秒)    timeout: 10s    # 连接池配置    lettuce:      pool:        # 最小空闲连接        min-idle: 0        # 最大空闲连接        max-idle: 8        # 最大活跃连接        max-active: 8        # 最大等待时间(负数表示无限制)        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. # 负载均衡upstream OrdinaryPolling {         # 负载均衡策略:ip_hash 保证同一个用户请求落在同一台服务器上         # ip_hash;         # 权重配置:8080权重1,8081权重1    server 127.0.0.1:8080 weight=1;        server 127.0.0.1:8081 weight=1;}
复制代码

  • 前端配置编写

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

  • 后端配置编写

proxy_pass http://OrdinaryPolling/ 后面的/一定要带上,不然会导致404
后端配置代码
  1.         # 后端API请求        location /prod-api/ {                    proxy_set_header Host $http_host;                    proxy_set_header X-Real-IP $remote_addr;                    proxy_set_header REMOTE-HOST $remote_addr;                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                # 将请求转发给上面定义的 upstream 池                proxy_pass http://OrdinaryPolling/;        }
复制代码

  • 检测nginx配置是否正常
    命令: nginx -t

  • 重新加载nginx配置
    命令: nginx -s reload

  • 主机访问localhost:8080


  • 添加日志打印

日志打印代码
  1. # ========== 定义日志格式,显示后端端口 ==========log_format  loadbalancing  '$remote_addr -$remote_user [$time_local] "$request" '                           'status=$status body_bytes_sent=$body_bytes_sent '                           'upstream_addr=$upstream_addr upstream_status=$upstream_status';# ========== 使用自定义日志格式 ==========            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 &

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册