Docker Image Build 和 Dockerfile 进行 Docker Image 制作详解(制作 Docker Image 方法之二)、Dockerfile 指令详解 第二篇

1、第一篇链接

Docker Image Build 和 Dockerfile 进行 Docker Image 制作详解(制作 Docker Image 方法之二)、Dockerfile 指令详解 第一篇

2、RUN 指令

在这里插入图片描述

2.1 介绍

  • 用于指定 docker container build 过程中运行的程序,其可以是任何命令

2.2 语法

# RUN <command> 
# RUN ["<executable>", "<param1>", "<param2>"]
## 第一种格式中,<command> 通常是一个 shell 命令, 且以“ /bin/sh -c ”来运行它
   这意味着此进程在容器中的 PID 不为 1,不能接收 Unix 信号
   因此,当使用 docker stop <container> 命令停止容器时
   此进程接收不到 SIGTERM 信号
   
## 第二种语法格式中的参数是一个 JSON 格式的数组
   其中 <executable> 为要运行的命令
   后面的 <paramN> 为传递给命令的选项或参数
   然而,此种格式指定的命令不会以 “/bin/sh -c” 来发起
   因此常见的 shell 操作如变量替换以及通配符 (?,*) 替换将不会进行
   不过,如果要运行的命令依赖于此 shell 特性的话,可以将其替换为类似下面的格式
   RUN ["/bin/bash", "-c", "<executable>", "<param1>"]

2.3 示例

### 文件准备 ###
[root@Tang imagebuildbusybox]# tree ../imagebuildbusybox/
../imagebuildbusybox/
├── Dockerfile
├── nginx-1.17.6.tar.gz
├── scptext
│   ├── index.html
│   ├── test1.html
│   ├── test2.html
│   └── test3.html
└── volume

2 directories, 6 files
[root@Tang imagebuildbusybox]# cat scptext/index.html 
<h1>Welcome To Tang Web Server</h1>

### Dockerfile 文件查看,进行复制文件,并执行 RUN 命令 ###
[root@Tang imagebuildbusybox]# cat Dockerfile
FROM busybox:latest

LABEL maintainer="Tang <tang@tang.com>"

ENV DOC_ROOT=/data/web/html/ NGINX_TAR=nginx-1.17.6.tar.gz

COPY scptext/ ${
   DOC_ROOT}

WORKDIR ${
   DOC_ROOT}

ADD ${
   NGINX_TAR} ./

EXPOSE 80/tcp

RUN mkdir ${
   DOC_ROOT}/runcommandtest/ \      # \ 是行连接符
	touch ${
   DOC_ROOT}/runcommandtest/runcommandtest.txt 
### 运用 docker image build 生成镜像,使用 -t 打 TAG ###
[root@Tang imagebuildbusybox]# docker image build /root/imagebuildbusybox/ -t mybbx:v1
Sending build context to Docker daemon  1.046MB
Step 1/8 : FROM busybox:latest
 ---> 020584afccce
Step 2/8 : LABEL maintainer="Tang <tang@tang.com>"
 ---> Using cache
 ---> 759a81a473eb
Step 3/8 : ENV DOC_ROOT=/data/web/html/ NGINX_TAR=nginx-1.17.6.tar.gz
 ---> Using cache
 ---> 25567cda2641
Step 4/8 : COPY scptext/ ${
   DOC_ROOT}
 ---> Using cache
 ---> 014a0768fa75
Step 5/8 : WORKDIR ${
   DOC_ROOT}
 ---> Using cache
 ---> b9aa84c47379
Step 6/8 : ADD ${
   NGINX_TAR} ./
 ---> Using cache
 ---> 0c72d71d729c
Step 7/8 : EXPOSE 80/tcp
 ---> Using cache
 ---> d96ab4753618
Step 8/8 : RUN mkdir ${
   DOC_ROOT}/runcommandtest/ 	touch ${
   DOC_ROOT}/runcommandtest/runcommandtest.txt
 ---> Running in e77203d88f40
Removing intermediate container e77203d88f40
 ---> 3be6a547b64a
Successfully built 3be6a547b64a
Successfully tagged mybbx:v1
[root@Tang imagebuildbusybox]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mybbx               v1                  3be6a547b64a        9 seconds ago       7.46MB
nginx               latest              231d40e811cd        6 days ago          126MB
centos              7                   5e35e350aded        2 weeks ago         203MB
busybox             latest              020584afccce        4 weeks ago         1.22MB
### 运行新的容器,并查看目录和创建的文件 ###
[root@Tang imagebuildbusybox]# docker container run --name tangimgtest --rm -it mybbx:v1
/data/web/html # ls
index.html      nginx-1.17.6    runcommandtest  test1.html      test2.html      test3.html      touch
/data/web/html # ll runcommandtest/
sh: ll: not found
/data/web/html # ls runcommandtest/
runcommandtest.txt
/data/web/html # exit

3、CMD 指令

在这里插入图片描述

3.1 介绍

  • 类似于 RUN 指令,CMD 指令也可用于运行任何命令或应用程序,不过,二者的运行时间点不同
  • RUN 指令运行于映像文件构建过程中,而 CMD 指令运行于基于 Dockerfile 构建出的新映像文件启动一个容器时
  • CMD 指令的首要目的在于为启动的容器指定默认要运行的程序,且其运行结束后,容器也将终止;不过, CMD 指定的命令其可以被 docker container run 的命令行选项所覆盖,在 Dockerfile 中可以存在多个CMD指令,但仅最后一个会生效

3.2 语法

# CMD <command>  
# CMD [<executable>",“<param1>","<param2>"]  
# CMD ["<param1>","<param2>"]

	## 前两种语法格式的意义同 RUN
	## 第三种则用于为 ENTRYPOINT 指令提供默认参数
	## json数组中,要使用双引号,单引号会出错

3.3 示例

### Dockerfile 文件查看,执行 CMD 命令 ###
[root@Tang imagebuildbusybox]# pwd
/root/imagebuildbusybox
[root@Tang imagebuildbusybox]# cat Dockerfile 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker Image制作方法有以下两种:使用Docker Container Commit和使用Docker Image BuildDockerfile制作。 如果使用Docker Image BuildDockerfile制作Docker Image,可以按照以下步骤进行操作: 1. 首先,需要在hub.docker.com或cloud.docker.com注册一个账号,并使用`docker login`命令进行登录。 2. 然后,使用`docker image build`命令来构建Image文件。可以使用`-t`参数为Image文件标注用户名、仓库和版本号。例如:`docker image build -t [username]/[repository]:[tag] .`。这样,就会在本地构建一个带有指定用户名、仓库和版本号的Image文件。 3. 最后,使用`docker image push`命令将构建好的Image文件发布到仓库中,供其他人使用。例如:`docker image push [username]/[repository]:[tag]`。 另外,你还可以从Docker官方仓库(https://hub.docker.com/)中抓取Image文件到本地,使用`docker image pull`命令。例如:`docker image pull library/hello-world`。 运行Image文件时,可以使用`docker container run`命令来生成一个正在运行的容器实例。例如:`docker container run hello-world`。注意,运行完后,容器会自动停止,如果想要手动终止不会自动终止的容器,可以使用`docker container kill`命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker Image BuildDockerfile 进行 Docker Image 制作详解制作 Docker Image 方法之二)、...](https://blog.csdn.net/weixin_44983653/article/details/103306038)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [docker的使用](https://blog.csdn.net/gghgrqw/article/details/109448394)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值