docker-day02 制作容器&制作dockerfile

制作镜像

  1. 下载一个基本的镜像
    docker pull ubuntu:16.04
    
  2. 创建一个容器
    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. 上传
    5.1 在hub.docker.com 注册&登录
    5.2 在终端docker login 登录
    5.3 通过tag 打标签
    docker tag 镜像名:版本 用户名/镜像名:版本
    5.4 推送到仓库
    docker push 用户名/镜像名:版本

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

方式二 Dockerfile

  1. 新创一个文件夹, 新创一个Dockerfile 文件
$ mkdir my_nginx 
$ cd my_nginx 
$ touch Dockerfile
  1. 编写文件Dockerfile
# 检查 是否有 这个镜像, 没有则会下载
FROM nginx:1.0
# run 运行命令 shell 
RUN echo '

hello Docker

' > /usr/share/nginx/html/index.html
  1. 构建新镜象
docker build -t 镜像名字:版本 上下文路径

docker build -t my_nginx:1.0 .
  1. 运行容器
docker run -it --rm -p 8002:80 mynginx:1.0

镜像进阶 版

一个特殊镜像 scratch 这个镜像是虚拟的概念, 并不实际存在

它表示一个空白的镜像
使用’Go '语言 开发 常用

FROM scratch

RUN XXXXX
每次run 就是一层

Union FS 是有最大层数限制的,比如 AUFS,曾经是最大不得超过 42 层,现在是不得超过 127 层。

注意
一般 Dockerfile 放于一个空目录下, 或者项目根目录下。
如果目录下有些东西确实不希望构建时传给 Docker 引擎,那么可以用 .gitignore 一样的语法写一个 .dockerignore,该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。

-f …/Dockerfile.php 参数指定某个文件作为 Dockerfile。

docker build 支持 url

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”…]

你可能感兴趣的:(部署-开发环境,docker,python)