Docker镜像构建的两种方式

1.从容器创建镜像

1.1 docker commit命令

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS

含义

-a

指定镜像的作者

-c

使用Dockerfile指令来创建镜像

-m

指定镜像构建的信息

-p

在commit时,将容器暂停

1.2 使用docker commit创建镜像

#运行一个容器,自定义名字为mynginx
ycy@ubuntu18:~$ docker run -it --name mynginx centos bin/bash
#在容器内安装EPEL源
[root@9ab9358f544f /]# rpm -ivh https://mirrors.aliyun.com/centos/7.6.1810/extras/x86_64/Packages/epel-release-7-11.noarch.rpm
#在容器内安装Nginx服务
[root@9ab9358f544f /]# yum -y install nginx
[root@9ab9358f544f /]# echo "daemon off;" >> /etc/nginx/nginx.conf
[root@9ab9358f544f /]# echo "docker commit" > /usr/share/nginx/html/index.html
[root@9ab9358f544f /]# exit
exit
#使用docker commit命令提交镜像
ycy@ubuntu18:~$ docker commit -m "My nginx" mynginx nginx-test
latestsha256:229fed9c93f9c0a6d122a15fe2fe86493f31aca9d5651e1286493bc6e800eaf6

查看镜像

测试镜像

#后台运行新创建的镜像实例
ycy@ubuntu18:~$ docker run -d -p 8080:80 nginx-test nginx
f4580fa975c61fffd2bdd1e41291d68f6664c2738732acef74f15bba35eaab03


2.通过Dockerfile构建镜像

2.1 docer build命令

用法:docker build [OPTIONS] PATH | URL | -

OPTIONS

含义

-f 指定要使用的Dockerfile路径
--rm 设置镜像成功后删除中间容器
--tag,-t 镜像的名字及标签

2.2 Dockerfile命令介绍

  • FROM

格式:FROM <image>或FROM <image>:<tag>。

FROM是Dockerfile里的第一条指令,后面跟有效的镜像名。

  • MAINTAINER

指定维护者信息。

  • RUN

格式:RUN <command>或者RUN ["executable","param1","param2…"]的命令,如RUN ["yum","install","-y","nginx"]

  • CMD

格式:CMD <command>或CMD ["executable","param1","param2…"]

指定容器启动时执行的命令。每个Dockerfile只能有一条CMD命令。若指定多条,只有最后一条会被执行。如果你在启动容器的时候也指定命令,会覆盖Dockerfile构建镜像里的CMD命令。

  • ENTRYPOINT

格式:

ENTRYPOINT <command>或ENTRYPOINT ["executable","param1","param2…"]

类似于CMD命令,都是配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖。

  • USER

格式:USER <daemon>

指定该镜像以什么样的用户去执行。

  • EXPOSE

格式:EXPOSE <port> [<port1>…]

指定Docker容器内部暴露的端口号,如果需要外部访问,还需要启动容器时增加端口映射进行分配。

  • ENV

格式:ENV <key> <value>

设置环境变量,可以在RUN之前使用,然后RUN命令时调用,容器启动时这些环境变量都会被指定。

  • ADD

格式:ADD <src> <dest>或ADD ["src","dest"]

将指定的源文件复制到容器文件系统中。

  • VOLUME

格式:VOLUME ["/data"]

可以将本地文件夹或其他容器的文件夹挂载到容器中

  • WORKDIR

格式:WORKDIR <path>

在构建镜像时,指定镜像的工作目录。如果不能存在,则会创建目录

  • ONBUILD

ONBUILD指定的命令在构建镜像时并不执行,而是在它的子镜像中执行。

  • ARG

格式:ARG <name>[=<default value>]

指定了一个变量在docker build的时候使用,可以使用--build-arg <varname>=<value>来指定参数的值,不过如果构建的时候不指定就会报错。

2.3 使用docker build创建镜像(Dockerfile)

1.创建工作目录

ycy@ubuntu18:~$ sudo mkdir /docker
ycy@ubuntu18:~$ sudo sh -c 'echo "nginx in docker" > /docker/index.html'

2.创建Dockefile文件

ycy@ubuntu18:~$ sudo vim /docker/Dockerfile

# 指定基础镜像
FROM centos
# 指明维护者信息
MAINTAINER y [email protected]
# 在新镜像内部执行命令
RUN rpm -ivh https://mirrors.aliyun.com/centos/7.6.1810/extras/x86_64/Packages/epel-release-7-11.noarch.rpm
RUN yum -y install nginx && yum clean all
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
#将index.html文件复制到容器中nginxWeb服务器默认目录下
ADD index.html /usr/share/nginx/html/index.html
# 指定对外的端口
EXPOSE 80
# 指定容器启动时执行的命令(启动nginx服务)
CMD ["nginx"]

3.使用docker build命令创建镜像

ycy@ubuntu18:~$ docker build -t nginx_test:latest /docker

查看镜像

4.测试镜像

#后台运行新创建的镜像实例
ycy@ubuntu18:~$ docker run -d -p 8888:80 nginx_test
0779155e837a69c132d71451fa3d67874994c179e775a80c152d9ac42d24097f

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章