DOCKER04_详解Dockerfile基本指令、FROM、LABEL、RUN、CMD、ENTRYPOINT、ARG、ENV、VOLUME、USER(五)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: ⑦. ADD 、COPY 复制文件⑧. WORKDIR 配置工作目录

⑦. ADD 、COPY 复制文件


  • ①. ADD和COPY的功能是一样的,ADD多了自动下载远程文件和解压的功能


# 这是我的第一个dockerfile镜像
FROM alpine
# 把上下文context指定的内容复制到镜像中,如果是压缩包,自动解压,如果是远程文件,自动下载
# 把当前内容复制到alpine小系统里面
ADD https://download.redis.io/releases/redis-6.2.1.tar.gz /dest/
RUN ls -l
# RUN 指令上下并没有上下文关系
RUN cd /dest
# 当前还是列举的跟目录
RUN  ls -l
RUN cd /dest && ls -l


[root@i-id8g0yu9 ~]# docker build --no-cache -t dockerfileadd:v1 -f dockerfileADD .
Sending build context to Docker daemon  27.65kB
Step 1/6 : FROM alpine
 ---> 6dbb9cc54074
Step 2/6 : ADD https://download.redis.io/releases/redis-6.2.1.tar.gz /dest/
Downloading [==================================================>]  2.438MB/2.438MB
 ---> 80aaa61dc520
Step 3/6 : RUN ls -l
 ---> Running in 1acdb19a9af4
total 8
drwxr-xr-x    2 root     root          4096 Apr 14 10:25 bin
drwxr-xr-x    2 root     root            32 Apr 18 12:53 dest
drwxr-xr-x    5 root     root           340 Apr 18 12:53 dev
drwxr-xr-x    1 root     root            66 Apr 18 12:53 etc
drwxr-xr-x    2 root     root             6 Apr 14 10:25 home
drwxr-xr-x    7 root     root           247 Apr 14 10:25 lib
drwxr-xr-x    5 root     root            44 Apr 14 10:25 media
drwxr-xr-x    2 root     root             6 Apr 14 10:25 mnt
drwxr-xr-x    2 root     root             6 Apr 14 10:25 opt
dr-xr-xr-x  114 root     root             0 Apr 18 12:53 proc
drwx------    2 root     root             6 Apr 14 10:25 root
drwxr-xr-x    2 root     root             6 Apr 14 10:25 run
drwxr-xr-x    2 root     root          4096 Apr 14 10:25 sbin
drwxr-xr-x    2 root     root             6 Apr 14 10:25 srv
dr-xr-xr-x   13 root     root             0 Apr 18 12:53 sys
drwxrwxrwt    2 root     root             6 Apr 14 10:25 tmp
drwxr-xr-x    7 root     root            66 Apr 14 10:25 usr
drwxr-xr-x   12 root     root           137 Apr 14 10:25 var
Removing intermediate container 1acdb19a9af4
 ---> aff230b986d5
Step 4/6 : RUN cd /dest
 ---> Running in e154c1af02e8
Removing intermediate container e154c1af02e8
 ---> ef4756ff7262
Step 5/6 : RUN  ls -l
 ---> Running in 32c3f351c176
total 8
drwxr-xr-x    2 root     root          4096 Apr 14 10:25 bin
drwxr-xr-x    2 root     root            32 Apr 18 12:53 dest
drwxr-xr-x    5 root     root           340 Apr 18 12:53 dev
drwxr-xr-x    1 root     root            66 Apr 18 12:53 etc
drwxr-xr-x    2 root     root             6 Apr 14 10:25 home
drwxr-xr-x    7 root     root           247 Apr 14 10:25 lib
drwxr-xr-x    5 root     root            44 Apr 14 10:25 media
drwxr-xr-x    2 root     root             6 Apr 14 10:25 mnt
drwxr-xr-x    2 root     root             6 Apr 14 10:25 opt
dr-xr-xr-x  113 root     root             0 Apr 18 12:53 proc
drwx------    2 root     root             6 Apr 14 10:25 root
drwxr-xr-x    2 root     root             6 Apr 14 10:25 run
drwxr-xr-x    2 root     root          4096 Apr 14 10:25 sbin
drwxr-xr-x    2 root     root             6 Apr 14 10:25 srv
dr-xr-xr-x   13 root     root             0 Apr 18 12:53 sys
drwxrwxrwt    2 root     root             6 Apr 14 10:25 tmp
drwxr-xr-x    7 root     root            66 Apr 14 10:25 usr
drwxr-xr-x   12 root     root           137 Apr 14 10:25 var
Removing intermediate container 32c3f351c176
 ---> c45f1cca41d7
