Dockerfile制作方法
解决了3个问题:
1、制作自己的Dockerfile。
2、修改Dockerfile。经常遇到,同样的dockerfile别人可以,但是自己build就失败,究其原因主要是网络故障导致wget、crul等下载、安装、设置没有成功。可先下载好文件再COPY。
3、调试Dockerfile。有的images跑不起来,刚跑起来就来个 exited with code 0,这时怎么办,需要调试
办法:
1、进入到容器的bash
docker run -it name/id (bash) # 让创建的容器立刻进入运行状态。(最后COMMAND不为bash需指定bash) docker exec -it container_name/id (bash) # 用于容器启动之后,执行交互型任务。(最后COMMAND不为bash需指定bash) docker attach container_name/id # 将终端依附到容器上,不能指定bash。(只对最后COMMAND为bash的才有效)
# COMMAND:指镜像的最后一条CMD或者ENTRYPOINT
2、然后和系统装软件的方式一样,做一个步骤,同时在Dockerfile中记录一条,这样Dockerfile也就做出来了
3、退出容器用exit
详细叙述如下:
一、针对image镜像,直接使用docker run
docker run -ti name #或者 docker run -ti name bash
如第一条直接进入bash,说明镜像的最后一条CMD或者ENTRYPOINT就是bash,直接安装记录Dockerfile就可以了
如第二条进入bash,说明镜像安装了bash,但是最后一条CMD或者ENTRYPOINT是其他程序。
如:docker run -ti appelgriebsch/alpine
-t, --tty=false 使用终端。经常和 -i一起使用。
-i, --interactive=false 打开STDIN和容器交互。经常和 -t一起使用
二、针对container容器
使用ps查看运行情况,根据COMMAND 选择相应的方法
docker ps
2.1如果最后CMD或ENTRYPOINT为bash,以下均可
docker run -it name/id docker exec -it container_name/id docker attach container_name/id
2.2如果最后CMD或ENTRYPOINT不为bash,需指定bash,以下均可
docker run -it name/id bash docker exec -it container_name/id bash
三、镜像无bash,那么需先添加个bash,再使用上面的方法,如下即可:
3.1来个dockerfile:
FROM alpine:3.4 USER root RUN apk update \ && apk upgrade \ && apk add bash \ && rm -rf /var/cache/apk/* ENTRYPOINT ["/bin/bash"]
3.2然后
docker build -t myim .
3.3再然后
docker run -ti myim
可见,进入了容器的bash了,ok你懂的
四、测试时经常用到的清除命令,如果有不能清除的 加个 -f 强制
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi -f $(docker images -q -a)
五:注意:转换为Dockerfile需要作少许修改,比如:
export HTTPD_VERSION="2.4.23" -----------> ENV HTTPD_VERSION 2.4.23 apk add --no-cache --update-cache bash ----> RUN apk add --no-cache --update-cache bash
六:如果出现"exited with code 0"错误:
6.1多数是因为映射文件夹权限问题
docker exec it 56ad858ff720 chmod 777 /var/www
6.2可以试试添加tty: true,
version: '2.0' services: face_golang: build: ./face volumes: - ./data/www:/var/www container_name: face_golang tty: true
或者在Dockerfile最后添加
ENTRYPOINT ["sh"]
或者
ENTRYPOINT ["/bin/bash"]