前面已经介绍了一些Dockerfile的一些指令,对于ENTRYPOINT和CMD也有介绍实验

一 ENTRYPOINT和CMD配置使用

ENTRYPOINT相当于CMD,是配置容器后的一个指令,但是他不会被提docker run供的参数覆盖,每个Dockerfile只能有一个ENTRYPOINT,如果指定了多个,只有最后一个被执行,而且一定会被执行

1.1 不指定CMD,使用子进程

例如,指定ENTRYPOINT,不指定CMD,看效果

  1. FROM centos:7
  2. LABEL darren darren@gmail.com
  3.  
  4. ENV TZ "Asia/Shanghai"
  5.  
  6. ADD keys.tar.gz /
  7. RUN yum -y install openssh-server \
  8. && useradd natash \
  9. && echo "redhat"|passwd --stdin natash \
  10. && echo "redhat"|passwd --stdin root \
  11. && ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''\
  12. && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' \
  13. && ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N '' \
  14. && echo "$TZ"\
  15. && cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key /tmp/
  16. #ADD keys/ssh_host_ecdsa_key /tmp/ssh_host_ecdsa_key
  17. #ADD keys/ssh_host_ed25519_key /tmp/ssh_host_ed25519_key
  18. #COPY keys/ssh_host_rsa_key /tmp/ssh_host_rsa_key
  19.  
  20. #COPY keys.tar.gz /keys.tar.gz
  21. #RUN tar -zxf /keys.tar.gz && cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key /tmp/
  22. #RUN cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key ./
  23.  
  24. EXPOSE 22 80
  25. #CMD ["/usr/sbin/sshd", "-D"]
  26. ENTRYPOINT /usr/sbin/sshd
  27. #CMD /usr/sbin/sshd -D

上面执行之后,我们在运行容器加一个参数-D

[root@docker-server3 openssh]# docker build -t openssh:v1.8 .

[root@docker-server3 openssh]# docker run -d openssh:v1.8 -D

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 601a915564cd openssh:v1.8 "/bin/sh -c /usr/sbi…" 8 seconds ago Exited (0) 6 seconds ago nervous_almeida #没有运行成功
  3. 915f9a1854c6 openssh:v1.7 "/bin/sh -c '/usr/sb…" 22 minutes ago Up 22 minutes 22/tcp, 80/tcp practical_margulis
  4. 131649a5d893 openssh:v1.6 "/usr/sbin/sshd -D" 29 minutes ago Up 29 minutes 22/tcp, 80/tcp zealous_poincare
  5. e0847916fa35 nginx "nginx -g 'daemon of…" 37 minutes ago Up 37 minutes 80/tcp pedantic_blackburn
  6. 41e2d69f3503 openssh:v1.5 "/usr/sbin/sshd -D" 7 hours ago Up 7 hours objective_sinoussi
  7. db351e66fc63 openssh:v1.4 "/usr/sbin/sshd -D" 8 hours ago Up 8 hours nifty_curran
  8. f6a4ebe048cd openssh:v1.4 "/bin/bash" 8 hours ago Exited (0) 8 hours ago adoring_archimedes
  9. fd2c629a2b3c openssh:v1.3 "/usr/sbin/sshd -D" 2 days ago Up 2 days

是因为ENTRYPOINT /usr/sbin/sshd这个语法导致的,这样写,执行的过程是/bin/bash -c "/usr/sbin/sshd"   -D ,是没有办法执行成功的

1.2 直接使用进程

修改

  1. FROM centos:7
  2. LABEL darren darren@gmail.com
  3.  
  4. ENV TZ "Asia/Shanghai"
  5.  
  6. ADD keys.tar.gz /
  7. RUN yum -y install openssh-server \
  8. && useradd natash \
  9. && echo "redhat"|passwd --stdin natash \
  10. && echo "redhat"|passwd --stdin root \
  11. && ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''\
  12. && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' \
  13. && ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N '' \
  14. && echo "$TZ"\
  15. && cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key /tmp/
  16. #ADD keys/ssh_host_ecdsa_key /tmp/ssh_host_ecdsa_key
  17. #ADD keys/ssh_host_ed25519_key /tmp/ssh_host_ed25519_key
  18. #COPY keys/ssh_host_rsa_key /tmp/ssh_host_rsa_key
  19.  
  20. #COPY keys.tar.gz /keys.tar.gz
  21. #RUN tar -zxf /keys.tar.gz && cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key /tmp/
  22. #RUN cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key ./
  23.  
  24. EXPOSE 22 80
  25. #CMD ["/usr/sbin/sshd", "-D"]
  26. ENTRYPOINT ["/usr/sbin/sshd"]
  27. #CMD /usr/sbin/sshd -D

