search 搜索镜像:
docker search
images列出镜像列表:
docker images
ps 查看容器进程列表:
查看当前运行容器:
docker ps
列出所有的容器,包括已终止的:
docker ps -a
pull 拉取/下载镜像
docker pull
run 命令创建容器
-it 交互式
docker run -it --name
-p 端口映射
docker run -p 主机端口:容器端口
-d 后台运行
docker run -d
-v 磁盘挂载
docker run -v 主机目录:容器目录
stop restart stop 启动、重启、关闭容器
docker start
docker restart
docker stop
attach命令连接正在运行的容器
docker attach
rmi 命令删除镜像
docker rmi
rm 命令删除容器
docker rm
inspect 查看容器细节
docker inspect
当使用docker build命令时,当前工作目录被成为"构建上下文",docker build 默认查找当前目录的Dockerfile作为构建输入,也可通过-f指定Dockerfile,即docker build -f ./Dockerfile
FROM: 选择基础镜像,推荐alpine
LABELS: 按标签组织项目
RUN: 执行命令
EXPOSE: 暴露端口,是镜像创建者和使用者的约定,
可使用docker run -p port:container_port 进行端口映射.
ENV:设置环境变量
ADD:从源地址复制文件(文件 目录 url)到目标目录
COPY:从源地址(文件目录等本地文件)复制文件到目标目录
ENTERPOINT: 定义可执行的容器镜像的入口命令
ENTERPOINT["executable","param1","param2"]
CMD: 容器镜像中包含应用的运行命令,需要带参数
CMD["executable","param1","param2",...]
WORKDIR: 相当于cd,切换到工作目录
WORKDIR /PATH
USER: 指定镜像以什么用户去执行
VOLUME: 向镜像容器添加卷
VOLUME 主机目录 容器目录
构建目标:镜像小 层级少 易管理 利用缓存
1)最小化层级数:
最新的docker只有RUN COPY ADD创建新层,其他指令创建临时层,不会增加镜像大小.
多条RUN指令可以通过&&连接符连接成一条指令集以减少层数.
通过多段构建减少镜像层数.
2)复制文件时,每个文件应该独立复制,以确保某个文件变更时,只影响改文件对应的缓存.
3)编写dockerfile时,应该把变更频率低的编译指令优先构建,以便放在镜像底层有效利用build cache.
4)多行参数按字母排序,减少重复参数,提高可读性.
首先创建go web项目,本人使用gin框架作为web开发框架,gin是golang编写的web框架,具有REST风格注册路由,基数树实现路由匹配,Context实现对request和response的封装,RouterGroup实现路由处理,支持中间件,JSON验证,并内置JSON XML HTML渲染。
以下代码是使用gin框架、且最基础的的go代码:
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/hello", func(c *gin.Context) {
c.JSON(200, gin.H{"msg": "hello"})
})
r.Run(":8080")
}
配置Docker远端连接,通过tcp连接"tcp://host-ip:docker-port"远程连接Linux的Docker服务。
在Edit Configurations中创建dockerfile配置项
具体配置过程可以参考:goland远程连接Linux的docker服务
通过保留二进制文件来减小镜像的大小:
FROM golang:alpine AS builder
# 设置环境变量
ENV GOMODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
# 移动到工作目录 /build
WORKDIR /build
# 将代码复制到容器中
COPY . .
# 设置环境变量,开启go module和配置下载代理
RUN go env -w GO111MODULE=on && \
go env -w GOPROXY=https://goproxy.cn,direct && \
go mod tidy && \
go build -o app .
# 创建小镜像
FROM scratch
# 从builder镜像中把/build/app 拷贝到当前目录
COPY --from=builder /build/app /
# 声明服务端口(暴露端口)
EXPOSE 8080
# 启动容器时运行的命令
CMD ["/app"]
可以看到在ubuntu系统中goweb的镜像已经构建完成。
文末至此,下午内容对大家有所帮助,感谢大家支持!