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