docker镜像和容器基础篇

本文详细介绍了Docker镜像(Image)的概念、创建及管理方法,并深入解析容器(Container)的运行原理。通过实战演练,演示了如何使用Dockerfile构建镜像,包括环境搭建、依赖管理、代码部署及服务运行等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 什么是镜像(Image)

      镜像就是像照镜子一样。我们一般说的镜像是指给系统作个ghost镜像。这样可以在很短时间,很方便的还原出一个完整的系统来。镜像可以说是一种文件,比如iso,gho都属于镜像文件,镜像文件可以直接刻录到光盘中,也可以用虚拟光驱打开.

      镜象就是一种文件形式,可以把许多文件做成一个镜象文件。比如你的系统,本来有很多文件,做成镜象后就一个文件,与GHOST等程序放在在一个盘里用GHOST等软件打开后,又恢复成许多文件,总之用镜象给你装系统就是原样复制一份现有系统的意思,当然里面的杀毒软件等也是一样复制过来的。

1.2 Image的获取

     1.2.1 逐步的设置image的版本,标识,加载软件,监听端口,安装位置等参数                                                                                                                                                

     1.2.2 类似于github一样,直接从库中拉取,可在https://hub.docker.com/explore中查看需要的程序

                            

1.3 Image的创建

     1.3.1 创建一个go程序,直接输出hello,world就可以,如图:

                 

     1.3.2 在同一个目录下编写dockerfile文件,内容如下:

                                       

          其中,FROM scratch 是从零开始,而不是其他的镜像

                   ADD 文件名 路径 (把文件加载到镜像中)

                   CMD  * (运行程序)  

         注意:此时运行的路径不要和编写原hello的路径相同,否则会报错

     1.3.3 运行命令 docker build -t go/hell .

                 

            参数说明:

                    -t: 该镜像的命名

                     .: 当前目录 

     1.3.4 结果查看

                 

     1.3.5 运行程序

                   

     1.3.6 删除镜像

               如果想要删除镜像,必须先要删除容器,先用命令 docker ps -a 查看所有的进程

           

             先删除运行中的容器: docker rm ID

          

            最后才能删除镜像: docker rmi hello/go go/hell

          

           查询结果,已删除 docker images

          

 

2.1 什么是Container

                

2.2 运行Container

     2.2.1 如果直接运行docker run centos,并不会有什么效果,必须加入参数:-it,说明:

           -t:在新容器内指定一个伪终端或终端。

           -i:允许你对容器内的标准输入 (STDIN) 进行交互。

如图:

      

我们进入了一个新的centos,如果我们新开一个ssh连接之前的终端,用docker ps -a命令查看,可显示此时容器在使用中

    

     2.2.2 使用命令删除全部容器

之前已经介绍过了,我们可以使用docker rm ID命令来删除对应的容器,那么有没有一建删除的方法呢?答案是必须得有.

        首先我们用 docker ps -a 命令来查看所有的进程

       其实使用 docker ps -aq 可以得到全部的Container ID

        最后我们封装一下命令: docker rm $(docker ps -aq) 就可以得到我们想要的结果(报错是因为有一个真在运行中容器)

 

3 制作DockerFile

     我们已经知道了Image和Container之间的衔接就是利用DockerFile来维系的,只要创建好dockerfile,并使用docker build -t XXX 命令就可以创建一个基于原Centos或新的image,所以编写DockerFile文件尤其的重要.

     3.1 FROM

                

     3.2 LABEL(类似于注释)

               

     3.3 RUN(运行)

              

     3.4 WORKDIR(设置当前工作目录,和linux中的cd很相似) 

            

     3.5 ADD and COPY(添加文件到指定的目录)

            

            

     3.6 ENV(设置常量)

           

     3.7 CMD (用于执行命令)

            

3.8 ENTRYPOINT(一般会用于启动后台进程)

            

4.1 实战演练

     4.1.1 运行go文件,并使用命令go run main.go实现web功能,具体的go文件如下:

package main

import (
	"github.com/gin-gonic/gin"
	"./model"
)

//中间件的定义
func Logger() gin.HandlerFunc {
	return func(c *gin.Context) {
		name := c.Query("name")
		password := c.Query("password")
		if name == "admin" && password == "111111" {
			c.String(200, "验证通过</br>")
			//请求前
			//前置操作
		} else {
			//数据挂起,打断
			c.Abort()
			c.String(200, "我是中间件,你没有权限")
		}
	}
}

func index(c *gin.Context) {
	c.String(200, "日你大爷的")
}

func home(c *gin.Context) {
	c.String(200, "hello home")
}

func login(c *gin.Context) {
	c.String(200, "请先登陆!")
}

func ll(c *gin.Context) {
	c.JSON(200, gin.H{"md": "请先登陆!", "Qqq": model.Qqq()})
}

func main() {
	r := gin.Default()
	//设置分组中间件
	s := r.Group("/index", Logger())
	{
		s.GET("/index", index)
		s.GET("/home", home)
	}
	r.GET("/login", login)
	r.GET("/ll", ll)

	r.Run(":80")
}

     要实现功能,分析如下:

             1.首先是必须搭建go的环境,可以用FROM golang来实现

             2.其次是运行代码的时候,必须得加载go的第三方库gin,所以得RUN go get -u github.com/gin-gonic/gin

             3.然后是我们的main.go文件得加载进来,可以用COPY main.go /app/来实现

             4.最后就是我们去利用CMD ["go","run","main.go"]来运行我们的代码

   编写DockerFile文件如下:

            

   运行docker build -t ggg .后,我们可以看到运行成功;

         

   最后运行镜像 docker run -p 88:88 ggg , 看到了我们容器已经运行成功 

       

   当然,如果想要一直后台稳定的运行,可以使用命令docker run -p 88:88 -d ggg,返回的便是id了

      

     4.1.2 对container的操作

        进入运行的容器中可以使用命令 docker exec -it af8f9e448dbc bash

       

       停止运行的容器可用命令 docker stop af8f9e448dbc

       

 

 

 

 

 

 

 

 

 

 

 

 

               

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值