首页 > 其他分享 >轻松掌握Docker使用-进阶操作(二)

轻松掌握Docker使用-进阶操作(二)

时间:2022-11-28 18:36:42浏览次数:81  
标签:容器 进阶 轻松 指令 ENTRYPOINT 镜像 Docker Dockerfile


前言

在上一节《​​轻松掌握Docker使用-基础入门(一)​​》中我们了解到:

  • Docker是什么?
  • Docker的镜像管理&基础命令
  • Docker容器的基本操作
      这一节,我们来学习:
  • 如何定制Docker镜像?

使用 Dockerfile 定制镜像

什么是Dockerfile?

我们先来了解下什么是Dockerfile:

Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

简单来说就是,一个形容如何构建镜像的文本文件,而文件中包含了一条条的指令,通过指令告诉docker想构建出怎样的镜像。

Dockerfile“初使用”

这里我们自定义个 首页为“Hello, Docker!”的nginx镜像。

  1. 创建Dockerfile文件
~]# mkdir -p docker/custom-images
~]# cd docker/custom-images/
custom-images]# ls
custom-images]# mkdir mynginx
custom-images]# ls
mynginx
custom-images]# cd mynginx/
mynginx]# touch Dockerfile
mynginx]# ls
Dockerfile
  1. 编写Dockerfile
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

Dockerfile 支持 Shell 类的行尾添加 \ 的命令换行方式,以及行首 # 进行注释的格式。

  1. 根据Dockerfile构建镜像
    docker根据Dockerfile构建镜像的命令格式如下:
docker build [选项] <上下文路径/URL/->
mynginx]# docker build -t mynginx:v1 .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM nginx
latest: Pulling from library/nginx
a330b6cecb98: Pull complete
e0ad2c0621bc: Pull complete
9e56c3e0e6b7: Pull complete
09f31c94adc6: Pull complete
32b26e9cdb83: Pull complete
20ab512bbb07: Pull complete
Digest: sha256:853b221d3341add7aaadf5f81dd088ea943ab9c918766e295321294b035f3f3e
Status: Downloaded newer image for nginx:latest
---> ad4c705f24d3
Step 2/2 : RUN echo 'Hello, Docker!' > /usr/share/nginx/html/index.html
---> Running in f084b7333da2
Removing intermediate container f084b7333da2
---> e8edfb8313a0
Successfully built e8edfb8313a0
Successfully tagged mynginx:v1

其中 ​​docker build -t mynginx:v1 .​​​ 中​​-t​​​指定了镜像的名称,而​​.​​​指定的是上下文目录,docker build 命令会将该目录下的内容打包交给 Docker 引擎以帮助构建镜像。
4. 使用新构建的镜像运行容器

mynginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mynginx v1 e8edfb8313a0 4 minutes ago 133MB
[root@iZuf6aoqssezcm3p2u4jlkZ mynginx]# docker run --rm -it mynginx:v1 bash
root@a88f0c44629c:/# cat /usr/share/nginx/html/index.html
Hello, Docker!

Dockerfile常用指令说明

FROM 基础镜像

格式:​​FROM 镜像名称​​​   我们可以使用​​FROM​​指令,基于某一镜像来构建新的镜像。在Dockerfile中第一条指令必须是​​FROM​​指令。如果想从一个空白镜像构建,那么我们可以使用:

FROM scratch

​scratch​​是一个虚拟的概念,表示的是一个空白的镜像。

RUN 执行指令

格式:​​RUN 命令​​   运行指定命令。

WORKDIR 指定工作目录

格式:​​WORKDIR <工作目录路径>​​   使用WORKDIR可以指定后续Dockerfile指令的工作目录,如该目录不存在,WORKDIR 会帮你建立目录。

USER 指定当前用户

格式:​​USER <用户名>[:<用户组>]​​​   切换当前用户,在切换前需确保指定用户是存在的。​​USER​​指定用户后,后续执行 ​​RUN​​, ​​CMD​​ 以及 ​​ENTRYPOINT​​ 这类命令都使用的是该用户。

COPY 复制文件

格式:

  • ​COPY [--chown=<user>:<group>] <源路径>... <目标路径>​
  • ​COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]​​   COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置。目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建缺失目录。

CMD 容器启动命令

格式:​​CMD ["可执行文件", "参数1", "参数2"...]​​​   CMD 指令就是用于指定默认的容器主进程的启动命令的。**使用镜像运行容器,容器内需要有主进程运行容器才能持续运行的状态。容器是为了主进程而存在,如果容器的主进程退出,那么容器也失去意义从而退出。**这一点也是提醒我们,如果想让容器保持运行那么​​CMD​​执行的容器启动命令需要hang住主进程,而不是执行完主进程立马退出。

