当前位置: 首页 > 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  .

http://www.lryc.cn/news/410736.html

相关文章:

  • Kylin系列(二)进阶
  • Maven实战.依赖(依赖范围、传递性依赖、依赖调解、可选依赖等)
  • 关于React17的setState
  • 2024华为OD机试真题-英文输入法Python-C卷D卷-100分
  • magento2 安装win环境和linux环境
  • 【城市数据集】世界城市数据库和访问门户工具WUDAPT
  • 网络爬虫必备工具:代理IP科普指南
  • JMeter接口测试-5.JMeter高级使用
  • 网络安全大模型开源项目有哪些?
  • 【赠书第18期】人工智能B2B落地实战:基于云和Python的商用解决方案
  • 《昇思25天学习打卡营第24天》
  • KeePass密码管理工具部署
  • C#中导出dataGridView数据为Excel
  • 算法学习6——贪心算法
  • 【C++】标准库:介绍string类
  • 未来不会使用 AI 的人真的会被淘汰吗?
  • K8S及Rancher部署
  • Qt Creator使用git管理代码
  • pandas教程:pandas读取csv文件并指定字段数据类型
  • c#中使用数据验证器
  • Java真人版猫爪老鼠活动报名平台系统
  • Git原理与用法系统总结
  • 连载|浅谈红队中的权限维持(六)-Linux 主机后门与Linux 隐藏文件
  • tomato-靶机渗透
  • git的配置使用
  • 【1.0】drf初识
  • SparkSQL---编程模型的操作,数据加载与落地及自定义函数的使用
  • 文件解析漏洞--IIS--Vulhub
  • 你知道缓存的这个问题到底把多少程序员坑惨了吗?
  • 飞创直线模组桁架机械手优势及应用领域