# 构建镜像
有些冷门的软件不在远程仓库里,此时就需要手动安装。我们以 Ubuntu 的 base 镜像中安装 Java 环境,并将其打包成新的镜像(这个新的镜像就是一个包含 Java 环境的 Ubuntu 系统镜像)。
拉取启动 Ubuntu:
docker pull ubuntu | |
docker run -it ubuntu |
更新 apt(因为只有 base 镜像)
apt update |
这一步我之前换不换源都会出错,反正就是更新失败,后来折腾了两三天,都没什么效果。最后把 wifi 换成热点就更新成功了。所以你如果更新失败,可以试着检查一下网络问题。
也不用怀疑版本问题,本人用 Ubuntu 15 和 Ubuntu22 都更新成功过。
安装 jdk
:
apt install openjdk-8-jdk | |
# 如果 apt 更新失败,后面的也会失败 |
退出容器,将其构建为新的镜像,使用 commit 将容器保存为新的镜像:
docker commit 容器名称/ID 新的镜像名称 |
此时再使用 docker images
就可以看到新构建的镜像了。
但是这种构建方式 Docker 官方并不推荐。普通用户可以使用 Dockerfile 构建上述镜像
创建名为 Dockerfile
的文件:
touch Dockerfile |
我们需要在 Dockerfile
文件内部编写指令来告诉 Docker 需要构建镜像的相关信息
FROM <基础镜像> |
FROM
指令选择当前镜像的基础镜像(必须以该指令开始)。如果不需要任何基础镜像,使用 scratch
表示从零开始基础构建。
在容器中运行命令安装 Java 环境
RUN apt update | |
RUN apt install -y openjdk-8-jdk |
构建:
docker build -t <镜像名称> <构建目录> |
执行后,Docker 会在构建目录中寻找 Dockerfile 文件,然后开始依次执行 Dockerfile 中的指令:
每一个指令都会在镜像上创建一个新的层, -t
指定要创建的目标镜像名, .
是 Dockerfile 所在目录。
# 发布镜像
我们可以将镜像上传到:https://hub.docker.com/repositories
先在 hub.docker.com 上创建公共的镜像仓库,再将本地镜像上传,上传前可以将镜像名称修改规范:
docker tag ubuntu-java-file:latest 用户名/仓库名称:版本 |
然后本地上传:
docker push nagocoler/ubuntu-java:1.0 |
这里参考的青空の霞光的用户名 nagocoler 和仓库名 ubuntu-java
公共仓库是可以被搜索和下载的,搜索使用 search
命令即可:
docker search nagocoler/ubuntu-java |
再使用 pull 命令下载:
docker pull nagocoler/ubuntu-java:1.0 |
# 参考
https://www.yuque.com/qingkongxiaguang/zwhkpi/kq6rlg
https://pdai.tech/md/devops/docker/docker-03-basic2.html