这种写法,容器执行就是/usr/sbin/sshd -D,就可以正常运行了

[root@docker-server3 openssh]# docker build -t openssh:v1.8 .

[root@docker-server3 openssh]# docker run -d openssh:v1.8 -D

[root@docker-server3 openssh]# docker ps -a

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 88396812fa0a openssh:v1.8 "/usr/sbin/sshd -D" 6 seconds ago Up 5 seconds 22/tcp, 80/tcp romantic_allen
  3. 601a915564cd 1613f91bbfb3 "/bin/sh -c /usr/sbi…" 8 minutes ago Exited (0) 8 minutes ago nervous_almeida
  4. 915f9a1854c6 openssh:v1.7 "/bin/sh -c '/usr/sb…" 30 minutes ago Up 30 minutes 22/tcp, 80/tcp practical_margulis
  5. 131649a5d893 openssh:v1.6 "/usr/sbin/sshd -D" 37 minutes ago Up 37 minutes 22/tcp, 80/tcp zealous_poincare
  6. e0847916fa35 nginx "nginx -g 'daemon of…" 46 minutes ago Up 46 minutes 80/tcp pedantic_blackburn
  7. 41e2d69f3503 openssh:v1.5 "/usr/sbin/sshd -D" 7 hours ago Up 7 hours objective_sinoussi
  8. db351e66fc63 openssh:v1.4 "/usr/sbin/sshd -D" 8 hours ago Up 8 hours nifty_curran
  9. f6a4ebe048cd openssh:v1.4 "/bin/bash" 8 hours ago Exited (0) 8 hours ago adoring_archimedes
  10. fd2c629a2b3c openssh:v1.3 "/usr/sbin/sshd -D" 2 days ago Up 2 days

ENTRYPOINT运行在CMD之前,所以必须写在CMD前面

同时,一些容器可以直接添加参数,但是不能使用完整的指令,就是因为生成镜像的时候,直接使用的ENTRYPOINT这个参数

1.3 加上CMD参数执行

  1. FROM centos:7
  2. LABEL darren darren@gmail.com
  3.  
  4. ENV TZ "Asia/Shanghai"
  5.  
  6. ADD keys.tar.gz /
  7. RUN yum -y install openssh-server \
  8. && useradd natash \
  9. && echo "redhat"|passwd --stdin natash \
  10. && echo "redhat"|passwd --stdin root \
  11. && ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''\
  12. && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' \
  13. && ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N '' \
  14. && echo "$TZ"\
  15. && cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key /tmp/
  16. #ADD keys/ssh_host_ecdsa_key /tmp/ssh_host_ecdsa_key
  17. #ADD keys/ssh_host_ed25519_key /tmp/ssh_host_ed25519_key
  18. #COPY keys/ssh_host_rsa_key /tmp/ssh_host_rsa_key
  19.  
  20. #COPY keys.tar.gz /keys.tar.gz
  21. #RUN tar -zxf /keys.tar.gz && cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key /tmp/
  22. #RUN cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key ./
  23.  
  24. EXPOSE 22 80
  25. #CMD ["/usr/sbin/sshd", "-D"]
  26. ENTRYPOINT ["/usr/sbin/sshd"]
  27. CMD ["-D"]
  28. #CMD /usr/sbin/sshd -D

上面的操作,ENTRYPOINT和CMD一个简单的配合使用

二 ENTRYPOINT的高级用法

删掉所有的容器

2.1 写一个简单的nginx的Dockerfile

[root@docker-server3 openssh]# mkdir /nginx

[root@docker-server3 openssh]# cd /nginx

