Docker 运行命令说明
首先就是可以看官网 翻译一遍 将 Go 镜像作为容器运行 |Docker 文档
大致流程
可以先查看 Dockerfile 文件的注释看一下解释说明
docker build --tag docker-gs-ping . 根据 Dockerfile 文件生成镜像(----镜像是环境代码的集合-----,也可以是单个环境 比如 node,java,golang)此镜像包含了项目里面的代码以及所需要的环境进行了打包,切记代码改动后 重新打包就为一个新镜像 而老镜像依旧是一切的代码以及环境的集合。
运行 docker run --publish 8080:6060 docker-gs-ping 命令 把镜像运行到容器里面 一个镜像可以部署到多个容器 (镜像属于一个能独立运行的包,可以运行到多个容器里) --publish(发布)8080 是宿主机端口(电脑端口) , 6060 是 docker 容器开启的端口,docker 运行的端口要保持与代码开启的端口一致 (代码开启的 6060 docker 映射到宿主机的端口应当也为 6060) 这样的话代码开启的端口 6060 就是 docker 开启的 6060 然后映射到宿主机的 8080 端口
- 我映射的端口随便(不重复就行):docker(容器)端口根据镜像暴露的来(还需要查看代码开启的端口是否和暴露端口一致)
以上配置后不足以达到 修改代码就会响应的地步 需要重新执行 2 步骤的命令打包镜像 执行 3 运行到容器后 运行新的容器才会响应新的内容
开发环境 使用 Docker Compose 可以帮助你定义和运行多容器的 Docker 应用。通过一个
docker-compose.yml
文件,你可以定义应用所需的所有服务,并使用简单的命令来启动和管理它们 docker compose up --build 运行这个命令后会根据配置文件的 image: golang:1.19 生成镜像 后面的参数生产容器并且运行 一切生成完毕后第二次运行只需要 docker compose up 更新就可以了
运行 mysql
docker run -p 3306:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.37 (-p XXXX:XXXX 指定端口,--name XXX 设置容器名称 , -e 添加参数设置 MYSQL_ROOT_PASSWORD=123456 设置密码为 123456 , -d 以后台模式运行容器,mysql:8.0.37 使用镜像:版本,不然默认镜像的 latest 版本)
重要命令
docker pull [镜像名称:tag] 拉取镜像
docker image remove || rm [镜像名称:tag] 删除镜像
docker build -t gogin:cesTag . 构建镜像 -t 代表可以设置 tag 镜像名称必须是小写 不能使用驼峰
docker run -p 8088:8088 --name nowGoGin [镜像名称:tag] 构建容器
docker remove [容器名称] 删除容器
docker ps 查看所有运行容器
docker ps -a 查看所有容器
docker start [容器名称] 运行容器
docker stop [容器名称] 停止容器
docker restart [容器名称] 重新运行容器
打包为镜像的问题
mos 打包的镜像上 arm64 的 而运行在服务器需要 amd64 的,
这时候就要构建一个两个都支持的镜像 docker Buildx 是一个推荐的解决方案
上传镜像问题
常规上传 docke hub
在镜像里面 创建一个 tag 镜像 格式满足 push
docker tag 镜像名称:tag 账户名称/新建的容器名称:dev //这一步相当于在原本镜像里准备一份满足 push 的格式准备上传。
docker push 账户名称/新建的容器名称:tag
当然也不可以构建的时候直接 push 不留本机镜像 直接构建 push 上去 docker buildx build --platform linux/amd64,linux/arm64 -t 账户名称/新建的容器名称:tag -- push .
服务器拉取问题
docker login 登录的时候因为是 GitHub 登录 所以登录 docker 用户名(不能是 GitHub 的邮箱)时 需要在 docker 官网先使用 GitHub 登录 点击个人信息 点击 security 新增一个 New Access token 这时候会生成一个 用户名对应的密码 此密码只会显示一次
docker pull 用户名/镜像名称:tag