docker常用配置以及命令( 三 )


docker commit -a="leilei" -m="第一次打包镜像,打包后直接访问还会404吗" 231f2eae6896 tom:1.06. Docker镜像创建的两种方法6.1. 使用commit 命令创建docker镜像创建一个nginx镜像sudo docker run --name webserver -d -p 80:80 nginx运行完命令 创建成功然后我们访问浏览器

假设我们不喜欢这个页面 想修改这个页面我们可以进入docker容器内sudo docker exec -it webserver bash
然后 输入命令echo '<h1>hello,docker!</h1>' >/usr/share/nginx/html/index.html然后就修改了页面了
docker diff命令我们修改了文件即修改了存储层可以通过命令查看刚刚有哪些操作sudo docker diff webserver
Docker commit 命令Docker commit 命令可以叠加内容从而重新生成一个镜像docker commit [选项]<容器ID或容器苗> [<仓库名>][:<标签>]
sudo docker commit --author "lzc <hybpjx@163.com>" --message "modify Default page" webserver nginx:v2
这个时候就可以通过sudo docker images来查看了
或者通过sudo docker histroy nginx:v2
我们再创建一个为81端口的nginx容器sudo docker run --name web2 -d -p 81:80 nginx:v2然后访问 192.168.2.91:81可以发现 页面还是一样的 说明镜像创建成功
!!!! 慎用 docker commit 命令使用docker commit 命令虽然可以比较直观的帮助理解镜像分层的概念 但是实际开发环境不会这么使用因为由于命令执行了 很多文件发生了改动 这还仅仅是简单错误 如果是安装文件 编译构建 那么镜像会非常臃肿,此外 使用docker commit 意味着 所有对镜像的操作都是黑箱操作,生成的镜像也被称之为 黑箱操作
6.2 使用Dockerfile 创建docker镜像什么是dockerfileDockerfile 是一个文本文件 。其包含了一条一条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应该如何构建 。命令:必须命名为Dockerfile
mkdir mynginxcd mynginxtouch Dockerfile然后编辑此文件
FROM nginxRUN echo '<h1>Hello,world</h1>' > /usr/share/nginx/html/index.html然后执行命令(记住有个 点 . 代表执行dockerfile的目录)sudo docker build -t nginx:v3 .
我们可以把镜像上传到docker中去https://hub.docker.com/repositories
【docker常用配置以及命令】在我们上传镜像 要确保我们的docker 账号是登录状态的
  • 登录命令命令sudo docker login -u xxx -p xxx
  • 修改tag命令sudo docker tag nginx:v3 hybpjx/nginxv3:v3
使用这个名字然后执行sudo docker push hybpjx/nginxv3:v3即可完成上传
FROM 和RUN
【FROM指定基础镜像】基础镜像是必须指定的 。而FROM就是指定基础镜像,因此应该Dockfile中FROM是必备的指令 。并且必须为第一条指令 。
【Run指令的两种格式】shell 格式:RUN<命令>,就像是再命令行中输入的命令一样 。exec格式:RUN["可执行文件","参数1","参数2"],这更像是函数中调用的格式
比如
RUN apt-get updateRUN apt-get install vim就是创建了两层镜像 这样毫无意义最大不能超过127层的正确写法为:
RUN apt-get install \ && apt-get install vim注意: 任何无关的文件都要清理

经验总结扩展阅读