[root@docker-server3 httpd]# vi Dockerfile

  1. FROM centos:7
  2.  
  3. RUN yum install -y wget && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
  4. && yum -y install nginx
  5.  
  6. EXPOSE 80
  7. CMD ["nginx","-g","daemon off;"]

[root@docker-server3 nginx]# docker build -t nginx:v1.1  .

  1. Sending build context to Docker daemon 2.048kB
  2. Step 1/4 : FROM centos:7
  3. ---> 5e35e350aded
  4. Step 2/4 : RUN yum install -y wget && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo && yum -y install nginx
  5. ---> Using cache
  6. ---> 6cd0272f03af
  7. Step 3/4 : EXPOSE 80
  8. ---> Running in d4b38097012d
  9. Removing intermediate container d4b38097012d
  10. ---> 2059882b01c1
  11. Step 4/4 : CMD ["nginx","-g","daemon off;"]
  12. ---> Running in 7bb92490efc5
  13. Removing intermediate container 7bb92490efc5
  14. ---> 68354cda3d7b
  15. Successfully built 68354cda3d7b
  16. Successfully tagged nginx:v1.1

[root@docker-server3 nginx]# docker run -d nginx:v1.1

  1. 666927b25d2f081ce70aca3719c407cce7db6d2ba200b1241d78bf7455e1dc6b

[root@docker-server3 nginx]# docker ps -a

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 666927b25d2f nginx:v1.1 "nginx -g 'daemon of…" 4 seconds ago Up 2 seconds 80/tcp xenodochial_austin

访问这个端口

[root@docker-server3 nginx]# docker inspect 666927b25d2f|grep IP

  1. "LinkLocalIPv6Address": "",
  2. "LinkLocalIPv6PrefixLen": 0,
  3. "SecondaryIPAddresses": null,
  4. "SecondaryIPv6Addresses": null,
  5. "GlobalIPv6Address": "",
  6. "GlobalIPv6PrefixLen": 0,
  7. "IPAddress": "192.168.0.9",
  8. "IPPrefixLen": 24,
  9. "IPv6Gateway": "",
  10. "IPAMConfig": null,
  11. "IPAddress": "192.168.0.9",
  12. "IPPrefixLen": 24,
  13. "IPv6Gateway": "",
  14. "GlobalIPv6Address": "",
  15. "GlobalIPv6PrefixLen": 0,

[root@docker-server3 nginx]# curl http://192.168.0.9

  1. <html>
  2. <head><title>403 Forbidden</title></head>
  3. <body>
  4. <center><h1>403 Forbidden</h1></center>
  5. <hr><center>nginx/1.16.1</center>
  6. </body>
  7. </html>

2.2 出现403错误,进入容器检查

[root@docker-server3 nginx]# docker exec -it 666927b25d2f /bin/bash

[root@666927b25d2f /]# ps -ef|grep nginx

  1. root 1 0 0 21:10 ? 00:00:00 nginx: master process nginx -g daemon off;
  2. nginx 6 1 0 21:10 ? 00:00:00 nginx: worker process
  3. nginx 7 1 0 21:10 ? 00:00:00 nginx: worker process
  4. nginx 8 1 0 21:10 ? 00:00:00 nginx: worker process
  5. nginx 9 1 0 21:10 ? 00:00:00 nginx: worker process
  6. root 25 10 0 21:15 pts/0 00:00:00 grep --color=auto nginx

[root@666927b25d2f /]# yum -y install net-tools

[root@666927b25d2f /]# netstat -ntlp

  1. Active Internet connections (only servers)
  2. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  3. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1/nginx: master pro
  4. tcp6 0 0 :::80 :::* LISTEN 1/nginx: master pro

[root@666927b25d2f /]# cd /usr/share/nginx/html/

[root@666927b25d2f html]# ll

[root@666927b25d2f html]# rm -rf index.html

[root@666927b25d2f html]# echo "just a test" > index.html

[root@666927b25d2f html]# curl http://127.0.0.1

  1. just a test
  2. [root@666927b25d2f html]# exit
  3. exit

[root@docker-server3 nginx]# curl http://192.168.0.9