Step 6/6 : RUN cd /dest && ls -l
 ---> Running in c82e471ef25e
total 2384
-rw-------    1 root     root       2438367 Mar  2 06:35 redis-6.2.1.tar.gz
Removing intermediate container c82e471ef25e
 ---> 5ac189b07621
Successfully built 5ac189b07621
Successfully tagged dockerfileadd:v1
[root@i-id8g0yu9 ~]# 


②. 这里能使用docker build -t demo:test .的方式构建,是由于这个Dockerfile的文件在当前目录下,如果不在,那么需要将. 变成指定的文件夹(.代表的是当前上下文坏境)


# 这是我的第一个dockerfile镜像
FROM alpine
# 把上下文context指定的内容复制到镜像中,如果是压缩包,自动解压,如果是远程文件,自动下载
# 把当前内容复制到alpine小系统里面
ADD https://download.redis.io/releases/redis-6.2.1.tar.gz /dest/
# 本地linux系统的内容文件添加进去[宿主机--镜像内]
# docker build -t demo:test  .: .代表当前dockerfile指定的上下文坏境
# 通过执行我们可以看到,redis进行了自动解压的处理
ADD *.tar.gz /app/
# RUN 指令上下并没有上下文关系
RUN cd /dest && ls -l
RUN cd /app && ls -l


[root@i-id8g0yu9 ~]# docker build --no-cache -t dockerfileadd2:v1 -f dockerfileADD2 .
Sending build context to Docker daemon  2.468MB
Step 1/5 : FROM alpine
 ---> 6dbb9cc54074
Step 2/5 : ADD https://download.redis.io/releases/redis-6.2.1.tar.gz /dest/
Downloading [==================================================>]  2.438MB/2.438MB
 ---> b7598fcec68b
Step 3/5 : ADD *.tar.gz /app/
 ---> 9b222d9290b5
Step 4/5 : RUN cd /dest && ls -l
 ---> Running in 4a32a2a9866b
total 2384
-rw-------    1 root     root       2438367 Mar  2 06:35 redis-6.2.1.tar.gz
Removing intermediate container 4a32a2a9866b
 ---> f72d59644485
Step 5/5 : RUN cd /app && ls -l
 ---> Running in 48fe6f35756f
total 4
drwxrwxr-x    7 root     root          4096 Mar  2 06:14 redis-6.2.1
Removing intermediate container 48fe6f35756f
 ---> 762a609e68e9
Successfully built 762a609e68e9
Successfully tagged dockerfileadd2:v1


⑧. WORKDIR 配置工作目录


①. 根目录,WORKDIR指令可在Dockerfile中多次使用。 如果提供了相对路径,则它将相对于上一个WORK DIR指令的路径(如下面的/app/abc是根目录)


FROM alpine
RUN pwd && ls -l
# 为以下所有命令运行指令了基础目录
# /app/abc
WORKDIR /app
# 当我们使用docker exec 进入容器控制台,会发现根目录是 /app/abc
WORKDIR abc
# 复制到当前目录下
COPY *.txt ./
RUN pwd && ls -l
CMD ping baidu.com


[root@i-id8g0yu9 ~]# docker build --no-cache -t dockerfileworkdir:v1 -f dockerfileWORKDIR .
Sending build context to Docker daemon  2.472MB
Step 1/7 : FROM alpine
 ---> 6dbb9cc54074
Step 2/7 : RUN pwd && ls -l
 ---> Running in 7ef554287c6f
