Docker 基础使用方法(三) Dockerfile基础和构建镜像

前两章是基础,这一章,也差不多,因为这个东西本来就不复杂

之前讲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

下一章是镜像的导入导入

原文地址:https://www.cnblogs.com/dutu/p/8022721.html