前两章是基础,这一章,也差不多,因为这个东西本来就不复杂
之前讲Docker有两种构建方式,一种是使用基础镜像运行,然后在commit,一种是使用Dockerfile
第一种很简单,就是运行了镜像以后,比如:
docker run -itd --name test ubuntu:latest /bin/bash
使用这个命令进入镜像:
docker exec -it test /bin/bash
当然-it后面是使用的镜像的NAMES,也可以用ContainerID
接下来就是执行自己的各种命令,什么apt-get install update了之类的,这个就不细讲了,反正就是自己定制完了,然后在执行:
docker commit -a "onepoint onepoint@11.com" test myimages
具体命令自己看help,test是容器的名称,也可以用container id替代,myimages意思就是最新提交的镜像了,如果有需要可以带上TAG,比如:
docker commit -a "onepoint onepoint@11.com" test myimages:0.1
跟着需求来,最后就到了Dockerfile了:
我这有一个模板:
FROM ubuntu:16.04 MAINTAINER onepoint 'onepoint@ttt.com' # 更新源,安装ssh server RUN apt-get update && apt-get install -y openssh-server vim git && mkdir /var/run/sshd && echo 'root:123qwe' | chpasswd && sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
ADD ./miniconda3 /root/ #容器开发SSH 22端口 EXPOSE 22
我还没掌握Dockerfile的精髓,没时间深入研究,基础嘛~
FROM 意思就是使用哪个镜像作为母本,当然也可以使用你自己编辑好的镜像,看需求
RUN 就是执行后面的命令,&&的意思就是,执行上一条,执行下一条,换行符就不用说了,为了好看~
因为docker有个layer的概念,所以如果能在一条命令里面执行多个操作,尽量去执行,要不然分好多层也浪费,虽然不影响使用.
在一个ADD就是添加本地的文件到镜像里面,格式的话类似于cp,但是文件夹也不用带r
接下来写好了Dockerfile就是开始构建了,可以先创建一个空文件夹,然后在把Dockerfile 挪到这里面,然后在这个空文件夹里面使用下面的命令:
docker build -t IMAGENAME:TAG .
如果没有语法错误,和拉不下来软件的情况,这样就坐等完事就可以,
接下来打出来的镜像就参考之前的命令去查看并运行就可以了
还有一个push的操作,可以push到镜像仓库:
docker push IMAGENAME:TAG
EXPOSE就是默认打开的端口,如果你看到这了,代表你需要打开一些端口,前文也说过运行的时候可以做端口映射,这个镜像里面带这个命令就相当与开一个默认端口,没做映射的,你可以通过:
docker inspect -f '{{.NetworkSettings.IPAddress}}' test
docker inspect -f '{{.NetworkSettings.Ports}}' test
docker inspect test
上面那个是查看IP,下面那个是查看已开启的端口号以及映射关系,如果不带-f的话就是全量的,和其他命令一样,可以是NAMES也可以是ContainerID
下一章是镜像的导入导入