dockerfile编写学习
docker基本知识与入门常见问题
*****Docker操作基本流程
docker基本命令:
docker images:查看docker镜像仓库(images repository)
docker build -f [dockerfile] -t [输出的文件名称] . :通过dockerfile创建自定义镜像
docker ps:查看docker启动中的容器
docker ps -a:查看docker所有的容器
docker run:从images —>创建成—>contain
docker start: 启动已存在的容器
docker stop: 停止启动的容器
docker rm:删除存在的容器
docker rmi:删除仓库中的镜像
docker attach:进入容器内部
1. Dockerfile 编写规则
1. 指令大小写不敏感,为了区分习惯上用大写
2. Dockerfile 非注释行第一行必须是 FROM
3. 文件名必须是 Dockerfile
4. Dockerfile 指定一个专门的目录为工作空间
5. 所有引入映射的文件必须在这个工作空间目录下
6. Dockerfile 工作空间目录下支持隐藏文件(.dockeringore)
7. (.dockeringore)作用是用于存放不需要打包导入镜像的文件,根目录就是工作空间目录
8. 每一条指令都会生成一个镜像层,镜像层多了执行效率就慢,能写成一条指定的就写成一条
2. Dockerfile构建过程
构建一个新镜像,我们可以大致分为三个步骤:编写Dockerfile文件 > docker build > docker run
3. Dockerfile基本命令
FROM 指定基础镜像
MAINTAINER 指定作者
RUN 执行参数中定义的命令,构建镜像时需要的命令
EXPOSE 向容器外部公开的端口号
WORKDIR 设置容器内默认工作目录
USER 指定用户
ENTROYPOINT 指定一个容器启动时运行的命令
ENV 设置环境变量
ADD|COPY 复制文件到镜像中
VOLUME 容器数据卷,向镜像创建的容器添加卷
CMD 容器启动时要运行的命令,可以有多个,但只有最后一个生效
Dockerfile的构建过程就是build的执行过程。
在Dockerfile编写完成之后,通过docker build命令的方式生成镜像images,下一步再通过docker run进行容器启动,注:不能用docker start的方式进行启动。
docker run:是通过镜像images创建一个新的镜像
docker start:是启动已存在的contain容器
注:contain容器不等于image镜像
1.把当前目录和子目录当做上下文传递给docker服务,命令最后的点表示当前上下文。
2.从当前目录(不包括子目录)找到Dockerfile文件,如果不指定文件,必须是此文件名。
3.检查docker语法。
4.从基础镜像运行一个容器。
5.执行指令,修改容器,如上面操作添加数据卷,修改首页。
6.对修改后的容器提交一个新的镜像层,也可叫做中间层镜像。
7.针对中间层生成的镜像,运行新的容器。
8.重复执行修改容器、提交镜像、运行容器指令,直到所有指令执行完成。
*****DOCKER未知疑问:
启动80转发80端口时,可以正常浏览器访问;但是80转发1000端口无法正常访问
CentOS容器启动后,会立刻退出:
原因排查:
那么如何解决呢,其实很简单。
通过docker run -itd 镜像名/id
就可以后台启动centos且不会自动停止了。
原因是什么呢:
-it选项是以交互形式运行,如果只是以交互形式运行,会进入到容器的shell。之后输入exit退出shell,会连带着将容器也停止掉。也可以在容器shell里以快捷建ctrl+P+Q形式退出容器shell,此时并不会把容器停止。这也是一种方法但是太过麻烦。
-d选项是以后台形式运行容器。
那么-itd就是以后台交互的形式运行容器,并不会直接跳到容器的shell再退出。
此时可以成功启动,通过docker attach可以进入容器
容器卡死时
当进不去容器bash交互界面时:docker exec -it 容器 sh,用此方式进入bash的子sh。
容器操作![](https://img-blog.csdnimg.cn/20200515013757787.png)
更多推荐
所有评论(0)