当前位置: 首页 > news >正文

制作镜像

1.镜像 image: 是一个文件,包含了微型操作系统、核心代码(可执行程序)、依赖环境(库)

2.仓库 repository: 存放镜像文件的地方

3.容器: container :是运行镜像的地方---》是进程    


1.将go语言程序上传到centos7.9的系统里

go+html+mysql+redis.zip 

[root@docker ~]# mkdir  /Dockerfile

[root@docker ~]# cp go+html+mysql+redis.zip   /Dockerfile/

[root@docker ~]# cd /Dockerfile/

[root@docker Dockerfile]# unzip go+html+mysql+redis.zip   解压软件包

[root@docker Dockerfile]# ls

go+html+mysql+redis.zip  go.mod  go.sum  info.sql  Readme.md  server.go  static  templates

server.go   核心go语言程序代码

Readme.md   了解程序,包括安装和核心解析

info.sql    数据库里的表和基础数据

static     存放了网站的js和css代码

templates  存放了网站的静态页面

go.mod   本网站开发的时候使用的库有哪些  module

go.mod 和go.sum有什么作用? 

mod是包管理,sum是依赖关系管理

用于管理项目的依赖关系和版本信息,确保项目的构建和部署的可重复性和一致性。

2.因为网站需要使用MySQL存放数据,云服务器里启动一个MySQL容器

root@aliyun-sz:~# docker  run  -d  -p  3316:3306  --name go-mysql-1  -e  MYSQL_ROOT_PASSWORD='sc@123456'   mysql:5.7.41

7f93b60b054ee2d3489cfae2226b787f276e76ac14116bc6d34bf4d77cc95983

在另外一台客户机上测试能否访问公网上的MySQL数据库

[root@docker Dockerfile]# mysql  -h 120.24.223.108 -uroot -p'sc@123456' -P 3316

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MySQL connection id is 3

3.修改server.go核心程序的数据库配置

[root@docker Dockerfile]# vim server.go

const (

        DB_USER     = "root"

        DB_PASSWORD = "sc@123456"

        DB_NAME     = "sanchuang"

        DB_HOST         = "tcp(8.138.156.120:3316)/"

        REDIS_HOST      = "8.138.156.120:6379"

)修改为公网上的发布的数据库服务器地址和端口

4.部署golang环境

[root@docker Dockerfile]# yum  install  epel-release  golang  -y

5.将go代码编译成二进制程序  本来有go.mod和go.sum直接到第六步

[root@docker Dockerfile]# mv go.mod go.sum  /root

[root@docker Dockerfile]# ls

go+html+mysql+redis.zip  info.sql  Readme.md  server.go  static  templates

[root@docker Dockerfile]# go mod init web 

产生go.mod 生成网站所需要的依赖的库,写到go.mod文件里

go: creating new go.mod: module web

go: to add module requirements and sums:

    go mod tidy

[root@docker Dockerfile]# ls

go+html+mysql+redis.zip  go.mod  info.sql  Readme.md  server.go  static  templates

配置一个国内的go语言下载库的代理网站

[root@docker Dockerfile]# go env -w GOPROXY=https://goproxy.cn,direct

[root@docker Dockerfile]#go mod tidy

[root@docker Dockerfile]# ls

go+html+mysql+redis.zip go.mod go.sum info.sql Readme.md server.go  static  templates

6.编译网站成一个二进制程序

[root@docker Dockerfile]# go build -o server  server.go

[root@docker Dockerfile]# ls

go+html+mysql+redis.zip  go.mod  go.sum  info.sql  Readme.md  server(是编译好的二进制程序)  server.go  static  templates    

7.编写dockerfile   dockerfile 是制作镜像的配置文件

[root@docker Dockerfile]# mkdir  docker

[root@docker Dockerfile]# cd docker/

[root@docker docker]# vim dockerfile

FROM centos:7   #指定容器里使用的微型的系统是centos7 -->基础镜像

WORKDIR /go       #进入容器会进入这个目录,工作目录,在执行镜像的时候会自动创建--》家目录 ---》docker exec

COPY . /go       #复制宿主机当前目录下的所有的内容到容器的/go目录下  docker cp

