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

一 ENTRYPOINT和CMD配置使用

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

1.1 不指定CMD,使用子进程

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

FROM centos:7
LABEL darren darren@gmail.com ENV TZ "Asia/Shanghai" ADD keys.tar.gz /
RUN yum -y install openssh-server \
&& useradd natash \
&& echo "redhat"|passwd --stdin natash \
&& echo "redhat"|passwd --stdin root \
&& ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''\
&& ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' \
&& ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N '' \
&& echo "$TZ"\
&& cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key /tmp/
#ADD keys/ssh_host_ecdsa_key /tmp/ssh_host_ecdsa_key
#ADD keys/ssh_host_ed25519_key /tmp/ssh_host_ed25519_key
#COPY keys/ssh_host_rsa_key /tmp/ssh_host_rsa_key #COPY keys.tar.gz /keys.tar.gz
#RUN tar -zxf /keys.tar.gz && cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key /tmp/
#RUN cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key ./ EXPOSE 22 80
#CMD ["/usr/sbin/sshd", "-D"]
ENTRYPOINT /usr/sbin/sshd
#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

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

修改

FROM centos:7
LABEL darren darren@gmail.com ENV TZ "Asia/Shanghai" ADD keys.tar.gz /
RUN yum -y install openssh-server \
&& useradd natash \
&& echo "redhat"|passwd --stdin natash \
&& echo "redhat"|passwd --stdin root \
&& ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''\
&& ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' \
&& ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N '' \
&& echo "$TZ"\
&& cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key /tmp/
#ADD keys/ssh_host_ecdsa_key /tmp/ssh_host_ecdsa_key
#ADD keys/ssh_host_ed25519_key /tmp/ssh_host_ed25519_key
#COPY keys/ssh_host_rsa_key /tmp/ssh_host_rsa_key #COPY keys.tar.gz /keys.tar.gz
#RUN tar -zxf /keys.tar.gz && cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key /tmp/
#RUN cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key ./ EXPOSE 22 80
#CMD ["/usr/sbin/sshd", "-D"]
ENTRYPOINT ["/usr/sbin/sshd"]
#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

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

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

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

1.3 加上CMD参数执行

FROM centos:7
LABEL darren darren@gmail.com ENV TZ "Asia/Shanghai" ADD keys.tar.gz /
RUN yum -y install openssh-server \
&& useradd natash \
&& echo "redhat"|passwd --stdin natash \
&& echo "redhat"|passwd --stdin root \
&& ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''\
&& ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' \
&& ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N '' \
&& echo "$TZ"\
&& cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key /tmp/
#ADD keys/ssh_host_ecdsa_key /tmp/ssh_host_ecdsa_key
#ADD keys/ssh_host_ed25519_key /tmp/ssh_host_ed25519_key
#COPY keys/ssh_host_rsa_key /tmp/ssh_host_rsa_key #COPY keys.tar.gz /keys.tar.gz
#RUN tar -zxf /keys.tar.gz && cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key /tmp/
#RUN cp /keys/ssh_host_ecdsa_key /keys/ssh_host_ed25519_key /keys/ssh_host_rsa_key ./ EXPOSE 22 80
#CMD ["/usr/sbin/sshd", "-D"]
ENTRYPOINT ["/usr/sbin/sshd"]
CMD ["-D"]
#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

FROM  centos:7

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 EXPOSE 80
CMD ["nginx","-g","daemon off;"]

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

Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos:7
---> 5e35e350aded
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
---> Using cache
---> 6cd0272f03af
Step 3/4 : EXPOSE 80
---> Running in d4b38097012d
Removing intermediate container d4b38097012d
---> 2059882b01c1
Step 4/4 : CMD ["nginx","-g","daemon off;"]
---> Running in 7bb92490efc5
Removing intermediate container 7bb92490efc5
---> 68354cda3d7b
Successfully built 68354cda3d7b
Successfully tagged nginx:v1.1

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

666927b25d2f081ce70aca3719c407cce7db6d2ba200b1241d78bf7455e1dc6b

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

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
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

            "LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "192.168.0.9",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"IPAMConfig": null,
