Docker的安装、打包和发布
本文从零开始介绍Docker安装,打包和发布,记录下中间的踩坑点和解决方法,包括
- Ubuntu上Docker最便捷安装方式
- 简单Web项目使用Docker从零开始的镜像基本打包流程
- Docker本地发布失败时,使用Github工作流快速稳定的进行自动镜像发布
安装
Ubuntu 安装 Docker
安装命令:
sudo apt install docker.io
安装命令-
systemctl status docker
检查 Docker 运行状态,显示Active: active (running)
即是在正常运行 -
sudo systemctl start docker
如果没有运行,使用当前命令运行 Docker 服务 -
sudo systemctl enable docker
开机启动 Docker -
sudo docker version
查看 Docker 版本
测试命令:
sudo docker run hello-world
下载 Docker
测试镜像,并在容器内执行hello-world
样例程序
- 如果成功运行显示
Hello from Docker!
则标识安装成功,同时网络也正常 - 如果提示拉取失败等网络错误,则需要参考打包一节中更换镜像源
非root用户运行Docker
1 | # 改变docker权限控制 |
安装 Docker Compose:
最新版下载地址 github.com/docker/compose/releases
一键下载命令,其中v2.6.1替换为最新的版本号
1 | # 下载并安装 |
Win10 安装 Docker
直接从官网下载安装
安装后启动 Docker,仍需要通过命令行运行
打包
更换镜像源
由于国内特殊网络环境,直接拉取Docker很容易失败,故需更换镜像地址加速访问
推荐使用阿里源,需要注册阿里云账号,镜像地址
参考页面上的说明即可更换镜像地址
对于Ubuntu可使用如下命令
1 | sudo mkdir -p /etc/docker |
编写 Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
假设你的FastApi项目结构为
1 | /root/of/project/ |
则可以参考下面的文件编写 Dockerfile
1 | FROM python:3.9-slim |
打包和测试
-
docker build -t demo:latest .
使用当前目录的Dockerfile进行打包,打包出名字为demo,标签为latest的镜像 -
docker images
查看本地的镜像列表 -
docker run -it -p 8000:8000 demo:latest
交互式测试运行镜像,并且进行端口转发, 运行后可以通过web访问 -
docker run -d -p 8000:8000 demo:latest
后台运行镜像,会返回完整的镜像id -
docker ps -a
查看镜像的运行情况 -
docker kill 容器ID
终止运行中的容器 -
docker exec -it 容器ID /bin/bash
进入到容器内部 -
docker rmi 镜像ID
删除镜像 -
docker rm 容器ID
删除容器
发布
打标签的命令, 可以给一个镜像打多个不同的标签
1 | # 将 myimage:1.0 打一个新的标签 myimage:latest |
本地导出
-
docker export 1e560fca3906 > demo-latest.tar
本地导出发布 -
docker import demo-latest.tar runoob/ubuntu:v4
本地导入
直接发布到 Docker Hub
首先进行登录和授权
- 打开 hub.docker.com 注册相应的账号
- 打开 Token管理页面 生成新的token,给予读写权限
- 本地执行命令
docker login
然后输入账号和Token完成登录
之后将项目打上
username/repo
标签后,即可开始发布到镜像到repo
-
docker push username/repo
推送默认标签(latest)的镜像 -
docker push username/repo:v0.0.4
推送标签(v0.0.4)的镜像
网络良好的情况下,可以直接推送成功。
但是由于国内特殊网络环境,往往会一直失败,遇到EOF
等错误,因此可以使用Github的工作流来完成替代发布
使用Github的工作流完成自动发布
成品可以参考项目 simple-image-host
本节的目的为,配置好Action,后续每次推送格式为标签v1.0.0
时,可以自动打包镜像,然后发布标签为v1.0.0
的镜像以及更新标签为latest
的镜像。相比于手动发布,配置好后,后续发布操作简单,发布速度很快并且十分稳定。
- 首先将本地项目代码推送到Github
- 项目主页打开【Action】
- 搜索Docker选择【Docker image】开始配置
- 将如下配置文件复制粘贴到工作流配置中,保存并提交,注意其中的
your_username/your_image_name
替换为自己的Docker Hub项目名
1 | name: Docker Image CI |
将配置文件保存后,我们要配置secrets变量,以让github可以自动发布
打开页面【Settings】=>【Secrets and variables】=>【Actions】
- 在【Repository
secrets】新增变量
DOCKERHUB_TOKEN
,值为在Docker Hub生成的Token - 在【Repository
secrets】新增变量
DOCKERHUB_USERNAME
,值为在Docker Hub的用户名
- 在【Repository
secrets】新增变量
本地项目打标签
git tag v1.0.0
推送标签到远程
git push --tags
或者git push origin v1.0.0
到此大功告成!可以看到工作流成功开始运行
附上标签其他比较常用的操作命令
1 | 1、git tag --list 列出所有的标签 |
参考资料