2.3  根据以上信息修改Dockerfile文件

  1. FROM centos:7
  2. WORKDIR /usr/share/nginx/html
  3. RUN yum install -y wget && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
  4. && yum -y install nginx && rm -rf index.html && echo "nginx in custom docker" > index.html
  5.  
  6. EXPOSE 80
  7. CMD ["nginx","-g","daemon off;"]

[root@docker-server3 nginx]# docker build -t nginx:v1.2 .

[root@docker-server3 nginx]# docker ps -a

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 55645329c490 nginx:v1.2 "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 80/tcp intelligent_carson
  3. 666927b25d2f nginx:v1.1 "nginx -g 'daemon of…" 18 minutes ago Up 18 minutes 80/tcp xenodochial_austin

[root@docker-server3 nginx]# docker inspect 55645329c490|grep IP

  1. "LinkLocalIPv6Address": "",
  2. "LinkLocalIPv6PrefixLen": 0,
  3. "SecondaryIPAddresses": null,
  4. "SecondaryIPv6Addresses": null,
  5. "GlobalIPv6Address": "",
  6. "GlobalIPv6PrefixLen": 0,
  7. "IPAddress": "192.168.0.2",
  8. "IPPrefixLen": 24,
  9. "IPv6Gateway": "",
  10. "IPAMConfig": null,
  11. "IPAddress": "192.168.0.2",
  12. "IPPrefixLen": 24,
  13. "IPv6Gateway": "",
  14. "GlobalIPv6Address": "",
  15. "GlobalIPv6PrefixLen": 0,

[root@docker-server3 nginx]# curl http://192.168.0.2

需求,根据这个基础的ngix镜像,传递不同的参数,使用不同的代码,访问不同的网站

2.4 使用-e传递参数

[root@docker-server3 nginx]# docker run -d -e "index=docker" -e "a=b"  nginx:v1.2

[root@docker-server3 nginx]# docker ps -a

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 593a35ccbbf9 nginx:v1.2 "nginx -g 'daemon of…" 11 seconds ago Up 10 seconds 80/tcp cool_clarke
  3. 55645329c490 nginx:v1.2 "nginx -g 'daemon of…" 6 minutes ago Up 6 minutes 80/tcp intelligent_carson
  4. 666927b25d2f nginx:v1.1 "nginx -g 'daemon of…" 24 minutes ago Up 24 minutes 80/tcp xenodochial_austin

2.5 查看传递参数的效果

[root@docker-server3 nginx]# docker exec -it 593a35ccbbf9 /bin/bash

  1. [root@593a35ccbbf9 html]# env
  2. HOSTNAME=593a35ccbbf9
  3. TERM=xterm
  4. LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
  5. index=docker
  6. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  7. PWD=/usr/share/nginx/html
  8. a=b
  9. SHLVL=1
  10. HOME=/root
  11. _=/usr/bin/env

已经传递了参数

2.6 构建ENTRYPOINT使用脚本

[root@docker-server3 nginx]# vi build.sh

  1. #!/bin/sh
  2.  
  3. indexfile=/usr/share/nginx/html/index.html
  4.  
  5. if [ ! -z "$index" ];then
  6. echo "nginx in $index" > $indexfile
  7. else
  8. echo "just a test" > $indexfile
  9. fi

2.7 修改Dockerfile,添加ENTRYPOINT指令

[root@docker-server3 nginx]# cat Dockerfile

  1. FROM centos:7
  2. WORKDIR /usr/share/nginx/html
  3. ADD build.sh /build.sh
  4. RUN yum install -y wget && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
  5. && yum -y install nginx && rm -rf index.html && echo "nginx in custom docker" > index.html && chmod +x /build.sh
  6.  
  7. EXPOSE 80
  8.  
  9. ENTRYPOINT ["/build.sh"]
  10. CMD ["nginx","-g","daemon off;"]

[root@docker-server3 nginx]# docker build -t nginx:v1.3 .

[root@docker-server3 nginx]# docker run -d nginx:v1.3