"IPAddress": "192.168.0.9",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,

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

<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>

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

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

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

root          1      0  0 21:10 ?        00:00:00 nginx: master process nginx -g daemon off;
nginx 6 1 0 21:10 ? 00:00:00 nginx: worker process
nginx 7 1 0 21:10 ? 00:00:00 nginx: worker process
nginx 8 1 0 21:10 ? 00:00:00 nginx: worker process
nginx 9 1 0 21:10 ? 00:00:00 nginx: worker process
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

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1/nginx: master pro
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

just a test
[root@666927b25d2f html]# exit
exit

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

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

FROM  centos:7
WORKDIR /usr/share/nginx/html
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 && rm -rf index.html && echo "nginx in custom docker" > index.html EXPOSE 80
CMD ["nginx","-g","daemon off;"]

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

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

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
55645329c490 nginx:v1.2 "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 80/tcp intelligent_carson
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

            "LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "192.168.0.2",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"IPAMConfig": null,
"IPAddress": "192.168.0.2",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"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

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
593a35ccbbf9 nginx:v1.2 "nginx -g 'daemon of…" 11 seconds ago Up 10 seconds 80/tcp cool_clarke
55645329c490 nginx:v1.2 "nginx -g 'daemon of…" 6 minutes ago Up 6 minutes 80/tcp intelligent_carson
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

[root@593a35ccbbf9 html]# env
HOSTNAME=593a35ccbbf9
TERM=xterm
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:
index=docker
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/usr/share/nginx/html
a=b
SHLVL=1
HOME=/root
_=/usr/bin/env

已经传递了参数

2.6 构建ENTRYPOINT使用脚本

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

#!/bin/sh

indexfile=/usr/share/nginx/html/index.html

if [ ! -z "$index" ];then
echo "nginx in $index" > $indexfile
else
echo "just a test" > $indexfile
fi

2.7 修改Dockerfile,添加ENTRYPOINT指令

[root@docker-server3 nginx]# cat Dockerfile

FROM  centos:7
WORKDIR /usr/share/nginx/html
ADD build.sh /build.sh
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 && rm -rf index.html && echo "nginx in custom docker" > index.html && chmod +x /build.sh EXPOSE 80 ENTRYPOINT ["/build.sh"]
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

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
9de02f005f66 nginx:v1.3 "/build.sh nginx -g …" 3 seconds ago Exited (0) 2 seconds ago flamboyant_poincare
593a35ccbbf9 nginx:v1.2 "nginx -g 'daemon of…" 25 minutes ago Up 25 minutes 80/tcp cool_clarke
55645329c490 nginx:v1.2 "nginx -g 'daemon of…" 31 minutes ago Up 31 minutes 80/tcp intelligent_carson
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

#!/bin/sh

indexfile=/usr/share/nginx/html/index.html

if [ ! -z "$index" ];then
echo "nginx in $index" > $indexfile
else
echo "just a test" > $indexfile
fi exec "$@"

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

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

0fef39ec7ffd76bb7b8fb45116be2b3beea08e82c66ffc8fec66d49188f9af11

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

            "LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "192.168.0.4",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"IPAMConfig": null,
"IPAddress": "192.168.0.4",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"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

3b26204c8758cb0b104be1106dd33c2ae29430db3af59e49209cd0357aaae3df

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

            "LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "192.168.0.5",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"IPAMConfig": null,
"IPAddress": "192.168.0.5",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"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

FROM debian:stretch-slim

# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mysql && useradd -r -g mysql mysql RUN apt-get update && apt-get install -y --no-install-recommends gnupg dirmngr && rm -rf /var/lib/apt/lists/* # add gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& gpgconf --kill all \
&& rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true \
&& apt-get purge -y --auto-remove ca-certificates wget RUN mkdir /docker-entrypoint-initdb.d RUN apt-get update && apt-get install -y --no-install-recommends \
# for MYSQL_RANDOM_ROOT_PASSWORD
pwgen \
# for mysql_ssl_rsa_setup
openssl \
# FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db:
# File::Basename
# File::Copy
# Sys::Hostname
# Data::Dumper
perl \
&& rm -rf /var/lib/apt/lists/* RUN set -ex; \
# gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
key='A4A9406876FCBD3C456770C88C718D3B5072E1F5'; \
export GNUPGHOME="$(mktemp -d)"; \
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
gpg --batch --export "$key" > /etc/apt/trusted.gpg.d/mysql.gpg; \
gpgconf --kill all; \
rm -rf "$GNUPGHOME"; \
apt-key list > /dev/null ENV MYSQL_MAJOR 8.0
ENV MYSQL_VERSION 8.0.18-1debian9 RUN echo "deb http://repo.mysql.com/apt/debian/ stretch mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list # 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)
# also, we set debconf keys to make APT a little quieter
RUN { \
echo mysql-community-server mysql-community-server/data-dir select ''; \
echo mysql-community-server mysql-community-server/root-pass password ''; \
echo mysql-community-server mysql-community-server/re-root-pass password ''; \
echo mysql-community-server mysql-community-server/remove-test-db select false; \
} | debconf-set-selections \
&& apt-get update && apt-get install -y mysql-community-client="${MYSQL_VERSION}" mysql-community-server-core="${MYSQL_VERSION}" && rm -rf /var/lib/apt/lists/* \
&& rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld \
&& chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \
# 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
&& chmod 777 /var/run/mysqld VOLUME /var/lib/mysql
# Config files
COPY config/ /etc/mysql/
COPY docker-entrypoint.sh /usr/local/bin/
RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat
ENTRYPOINT ["docker-entrypoint.sh"] #ENTRYPOINT指令 EXPOSE 3306 33060
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. SpringCloud LoadBalancer灰度策略实现

    如何使用 Spring Cloud 2020 中重磅推荐的负载均衡器 Spring Cloud LoadBalancer (下文简称 SCL),如何扩展负载均衡策略? 你将从本文中获取到答案 快速上手 ...

  2. Ugly Numbers UVA - 136

    Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9 ...

  3. 记一次 .NET WPF布草管理系统 挂死分析

    一:背景 1. 讲故事 这几天看的 dump 有点多,有点伤神伤脑,晚上做梦都是dump,今天早上头晕晕的到公司就听到背后同事抱怨他负责的WPF程序挂死了,然后测试的小姑娘也跟着抱怨...嗨,也不知道 ...

  4. gitlab支持https最简单方法

    gitlab支持https方法 使用gitlab内部nginx直接支持https 通过外部nginx代理(本次使用的方法) 访问流程外部nginx--->gitlab的gitlab_workho ...

  5. 12- winmerge讲解

    WinMerge是一款运行于Windows系统下的免费开源的文件比较/合并的工具,使用它可以非常方便的比较多个文档内容设置是文件夹与文件夹之间的差异.适合程序员或者经常撰写文稿的朋友使用.

  6. Python3解决棋盘覆盖问题的方法示例

    本文实例讲述了Python3解决棋盘覆盖问题的方法.分享给大家供大家参考,具体如下: 问题描述: 在2^k*2^k个方格组成的棋盘中,有一个方格被占用,用下图的4种L型骨牌覆盖所有棋盘上的其余所有方格 ...

  7. iOS安全些许经验和学习笔记

    http://bbs.pediy.com/showthread.php?t=209014 标题: [原创]iOS安全些许经验和学习笔记作者: MonkeyKey时间: 2016-03-30,16:32 ...

  8. VRRP中的上层回的路由

    如图,PC1和PC2处于不同网段,他们到AR3都有两条路可以选,现在要让他们到达AR3负载均衡,并且当AR1和 AR2的其中一个路由器挂了之后,他们仍然可以正常到达AR3. 他们去往AR3的VRRP的 ...

  9. Python爬虫 XPath语法和lxml模块

    XPath语法和lxml模块 什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. X ...

  10. js中return;、return true、return false;区别

    一.返回控制与函数结果 语法为:return 表达式 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制 无函数结果,语法为:return; 在大多数情况下,为事件处理函数返 ...