0%

制作镜像

  1. 下载一个基本的镜像
    1
    docker pull ubuntu:16.04
  2. 创建一个容器
    1
    docker run -it  ubuntu:16.04
  3. 需求是 安装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

  1. 将容器打包为镜像
    docker commit -m “备注” 容器的id 镜像的名字:版本

  2. 上传

  3. 1 在hub.docker.com 注册&登录

  4. 2 在终端docker login 登录

  5. 3 通过tag 打标签
    docker tag 镜像名:版本 用户名/镜像名:版本

  6. 4 推送到仓库
    docker push 用户名/镜像名:版本

检查镜像的信息
docker inspect 镜像的名字:版本

方式二 Dockerfile

  1. 新创一个文件夹, 新创一个Dockerfile 文件
    1
    2
    3
    $ mkdir my_nginx 
    $ cd my_nginx
    $ touch Dockerfile
  2. 编写文件Dockerfile
    1
    2
    3
    4
    # 检查 是否有 这个镜像, 没有则会下载
    FROM nginx:1.0
    # run 运行命令 shell
    RUN echo '<h1> hello Docker</h1>' > /usr/share/nginx/html/index.html
  3. 构建新镜象
    1
    2
    3
    docker build -t 镜像名字:版本 上下文路径

    docker build -t my_nginx:1.0 .
  4. 运行容器
    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”…]

------ 本文结束------

欢迎关注我的其它发布渠道