Docker
在这里简单介绍下Docker,建议深入学习
Docker 是一个开源的轻量级容器技术,让开发者可以打包他们的应用以及应用运行的上下文环境到一个可移植的镜像中,然后发布到任何支持Docker的系统上运行。 通过容器技术,在几乎没有性能开销的情况下,Docker 为应用提供了一个隔离运行环境
- 简化配置
- 代码流水线管理
- 提高开发效率
- 隔离应用
- 快速、持续部署
常用命令
镜像相关:
查看镜像: docker images
搜索镜像:docker search 镜像名
拉取镜像: docker pull 镜像名
删除镜像:docker rmi id
构建镜像:1.docker commit(基于一个容器构建一个镜像),无法自定义(不常用),一般用dockerfile构建
容器相关:
创建并运行容器: docker run ((-d后台运行) (-p端口映射 主机端口:容器端口) (--name 指定容器名)(--rm退出时删除容器)(--restart 容器意外关闭重启策略:1.no 表示关闭不重启 2.on-failure:指定重启次数,当容器关闭时重启,超过次数不再重启 3.always:只要容器关闭就重启(相当于这个容器无法关闭)适用于要一直开着的服务)(-e设置容器环境变量)(-m限制内存)(--cpus限制cpu)(--net指定网络模式)(--link连接其他容器(单向)(-v绑定数据卷))镜像名
查看容器:docker ps (默认查看正在运行的容器)(-a查看未运行)
停止/启动容器: docker stop/start id
删除容器:docker rm id
容器重启策略:1.no 表示关闭不重启 2.on-failure:指定重启次数,当容器关闭时重启,超过次数不再重启 3.always:只要容器关闭就重启(相当于这个容器无法关闭)适用于要一直开着的服务
查看容器详细信息:docker inspect id
查看容器状态:docker stats id
查看容器日志:docker logs (-f持续追踪)id
指定容器执行命令:docker exec (-it在终端中显示)name
进入容器内部:docker exec -it name /bin/bash(指定容器名和运行脚本)
Golang
以下为一个简单的golang web项目httpTest
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, "hellohttp")
})
r.Run(":8080")
}
dockerfile
作用:需要把自己开发的项目打包成镜像,便于docker运行
概念:docker提供的自定义构建镜像的配置文件,利用docker build命令指定dockerfile就可以按照文件构建镜像
常用命令
FROM 指定基础镜像
MAINTAINER 描述镜像作者
LABEL 镜像的标签信息
ENV 配置环境变量
RUN 构建镜像时需要执行的命令
ADD 将主机的文件复制到容器的目录中 ADD /etc/hosts/index.html(主机) /etc/hosts(容器)
WORKDIR 设置容器中的工作目录
VOLUME 创建数据卷到容器目录,无法指定主机目录
EXPOSE 暴露容器端口,与主机无关
CMD 和 ENIRYPOINT 选择其一,镜像构建完成后,容器启动所要执行的脚本
( CMD与ENTRYPOINT区别
- CMD命令设置容器启动后默认执行的命令及其参数,但CMD设置的命令能够被docker run命令后面的命令行参数替换
- ENTRYPOINT配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行 docker run时指定了其他命令)
- ENTRYPOINT 的 Exec 格式用于设置容器启动时要执行的命令及其参数,同时可通过CMD命令或者命令行参数提供额外的参数
- ENTRYPOINT 中的参数始终会被使用,这是与CMD命令不同的一点
)
构建镜像:docker build -t(表示用dockerfile构建)镜像名 dockerfile路径(dockerfile在当前目录可以用. 来表示)
为golang项目编写dockerfile
在项目根目录下创建dockerfile:
FROM golang:alpine
WORKDIR /build
COPY . .
RUN go env -w GOPROXY=https://goproxy.cn,direct && go mod download
RUN go build -o httpTest
EXPOSE 8080
CMD ["/build/httpTest"]
运行命令
docker build -t httptest .
等待镜像构建
构建完成后输入
docker images查看镜像
运行命令创建并运行容器,将主机和容器的端口绑定起来(-P随机选择主机端口)
docker run -P httptest
查看正在运行的容器:docker ps
可以看到主机的32768端口和容器的8080端口已经绑定
在浏览器访问主机ip+端口/hello
构建成功!