ENTRYPOINT ["/go/server"]  #容器启动运行的时候执行的命令,使用的是绝对路径执行/go/server程序

CMD ["/go/server"]  #command 命令 和entrypoint二选一 entry可传参更好

8.复制二进制程序+static+templates文件夹到当前目录下  这几个必须放到一起 才能出效果 各自负责网页 文档等等

[root@docker docker]# ls

Dockerfile

[root@docker docker]# cp /Dockerfile/server .

[root@docker docker]# cp /Dockerfile/static/ . -r

[root@docker docker]# cp /Dockerfile/templates/  .  -r

[root@docker docker]# ls

Dockerfile  server  static  templates

下载centos7镜像 传到系统里,导入镜像

[root@docker docker]# docker load  -i centos7.9.tar

[root@docker docker]# docker load  -i redis.tar


[root@docker docker]# docker build -t  scweb:1.0   .

==>naming to docker.io/library/scweb:1.0       0.0s                                                                           

[root@docker docker]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED          SIZE

scweb        1.0       162f3d33f84e   34 seconds ago   464MB

启动自己制作的镜像的容器

docker run  -d  -p 8080:8080 --name  scweb-1  scweb:1.0

cali  2022  去浏览器访问

将基础数据导入到云服务器里的mysql容器里mysql -uroot -p'sc@123456' -P 3316 -h 120.24.223.108 sanchuang < info.sql

因为我们在内网的docker宿主机上远程连接到云服务器的mysql容器里,需要一个mysql的客户端工具,需要安装mariadb软件

模拟server.go  程序升级  --》增加了新功能

1.重新产生二进制程序 server

[root@docker Dockerfile]# go build -o server server.go

2.如果静态页面有更新,也需要复制到相关的目录

[root@docker Dockerfile]# mkdir version2

[root@docker Dockerfile]# cd version2/

[root@docker version2]# cp /Dockerfile/docker/Dockerfile .

[root@docker version2]# cp /Dockerfile/server .

[root@docker version2]# cp /Dockerfile/static/ . -r

[root@docker version2]# cp /Dockerfile/templates/ . -r

[root@docker version2]# docker build -t scweb:1.1 .

[root@docker version2]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED          SIZE

scweb        1.1       907d859bae91   14 seconds ago   222MB

scweb        1.0       162f3d33f84e   3 hours ago      464MB

3.删除旧的容器和镜像文件

[root@docker version2]# docker ps

CONTAINER ID   IMAGE       COMMAND        CREATED          STATUS          PORTS                                       NAMES

9106914dc4c9   scweb:1.0   "/go/server"   27 minutes ago   Up 27 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   scweb-1

[root@docker version2]# docker stop scweb-1

[root@docker version2]# docker rm scweb-1

启动自己制作的镜像的容器

docker run  -d  -p 8080:8080 --name  scweb-1  scweb:1.1

             

[root@fengdeyong images]# docker pull nginx/nginx-ingress

基础镜像: 提供了一个最基本的环境或者某个程序所依赖的环境   ---》系统、java

alpine  是一个非常小的linux基础镜像  centos  ubuntu  debian  busybox

[root@docker docker]# docker run    -it  --name alpine-2  alpine sh

/ # ls

bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var

/ # cd /

/ # pwd

/ # exit

[root@docker docker]# mkdir /alpine

[root@docker docker]# cd /alpine/

[root@docker alpine]# cp /etc/yum.repos.d/Centos-7.repo .

[root@docker alpine]# ls

Centos-7.repo  Dockerfile

[root@docker alpine]# vim Dockerfile

FROM centos:7.9

WORKDIR /sanchuang

RUN  rm -rf /etc/yum.repos.d/CentOS*

COPY Centos-7.repo  /etc/yum.repos.d/Centos-7.repo

RUN  mkdir  /wang

RUN  cd  /wang

RUN  echo "hello,wang" >/wang/hello.txt

RUN  echo "hello,world">/wang/hello.txt

CMD ["bash","-c","sleep 3000"]

[root@docker alpine]# docker build -t sccentos:7.9  .

[root@docker alpine]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED          SIZE                                                                                                 