[root@docker-server3 nginx]# docker ps -a

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 9de02f005f66 nginx:v1.3 "/build.sh nginx -g …" 3 seconds ago Exited (0) 2 seconds ago flamboyant_poincare
  3. 593a35ccbbf9 nginx:v1.2 "nginx -g 'daemon of…" 25 minutes ago Up 25 minutes 80/tcp cool_clarke
  4. 55645329c490 nginx:v1.2 "nginx -g 'daemon of…" 31 minutes ago Up 31 minutes 80/tcp intelligent_carson
  5. 666927b25d2f nginx:v1.1 "nginx -g 'daemon of…" 49 minutes ago Up 49 minutes 80/tcp xenodochial_austin

这样操作的问题,是因为ENTRYPOINT这个指令存在的时候,CMD就会变成/build.sh脚本的一个参数,但是这个脚本不需要参数,就会错误

2.8 修改build.sh,修正错误后结果

[root@docker-server3 nginx]# vi build.sh

  1. #!/bin/sh
  2.  
  3. indexfile=/usr/share/nginx/html/index.html
  4.  
  5. if [ ! -z "$index" ];then
  6. echo "nginx in $index" > $indexfile
  7. else
  8. echo "just a test" > $indexfile
  9. fi
  10.  
  11. exec "$@"

[root@docker-server3 nginx]# docker build -t nginx:v1.4 .

[root@docker-server3 nginx]# docker run -d nginx:v1.4

  1. 0fef39ec7ffd76bb7b8fb45116be2b3beea08e82c66ffc8fec66d49188f9af11

[root@docker-server3 nginx]# docker inspect 0fef39ec7ffd|grep IP

  1. "LinkLocalIPv6Address": "",
  2. "LinkLocalIPv6PrefixLen": 0,
  3. "SecondaryIPAddresses": null,
  4. "SecondaryIPv6Addresses": null,
  5. "GlobalIPv6Address": "",
  6. "GlobalIPv6PrefixLen": 0,
  7. "IPAddress": "192.168.0.4",
  8. "IPPrefixLen": 24,
  9. "IPv6Gateway": "",
  10. "IPAMConfig": null,
  11. "IPAddress": "192.168.0.4",
  12. "IPPrefixLen": 24,
  13. "IPv6Gateway": "",
  14. "GlobalIPv6Address": "",
  15. "GlobalIPv6PrefixLen": 0,

[root@docker-server3 nginx]# curl http://192.168.0.4

[root@docker-server3 nginx]# docker run -d -e "index=aaa" nginx:v1.4

  1. 3b26204c8758cb0b104be1106dd33c2ae29430db3af59e49209cd0357aaae3df

[root@docker-server3 nginx]# docker inspect 3b26204c8758|grep IP

  1. "LinkLocalIPv6Address": "",
  2. "LinkLocalIPv6PrefixLen": 0,
  3. "SecondaryIPAddresses": null,
  4. "SecondaryIPv6Addresses": null,
  5. "GlobalIPv6Address": "",
  6. "GlobalIPv6PrefixLen": 0,
  7. "IPAddress": "192.168.0.5",
  8. "IPPrefixLen": 24,
  9. "IPv6Gateway": "",
  10. "IPAMConfig": null,
  11. "IPAddress": "192.168.0.5",
  12. "IPPrefixLen": 24,
  13. "IPv6Gateway": "",
  14. "GlobalIPv6Address": "",
  15. "GlobalIPv6PrefixLen": 0,

[root@docker-server3 nginx]# curl http://192.168.0.5

ENTRYPOINT参数介绍到这里,关于dockefile文件的编写学习,可以看官方https://hub.docker.com

2.10 官方Dockerfile介绍

根据官方,看一个mysql的dockerfile文件

https://hub.docker.com/_/mysql

点击会得到一个连接

进入,得到官方的DOCKERFILE