/
total 8
drwxr-xr-x    2 root     root          4096 Apr 14 10:25 bin
drwxr-xr-x    5 root     root           340 Apr 18 13:54 dev
drwxr-xr-x    1 root     root            66 Apr 18 13:54 etc
drwxr-xr-x    2 root     root             6 Apr 14 10:25 home
drwxr-xr-x    7 root     root           247 Apr 14 10:25 lib
drwxr-xr-x    5 root     root            44 Apr 14 10:25 media
drwxr-xr-x    2 root     root             6 Apr 14 10:25 mnt
drwxr-xr-x    2 root     root             6 Apr 14 10:25 opt
dr-xr-xr-x  111 root     root             0 Apr 18 13:54 proc
drwx------    2 root     root             6 Apr 14 10:25 root
drwxr-xr-x    2 root     root             6 Apr 14 10:25 run
drwxr-xr-x    2 root     root          4096 Apr 14 10:25 sbin
drwxr-xr-x    2 root     root             6 Apr 14 10:25 srv
dr-xr-xr-x   13 root     root             0 Apr 18 12:58 sys
drwxrwxrwt    2 root     root             6 Apr 14 10:25 tmp
drwxr-xr-x    7 root     root            66 Apr 14 10:25 usr
drwxr-xr-x   12 root     root           137 Apr 14 10:25 var
Removing intermediate container 7ef554287c6f
 ---> 27e092e104fb
Step 3/7 : WORKDIR /app
 ---> Running in ee015d4b2a18
Removing intermediate container ee015d4b2a18
 ---> 4419d4f77345
Step 4/7 : WORKDIR abc
 ---> Running in bc8172263488
Removing intermediate container bc8172263488
 ---> e29383588c07
Step 5/7 : COPY *.txt ./
 ---> 715b2d4db2d9
Step 6/7 : RUN pwd && ls -l
 ---> Running in 5e5c8d7ab9b8
/app/abc
total 4
-rw-r--r--    1 root     root             5 Apr 18 13:46 a.txt
Removing intermediate container 5e5c8d7ab9b8
 ---> d196ffbdf968
Step 7/7 : CMD ping baidu.com
 ---> Running in e0b6b78b1eec
Removing intermediate container e0b6b78b1eec
 ---> a1be08fec3d1
Successfully built a1be08fec3d1
Successfully tagged dockerfileworkdir:v1
[root@i-id8g0yu9 ~]# docker run -d --name myworkdir dockerfileworkdir:v1
b4d8744b6a920fa5eea4b2388ede0e04489905a8449d0c2e40ef8d3d298cfecb
[root@i-id8g0yu9 ~]# docker ps 
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS     NAMES
b4d8744b6a92   dockerfileworkdir:v1   "/bin/sh -c 'ping ba…"   3 seconds ago   Up 3 seconds             myworkdir
[root@i-id8g0yu9 ~]# docker exec -it b4d8744b6a92 /bin/sh
/app/abc #
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
存储 关系型数据库 MySQL
|
2月前
|
存储 应用服务中间件 nginx
Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)
Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)
|
2月前
|
Shell 应用服务中间件 nginx
docker学习--最详细的docker run 各子命令解释与应用
`docker run` 是 Docker 中用于启动容器的基本命令。常用子命令包括 `-i`(交互模式)、`-t`(分配终端)、`-d`(后台运行)、`-p`(端口映射)、`--name`(指定容器名)。例如,`docker run -it nginx:1.20 /bin/bash` 可以创建并进入交互式容器。使用 `-d` 可在后台运行容器,`-p` 可将容器端口映射到主机端口,`--name` 则用于自定义容器名称以便管理。
278 0
|
3月前
|
Docker 容器
docker run
【9月更文挑战第08天】
168 1
|
3月前
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
220 0
|
4月前
|
Docker 容器
在Docker中,Dockerfile有哪些常见指令?
在Docker中,Dockerfile有哪些常见指令?
|
4月前
|
监控 Linux API
在Docker中,docker run指令执行后,生成了哪些进程?
在Docker中,docker run指令执行后,生成了哪些进程?
|
7月前
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
80 0
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
151 0
|
应用服务中间件 Linux Shell
Docker进阶 dockerfile指令构建docker镜像
Docker进阶 Dockerfile指令,编译dockerfile文件构建镜像,dockerfile常用指令,实操训练:Dockerfile构建Nginx镜像: FROM #指定基础镜像,一切从这里开始构建 MAINTAINER #镜像是谁写的,姓名+邮箱 RUN #镜像构建的时候需要运行的命令 ADD #步骤:tomcat镜像,这个tomcat压缩包!添加内容 WORKDIR #镜像的工作目录 VOLUME #挂载的目录 EXPOST #暴露端口配置
Docker进阶 dockerfile指令构建docker镜像