sccentos     7.9       a1ccf05ca8f8   37 seconds ago   516MB

alpine       latest    a606584aa9aa   5 weeks ago      7.8MB

-d  在后台运行程序      -it 开启一个终端,在前台运行  和-d不能同时写

 bash 进入容器运行的程序   --rm 当容器退出的时候,自动删除容器

[root@docker alpine]# docker run -it --rm  --name sccentos-1  sccentos:7.9  bash

[root@6eec939529fd sanchuang]# pwd

/sanchuang

[root@6eec939529fd sanchuang]# cd /etc/yum.repos.d/

[root@6eec939529fd yum.repos.d]# ls

Centos-7.repo

[root@docker alpine]# docker build -t sccentos:7.8  .

相关文章:

制作镜像

1.镜像 image&#xff1a; 是一个文件&#xff0c;包含了微型操作系统、核心代码&#xff08;可执行程序&#xff09;、依赖环境&#xff08;库&#xff09; 2.仓库 repository&#xff1a; 存放镜像文件的地方 3.容器&#xff1a; container &#xff1a;是运行镜像的地方--…...

Kylin系列(二)进阶

Kylin系列(二)进阶 目录 简介Kylin架构深入解析 Kylin架构概述核心组件 高级Cube设计 Cube设计原则Cube优化策略 实时数据分析 实时数据处理流程实时Cube构建 高级查询与优化 查询优化技术SQL优化 Kylin与BI工具集成 Tableau集成Power BI集成 监控与调优 系统监控性能调优 常…...

Maven实战.依赖(依赖范围、传递性依赖、依赖调解、可选依赖等)

文章目录 依赖的配置依赖范围传递性依赖传递性依赖和依赖范围依赖调解可选依赖最佳实践排除依赖归类依赖优化依赖 依赖的配置 依赖会有基本的groupId、artifactld 和 version等元素组成。其实一个依赖声明可以包含如下的一些元素&#xff1a; <project> ...<depende…...

关于React17的setState

不可变值 state必须在构造函数中定义 在setState之前不能修改state的值&#xff0c;不要直接修改state,使用不可变值 可能是异步更新 直接使用时异步的 this.setState({count: this.state.count 1 }, () > {console.log(count by callback, this.state.count) // 回调函…...

2024华为OD机试真题-英文输入法Python-C卷D卷-100分

2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 主管期望你来实现英文输入法单词联想功能,需求如下: 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词。 按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。 注意 英…...

magento2 安装win环境和linux环境

win10 安装 安装前提&#xff0c;php,mysql,apach 或nginx 提前安装好 并且要php配置文件里&#xff0c;php.ini 把错误打开 display_errorsOn开始安装 检查环境 填写数据库信息 和ssl信息&#xff0c;如果ssl信息没有&#xff0c;则可以忽略 填写域名和后台地址&#xff0…...

【城市数据集】世界城市数据库和访问门户工具WUDAPT

世界城市数据库和访问门户工具WUDAPT WUDAPTLCZ分类具体步骤参考 在 城市气候研究中&#xff0c;用于描述城市特征的数据集一般采用基于类别的传统方法&#xff0c;将城市地区分为数量有限的类型&#xff0c;从而导致精确度下降。越来越多的新数据集以亚米微尺分辨率描述城市的…...

网络爬虫必备工具:代理IP科普指南

文章目录 1. 网络爬虫简介1.1 什么是网络爬虫&#xff1f;1.2 网络爬虫的应用领域1.3 网络爬虫面临的主要挑战 2. 代理IP&#xff1a;爬虫的得力助手2.1 代理IP的定义和工作原理2.2 爬虫使用代理IP的必要性 3. 代理IP的类型及其在爬虫中的应用3.1 动态住宅代理3.2 动态数据中心…...

JMeter接口测试-5.JMeter高级使用

JMeter高级使用 案例&#xff1a; 用户登录后-选择商品-添加购物车-创建订单-验证结果 问题&#xff1a; JMeter测试中&#xff0c;验证结果使用断言&#xff0c;但断言都是固定的内容假如要判断的内容(预期内容)是在变化的, 有时候还是不确定的, 那该怎么办呢? 解决&…...

