Docker镜像使用
制作镜像
- 下载一个基本的镜像
1
docker pull ubuntu:16.04
- 创建一个容器
1
docker run -it ubuntu:16.04
- 需求是 安装vi
需要 修改 /etc/apt/sources.list 更新源
3.1 编辑一个sources.list 复制到docker 容器中
docker cp sources.list 容器id:/home 将sources.list 复制到容器中
3.2 在容器中将/home/ 下的sources.list 替换 /etc/apt/sources.list
3.3 让更新源生效 apt update
3.4 安装vi apt install vim
将容器打包为镜像
docker commit -m “备注” 容器的id 镜像的名字:版本上传
1 在hub.docker.com 注册&登录
2 在终端docker login 登录
3 通过tag 打标签
docker tag 镜像名:版本 用户名/镜像名:版本4 推送到仓库
docker push 用户名/镜像名:版本
检查镜像的信息
docker inspect 镜像的名字:版本
方式二 Dockerfile
- 新创一个文件夹, 新创一个Dockerfile 文件
1
2
3$ mkdir my_nginx
$ cd my_nginx
$ touch Dockerfile - 编写文件Dockerfile
1
2
3
4# 检查 是否有 这个镜像, 没有则会下载
FROM nginx:1.0
# run 运行命令 shell
RUN echo '<h1> hello Docker</h1>' > /usr/share/nginx/html/index.html - 构建新镜象
1
2
3docker build -t 镜像名字:版本 上下文路径
docker build -t my_nginx:1.0 . - 运行容器
1
docker run -it --rm -p 8002:80 mynginx:1.0
镜像进阶 版
一个特殊镜像 scratch
这个镜像是虚拟的概念, 并不实际存在
它表示一个空白的镜像
使用’Go ‘语言 开发 常用
1 | FROM scratch |
RUN XXXXX
每次run 就是一层
Union FS 是有最大层数限制的,比如 AUFS,曾经是最大不得超过 42 层,现在是不得超过 127 层。
注意
一般 Dockerfile 放于一个空目录下, 或者项目根目录下。
如果目录下有些东西确实不希望构建时传给 Docker 引擎,那么可以用 .gitignore 一样的语法写一个 .dockerignore,该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。
-f ../Dockerfile.php 参数指定某个文件作为 Dockerfile。
docker build 支持 url
1 | docker build -t hello-world https://github.com/docker-library/hello-world.git#master:amd64/hello-world |
这行命令指定了构建所需的 Git repo,并且指定分支为 master,构建目录为 /amd64/hello-world/,然后 Docker 就会自己去 git clone 这个项目、切换到指定分支、并进入到指定目录后开始构建。
ADD 更高级的复制文件
在 Docker 官方的 Dockerfile 最佳实践文档 中要求,尽可能的使用 COPY,因为 COPY 的语义很明确,就是复制文件而已,而 ADD 则包含了更复杂的功能,其行为也不一定很清晰。最适合使用 ADD 的场合,就是所提及的需要自动解压缩的场合。另外需要注意的是,ADD 指令会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。因此在 COPY 和 ADD 指令中选择的时候,可以遵循这样的原则,所有的文件复制均使用 COPY 指令,仅在需要自动解压缩的场合使用 ADD。在使用该指令的时候还可以加上 –chown=
CMD
格式:CMD [“可执行文件”, “参数1”, “参数2”…]