docker export 容器名 > my_container.tar
,我们将容器本地化为镜像,用cat my_container.tar | sudo docker import - imported:container
命令导入镜像。这也是一种创建本地镜像的方式。- 使用commit命令创建本地镜像。
我们先运行一个容器
docker run -ti --name=test_commit ubuntu /bin/bash
//进入终端后update一下
apt-get update
apt-get install sqlite3
exit
//退出容器
docker ps -a
//查看方才创建的容器
docker commit -m="Message" --author="TONY" 容器ID tonyxinminghui/sqlite3:v1
docker images
//查看一下
docker run -ti --name="new_commit" tonyxinminghui/sqlite3:v1 /bin/bash
//测试本地镜像。 - 使用Dockerfile创建镜像:Dockerfile语法
PS:在当前目录下touch个Dockerfile文件将具体内容写入
- FROM:指定父镜像,可以通过添加多个FROM,在同一个Dockerfile中创建多个镜像
- MAINTAINER:维护者信息,可选
- RUN:用来修改镜像的命令,可以用来安装程序,当一条RUN完成后,会在当前的镜像上创建一个新的镜像层,接下来的指令会在新的镜像层上执行。有2种形式。
- RUN [“apt-get”, “update”],调用exec
- RUN apt-get update,调用的/bin/sh
- EXPOSE:用来指明容器内进程对外开放的端口。在docker run的时候可以加-p(可以将EXPOSE中没列出的端口设置为对外开放)和-P(EXPOSE里所指定的端口映射到主机上另外的随机端口???)来设置端口。
- ADD:向新容器中添加文件,文件可以是
- 主机文件:必须是相对Dockerfile所在目录的相对路径(如果是压缩文件,docker会解压缩)
- 网络文件:URL文件,在创建容器时会下载下来添加到镜像中。(如果是压缩文件,docker不会解压缩)
- 目录:必须是相对Dockerfile所在目录的相对路径(如果是压缩文件,docker会解压缩)
- VOLUME:会在镜像里创建一个指定路径的挂载点。这个路径可以来自主机,也可以来自其他容器,多个容器通过同一个挂载点来共享数据,即便有个容器已经停止,其余容器还是可以访问挂载点,只有当挂载点所有的容器引用消失,挂载点才会自动删除。
- WORKDIR:为接下来的指令指定一个新的工作目录。当启动一个容器后,最后一条WORKDIR指令所指向的目录为容器当前运行的工作目录。
- ENV:设置环境变量,在docker run 时可以用-e来设置环境变量
docker run -e WEBAPP_PORT=8000 -e WEBAPP_HOST=www.example.com
- CMD:设置容器运行时默认运行的命令,CMD参数格式与RUN类似。
CMD ls -l -a
或CMD ["ls", "-l", "-a"]
- ENTRYPOIN:与CMD类似,指定容器运行时默认命令。ENTRYPOINT和CMD的区别,在于运行容器时,镜像后的命令参数,ENTRYPOINT是拼接,CMD是覆盖
- USER:为容器的运行和RUN CMD ENTRYPOINT等指令的运行 指定用户或者UID
- ONBUILD:触发器指令,父镜像中不会执行,只有在子镜像中才会执行。
给一个例子
#Verson 1.0.1
#父镜像
FROM ubuntu:latest
#维护者信息
MAINTAINER Tony "445241843@qq.com"
#设置root用户为后续命令的执行者
USER root
#执行操作
RUN apt-get update
RUN apt-get install -y nginx
#使用&&拼接命令
RUN touch test.txt && echo "abc" >> abc.txt
#对外暴露端口
EXPOSE 80 8080 1038
#添加文件
ADD abc.txt /opt/
#添加文件夹
ADD /webapp /opt/webapp
#添加网络文件
ADD https://www.baidu.com/img/bd_logo1.png /opt/
#设置环境变量
ENV WEBAPP_PORT=9090
#设置工作目录
WORKDIR /opt/
#设置启动命令
ENTRYPOINT ["ls"]
#设置启动参数
CMD ["-a", "-l"]
#设置卷
VOLUME ["/data", "/var/www"]
【docker创建本地镜像(二)及Dockerfile的语法】
#设置子镜像的触发操作
ONBUILD ADD ./app/src
ONBUILD RUN echo "on build excuted" >> onbuild.txt
推荐阅读
- linux|2022年云原生趋势
- 个人日记|K8s中Pod生命周期和重启策略
- k8s|k8s(六)(配置管理与集群安全机制)
- Go|Docker后端部署详解(Go+Nginx)
- docker|Docker
- 【快速学习】docker构建java项目实践
- Alpine Docker 安装 bash
- docker|docker导入dmp文件到oracle容器
- 阿里云docker开发者平台镜像上传和下载
- 工具|dockers 自定义tomcat