网络安全大模型开源项目有哪些?

01 Ret2GPT 它是面向CTF二进制安全的工具&#xff0c;结合ChatGPT API、Retdec和Langchain进行漏洞挖掘&#xff0c;它能通过问答或预设Prompt对二进制文件进行分析。 https://github.com/DDizzzy79/Ret2GPT 02 OpenAI Codex 它是基于GPT-3.5-turbo模型&#xff0c;用于编写…...

【赠书第18期】人工智能B2B落地实战:基于云和Python的商用解决方案

文章目录 前言 1 方案概述 2 方案实施 2.1 云平台选择 2.2 Python环境搭建 2.3 应用开发与部署 2.4 应用管理 2.5 安全性与隐私保护 3 方案优势与效益 4 推荐图书 5 粉丝福利 前言 随着云计算技术的快速发展&#xff0c;越来越多的企业开始将业务迁移至云端&#x…...

《昇思25天学习打卡营第24天》

接续上一天的学习任务&#xff0c;我们要继续进行下一步的操作 构造网络 当处理完数据后&#xff0c;就可以来进行网络的搭建了。按照DCGAN论文中的描述&#xff0c;所有模型权重均应从mean为0&#xff0c;sigma为0.02的正态分布中随机初始化。 接下来了解一下其他内容 生成…...

KeePass密码管理工具部署

KeePass密码管理工具部署 安装包下载入口 双击执行&#xff0c;根据提示完成安装&#xff1a; 安装完成后如图&#xff1a;...

C#中导出dataGridView数据为Excel

C#中导出dataGridView数据为Excel #region 导出Excel功能函数 /// <summary> /// dataGridView 导出Excel功能函数 /// </summary> /// <param name"dataView">dataGridView数据表</param> /// <param name"filePath">路径…...

算法学习6——贪心算法

什么是贪心算法&#xff1f; 贪心算法是一种在每一步选择中都采取当前状态下最优或最有利的选择的算法。其核心思想是通过一系列局部最优选择来达到全局最优解。贪心算法广泛应用于各种优化问题&#xff0c;如最短路径、最小生成树、背包问题等。 贪心算法的特点 局部最优选…...

【C++】标准库:介绍string类

string 一.string类介绍二.string类的静态成员变量三.string类的常用接口1.构造函数&#xff08;constructor&#xff09;2.析构函数&#xff08;destructor&#xff09;3.运算符重载&#xff08;operator&#xff09;1.operator2.operator[]3.operator4.operator 4.string的四…...

未来不会使用 AI 的人真的会被淘汰吗?

AI 是今年大火的一个话题&#xff0c;随着 ChatGPT 之类的一系列大模型开始流行以后&#xff0c;有不少的培训机构宣称这样的口号: “未来不会使用 AI 的人将会被淘汰”。我觉得这个观点本身并没有错&#xff0c;但是关键在于那些培训机构出于自身的利益&#xff0c;故意忽略了…...

K8S及Rancher部署

前言 这篇文写的有点子啰嗦&#xff0c;甚至为了控制篇幅我还分出了其他好几篇文章&#xff0c;只在本文中保留了我认为必须存在。而之所以篇幅这么长&#xff0c;一方面是我在相关领域完全新手&#xff0c;啥啥都不会&#xff1b;而另一方面是我所参考的资料都过于精简&#…...

Qt Creator使用git管理代码

1.在GitHub中新建仓库&#xff0c;设置好仓库名后&#xff0c;其它的设置默认即可。 2.打开git bash&#xff0c;输入以下命令&#xff1a; git config --global user.name "xxxxx" #设置你的GitHub用户名 git config --global user.email "xxxxxxxxx.…...

pandas教程:pandas读取csv文件并指定字段数据类型

文章目录 pandas指定数据类型处理数据类型错误parse_dates参数pandas数据类型处理示例pandas指定数据类型 在读取csv文件时,我们可以使用dtype参数来指定每个列的数据类型。这个参数接受一个字典类型的值,其中键是列名,值是数据类型。数据类型可以是Pandas类型或NumPy类型,…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...