https://github.com/docker-library/mysql/blob/6659750146b7a6b91a96c786729b4d482cf49fe6/8.0/Dockerfile

  1. FROM debian:stretch-slim
  2.  
  3. # add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
  4. RUN groupadd -r mysql && useradd -r -g mysql mysql
  5.  
  6. RUN apt-get update && apt-get install -y --no-install-recommends gnupg dirmngr && rm -rf /var/lib/apt/lists/*
  7.  
  8. # add gosu for easy step-down from root
  9. ENV GOSU_VERSION 1.7
  10. RUN set -x \
  11. && apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
  12. && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
  13. && wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
  14. && export GNUPGHOME="$(mktemp -d)" \
  15. && gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
  16. && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
  17. && gpgconf --kill all \
  18. && rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc \
  19. && chmod +x /usr/local/bin/gosu \
  20. && gosu nobody true \
  21. && apt-get purge -y --auto-remove ca-certificates wget
  22.  
  23. RUN mkdir /docker-entrypoint-initdb.d
  24.  
  25. RUN apt-get update && apt-get install -y --no-install-recommends \
  26. # for MYSQL_RANDOM_ROOT_PASSWORD
  27. pwgen \
  28. # for mysql_ssl_rsa_setup
  29. openssl \
  30. # FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db:
  31. # File::Basename
  32. # File::Copy
  33. # Sys::Hostname
  34. # Data::Dumper
  35. perl \
  36. && rm -rf /var/lib/apt/lists/*
  37.  
  38. RUN set -ex; \
  39. # gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
  40. key='A4A9406876FCBD3C456770C88C718D3B5072E1F5'; \
  41. export GNUPGHOME="$(mktemp -d)"; \
  42. gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
  43. gpg --batch --export "$key" > /etc/apt/trusted.gpg.d/mysql.gpg; \
  44. gpgconf --kill all; \
  45. rm -rf "$GNUPGHOME"; \
  46. apt-key list > /dev/null
  47.  
  48. ENV MYSQL_MAJOR 8.0
  49. ENV MYSQL_VERSION 8.0.18-1debian9
  50.  
  51. RUN echo "deb http://repo.mysql.com/apt/debian/ stretch mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list
  52.  
  53. # the "/var/lib/mysql" stuff here is because the mysql-server postinst doesn't have an explicit way to disable the mysql_install_db codepath besides having a database already "configured" (ie, stuff in /var/lib/mysql/mysql)
  54. # also, we set debconf keys to make APT a little quieter
  55. RUN { \
  56. echo mysql-community-server mysql-community-server/data-dir select ''; \
  57. echo mysql-community-server mysql-community-server/root-pass password ''; \
  58. echo mysql-community-server mysql-community-server/re-root-pass password ''; \
  59. echo mysql-community-server mysql-community-server/remove-test-db select false; \
  60. } | debconf-set-selections \
  61. && apt-get update && apt-get install -y mysql-community-client="${MYSQL_VERSION}" mysql-community-server-core="${MYSQL_VERSION}" && rm -rf /var/lib/apt/lists/* \
  62. && rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld \
  63. && chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \
  64. # ensure that /var/run/mysqld (used for socket and lock files) is writable regardless of the UID our mysqld instance ends up having at runtime
  65. && chmod 777 /var/run/mysqld
  66.  
  67. VOLUME /var/lib/mysql
  68. # Config files
  69. COPY config/ /etc/mysql/
  70. COPY docker-entrypoint.sh /usr/local/bin/
  71. RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat
  72. ENTRYPOINT ["docker-entrypoint.sh"] #ENTRYPOINT指令
  73.  
  74. EXPOSE 3306 33060
  75. CMD ["mysqld"]

https://github.com/docker-library/mysql/tree/6659750146b7a6b91a96c786729b4d482cf49fe6/8.0

查看docker-entrypoint.sh

https://github.com/docker-library/mysql/blob/6659750146b7a6b91a96c786729b4d482cf49fe6/8.0/docker-entrypoint.sh

Dockerfile学习到这里


博主声明:本文的内容来源主要来自誉天教育晏威老师,由本人实验完成操作验证,需要的博友请联系誉天教育(http://www.yutianedu.com/),获得官方同意或者晏老师(https://www.cnblogs.com/breezey/)本人同意即可转载,谢谢!

DOCKER学习_013:Dockerfile配置指令ENTRYPOINT详解的更多相关文章

  1. DOCKER学习_012:Dockerfile配置指令详解

    1 Dockerfile结构 基础镜像信息 镜像操作指令 容器启动时执行指令 2 FROM 指定基础镜像,用于继承其他镜像使用的 FROM ubuntu:14.06 FROM centos FROM ...

  2. [转帖]Docker学习之Dockerfile命令详解

    Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...

  3. CentOS 6.3下Samba服务器的安装与配置方法(图文详解)

    这篇文章主要介绍了CentOS 6.3下Samba服务器的安装与配置方法(图文详解),需要的朋友可以参考下   一.简介  Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件, ...

  4. Eclipse进行C/C++开发——Eclipse+CDT+MinGW的配置与使用详解

    http://hi.baidu.com/ltb6w/item/3a51f11926fda60ce75c361d Eclipse进行C/C++开发——Eclipse+CDT+MinGW的配置与使用详解 ...

  5. SSI指令使用详解(转)

    什么是 SHTML使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为“服务器端嵌入”或者叫“服务器端包含”,是一种类似 ...

  6. ASP.NET MVC 5 学习教程:生成的代码详解

    原文 ASP.NET MVC 5 学习教程:生成的代码详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...

  7. MySql绿色版配置及使用详解

    原文:MySql绿色版配置及使用详解 最近在做项目开发时用到了MySql数据库,在看了一些有关MySql的文章后,很快就上手使用了.在使用的过程中还是出现了一些问题,因为使用的是绿色免安装版的MySq ...

  8. 全网最详细的Windows系统里PLSQL Developer 64bit安装之后的一些配置(图文详解)

    不多说,直接上干货! 注意的是: 本地若没有安装Oracle服务端,Oracle server服务端64位,是远程连接,因此本地配置PLSQL Developer64位. PLSQL Develope ...

  9. java环境配置及原理详解

    java环境配置及原理详解 1.java跨平台的本质 我们谈到java,总是提到跨平台这个词.那么java语言是怎么实现跨平台的呢? 我们编写的java代码不是直接让windows系统读取解析,而是在 ...

随机推荐

  1. 【Prolog - 1.0 基础语法与概念】

    [概述] Prolog的语法与其它常用语言(如C,JAVA等)不同,它更接近于自然语言. [实例] 当我想表示"Mia是以女人"这个事实(之后会提到事实这个概念)的时候,我可以这么 ...

  2. 结对编程-stage_2

    教学班 罗杰.任建班周五3.4节 gitlab项目地址 Here it is. 成员 周远航(3004) 李辰洋(3477) 结对编程体验 经过了上一阶段的磨合,第二阶段我们的配合更加流畅,也熟悉了对 ...

  3. BUAA_OS lab2 难点梳理

    BUAA_OS lab2 难点梳理 实验重点 所列出的实验重点为笔者在进行lab2过程中认为需要深刻理解的部分. 进行内存访问的流程 熟悉mips内存映射布局,即理解mmu.h内图 二级页表的理解和实 ...

  4. Centos下搭建LAMP+PHP

    Centos下搭建LAMP+PHP LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写: Linux,操作系统 Apache,网页服务器 MariaDB或MySQL,数据库管 ...

  5. css详解background八大属性及其含义

    background(背景) 以前笔者在css盒模型以及如何计算盒子的宽度一文中提到过盒模型可以看成由 元素外边距(margin).元素边框(border).元素内边距(padding)和元素内容(c ...

  6. inline&register

    inline关键字: 内联只是一个请求,不代表编译器会响应:同时某些编译器会将一些函数优化成为内联函数. C++在类内定义的函数默认是内联函数,具体是否真变成内联函数还需看编译器本身. registe ...

  7. C/C++中的字符串相关姿势

    这是我在<程序设计实习>课程上作的pre,目标是对C/C++中字符串的相关内容作一个尽量完整的介绍.(对于OIer可能不太实用) 课件链接: https://files.cnblogs.c ...

  8. Dropping Balls UVA - 679

      A number of K balls are dropped one by one from the root of a fully binary tree structure FBT. Eac ...

  9. Day11_52_将Set集合转换为List集合

    Set集合转换为List集合 ``` import java.util.*; public class SetReverseLsit { public static void main(String[ ...

  10. String a=new String("abc")创建了几个对象

    String str=new String("abc");   紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢? 相信大家对这道题并不陌生,答案 ...