ENTRYPOINT 入口点

格式:​​ENTRYPOINT ["可执行文件", "参数1", "参数2"...]​​​   ​​ENTRYPOINT​​和​​CMD​​的用法一致,目的也是用于指定容器主进程的启动命令。同样在运行容器的时候,指定命令从而覆盖​​ENTRYPOINT​​或​​CMD​​中指定的命令。不同的是在运行容器时要覆盖​​ENTRYPOINT​​中指定的命令,需要使用​​--entrypoint​​参数进行覆盖。
  使用​​ENTRYPOINT​​指令之后,再使用​​CMD​​指令,那么​​CMD​​指令指定的参数将作为​​ENTRYPOINT​​指令的参数。使用​​ENTRYPOINT​​指令之后,运行容器时指定运行参数,则同样也是作为​​ENTRYPOINT​​指令的参数。

ENV 设置环境变量

格式:​​ENV <key1>=<value1> <key2>=<value2>...​​​   使用​​ENV​​设置环境变量后,后续的​​RUN​​等指令,还是运行时的应用,都可以使用​​${变量名}​​使用到变量值。

EXPOSE 暴露端口

格式:​​EXPOSE <端口1> [<端口2>...]​​​   声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。当在​​docker run -P​​运行容器开发随机端口时,将会自动随机映射​​EXPOSE​​的端口。

参考资料


标签:容器,进阶,轻松,指令,ENTRYPOINT,镜像,Docker,Dockerfile
From: https://blog.51cto.com/u_15894233/5893360

相关文章

  • Centos7.X下Docker环境安装并配置加速镜像
    1、安装yuminstall-ydocker2、开启Docker服务systemctlstartdocker.service3、查看安装版本dockerversion4、设置开机启动systemctlenabledocker.servi......
  • 【2022-11-28】Docker部署搭建Gitlab
    一、环境准备1.准备一台虚拟机\或者购买服务器2.虚拟机硬件要求2.1内存不得少于4G,否则启动会报502错误,可自行百度解决,将虚拟机的swap分区调整为2G大小即可2......
  • docker 搭建 Jenkins 容器 ,拉取git代码
    Docker搭建Jenkins容器,拉取git代码一、安装jenkins前提条件:宿主机安装docker1、拉取镜像dockerpulljenkins/jenkins2、查看镜像dockerimages【列表中有jenkin......
  • docker Nginx 项目发布过程
    Docker镜像Nginx部署项目1、下载Dockeryuminstall-yyum-utilsdevice-mapper-persistent-datalvm22、安装Nginx2.1、使用Docker安装Nginx2.1.1查询可用的Ngin......
  • 图数据平台解决方案:Docker部署
    图数据平台解决方案:Docker部署​​图数据平台解决方案:Docker部署​​​​一、安装Docker​​​​二、使用Docker安装单节点​​​​三、使用Docker安装集群​​Here’sthe......
  • Docker 基础操作
    Docker基础操作目录Docker基础操作1docker操作镜像1.1docker基础操作镜像1.2从容器创建一个新的镜像1.3导出/入镜像1.4推送App镜像1.5本地仓库2docker操作容......
  • Docker容器内部端口映射到外部宿主机端口的方法总结
    好记性不如烂笔头,将docker容器端口映射到宿主机的方法做一个总结,方便后边忘记了能快速的查询。 首先需要注意:宿主机的一个端口只能映射到容器内部的某一个端口上,比如:80......
  • 高效率编写Dockerfile
    前言在日常的开发和运维中,我们时长会使用Dockerfile脚本制作镜像。其实编写一个Dockerfile文件用到的标签并不会太多,但是不同的Dockerfile在制作后产生的镜像大小是不尽相......
  • 部署Docker管理面板Portainer
    相信很多人都会遇到部署了docker后想要有个可以管理的控制台,方便我们对docker服务进行管理,查看日志、查看内存占用等等,虽然docker命令都能查看,但是肯定没有图表可视化等来......
  • PGL图学习之图神经网络ERNIESage、UniMP进阶模型[系列八]
    PGL图学习之图神经网络ERNIESage、UniMP进阶模型[系列八]原项目链接:fork一下即可:https://aistudio.baidu.com/aistudio/projectdetail/5096910?contributionType=1相关项......