相关文章推荐
行走的弓箭  ·  dockerfile CMD 不生效 ...·  1 月前    · 
睿智的甜瓜  ·  Dockerfile 和 Windows ...·  1 月前    · 
鬼畜的大象  ·  java ...·  8 月前    · 
帅气的佛珠  ·  Github Copilot Chat ...·  1 年前    · 

区别如下

  • CMD命令设置容器启动后默认执行的命令及其参数,当Dockerfile中存在多个CMD命令,只有最后一个会被执行,但CMD设置的命令能够被​ ​docker run​ ​后面的命令行参数覆盖替换
  • ENTRYPOINT配置容器启动时的执行命令,当运行 docker run时指定了其他命令,docker run时指定的命令会追加到ENTRYPOINT配置命令行的参数一起执行。ENTRYPOINT 中的参数始终会被使用,与CMD不同,它不会被替换。

dockerfile CMD命令示例

dockerfile如下
[root@harbor dockerfile]# cat Dockerfile 
FROM busybox:latest
CMD ["cat","/etc/passwd"]
dockerfile构建docker镜像
[root@harbor dockerfile]# docker build -t test:v2 .
Sending build context to Docker daemon 37.38kB
Step 1/2 : FROM busybox:latest
---> beae173ccac6
Step 2/2 : CMD ["cat","/etc/passwd"]
---> Running in 35b6e561dba4
Removing intermediate container 35b6e561dba4
---> 7999820808be
Successfully built 7999820808be
Successfully tagged test:v2
docker run 默认执行CMD命令
[root@harbor dockerfile]# docker run -it test:v2
root:x:0:0:root:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/false
bin:x:2:2:bin:/bin:/bin/false
sys:x:3:3:sys:/dev:/bin/false
sync:x:4:100:sync:/bin:/bin/sync
mail:x:8:8:mail:/var/spool/mail:/bin/false
www-data:x:33:33:www-data:/var/www:/bin/false
operator:x:37:37:Operator:/var:/bin/false
nobody:x:65534:65534:nobody:/home:/bin/false
启动容器时执行ls /etc命令,默认命令被替换
[root@harbor dockerfile]# docker run -it test:v2 ls /etc
group hosts mtab passwd shadow
hostname localtime network resolv.conf

dockerfile ENTRYPOINT命令示例

dockerfile是ENTRYPOINT
[root@harbor dockerfile]# cat Dockerfile 
FROM busybox:latest
ENTRYPOINT ["cat","/etc/passwd"]
构建新的镜像
[root@harbor dockerfile]# docker build -t test:v3 .
Sending build context to Docker daemon 37.38kB
Step 1/2 : FROM busybox:latest
---> beae173ccac6
Step 2/2 : ENTRYPOINT ["cat","/etc/passwd"]
---> Running in 6520ee20042e
Removing intermediate container 6520ee20042e
---> 4e7bde5c63b2
Successfully built 4e7bde5c63b2
Successfully tagged test:v3
docker run时加入新的命令,无法作为ENTRYPOINT参数会报错。
[root@harbor dockerfile]# docker run -it test:v3 ls /etc
root:x:0:0:root:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/false
bin:x:2:2:bin:/bin:/bin/false
sys:x:3:3:sys:/dev:/bin/false
sync:x:4:100:sync:/bin:/bin/sync
mail:x:8:8:mail:/var/spool/mail:/bin/false
www-data:x:33:33:www-data:/var/www:/bin/false
operator:x:37:37:Operator:/var:/bin/false
nobody:x:65534:65534:nobody:/home:/bin/false
cat: can't open 'ls': No such file or directory
cat: read error: Is a directory
docker run时加入新的命令,可以作为ENTRYPOINT参数被执行。
[root@harbor dockerfile]# docker run -it test:v3 /etc/group
root:x:0:0:root:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/false
bin:x:2:2:bin:/bin:/bin/false
sys:x:3:3:sys:/dev:/bin/false
sync:x:4:100:sync:/bin:/bin/sync
mail:x:8:8:mail:/var/spool/mail:/bin/false
www-data:x:33:33:www-data:/var/www:/bin/false
operator:x:37:37:Operator:/var:/bin/false
nobody:x:65534:65534:nobody:/home:/bin/false
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
kmem:x:9:
wheel:x:10:root
cdrom:x:11:
dialout:x:18:
floppy:x:19:
video:x:28:
audio:x:29:
tape:x:32:
www-data:x:33:
operator:x:37:
utmp:x:43:
plugdev:x:46:
staff:x:50:


通过修改my.ini配置文件来解决MySQL 5.6 内存占用过高的问题 打开后台进程发现mysql占用的内存达到400+M。修改一下my.ini这个配置文件的配置选项是可以限制MySQL5.6内存占用过高这一问题的,具体修改选项如下: performance_schema_max_table_instances=400 table_d