了解Dockerfile
Dockerfile 是一个文本文件,其中包含我们为了构建 Docker 镜像而手动执行的所有命令。
Docker 可以从 Dockerfile 中读取指令来自动构建镜像。我们可以使用 docker build 命令来创建一个自动构建。
命令
基础镜像 -> 启动用户 -> 挂载的目录 -> 启动后运行的命令 -> 暴露的端口
使用 FROM 指令指定一个基础镜像,后续指令将在此镜像的基础上运行。
指定一个用户,后续的 RUN,CMD 以及 ENTRYPOINT 指令都会使用该用户去执行,但是该用户必须提前存在。
使用 WORKDIR 指定工作目录,对于 RUN,CMD,COPY,ADD 指令将会在指定的工作目录中去执行。也可以理解为命令执行时的当前目录。
RUN ,使用 shell 去执行指定的命令 command,一般默认的 shell 为 /bin/sh -c。/ RUN [“executable”, “param1”, “param2”, …],使用可执行的文件或程序 executable,给予相应的参数 param。
COPY 和 ADD 都用于将文件,目录等复制到镜像中。COPY 和 ADD 的不同之处在于,ADD 可以添加远程路径的文件,并且 为可识别的压缩格式,如 gzip 或 tar 归档文件等,ADD 会自动将其解压缩为目录。
ENV 指令用于设置环境变量。
VOLUME 指令将会创建指定的挂载目录,在容器运行时,将创建相应的匿名卷。
EXPOSE 指定在容器运行时监听指定的网络端口,它与 docker run 命令的 -p 参数不一样,并不实际映射端口,只是将该端口暴露出来,允许外部或其它的容器进行访问。
要将容器端口暴露出来,需要在 dcoker run 命令中使用 -p 或者 --publish 参数。如果采用 -P 随机映射端口的方式,Docker 会将在 DockerFile 中声明的所有 EXPOSE 的端口随机映射。
Docker Dockerfile
查看信息
docker history mysql:5.7
IMAGE CREATED CREATED BY SIZE COMMENT
459651132a11 9 days ago /bin/sh -c #(nop) CMD ["mysqld"] 0B
<missing> 9 days ago /bin/sh -c #(nop) EXPOSE 3306 33060 0B
<missing> 9 days ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B
<missing> 9 days ago /bin/sh -c ln -s usr/local/bin/docker-entryp… 34B
<missing> 9 days ago /bin/sh -c #(nop) COPY file:d27cf504fa76fb5a… 13.6kB
<missing> 9 days ago /bin/sh -c #(nop) VOLUME [/var/lib/mysql] 0B
<missing> 9 days ago /bin/sh -c set -eux; yum install -y --setop… 201MB
<missing> 9 days ago /bin/sh -c #(nop) ENV MYSQL_SHELL_VERSION=8… 0B
<missing> 9 days ago /bin/sh -c set -eu; . /etc/os-release; { … 215B
<missing> 9 days ago /bin/sh -c set -eux; yum install -y --setop… 79.2MB
<missing> 9 days ago /bin/sh -c set -eu; . /etc/os-release; { … 225B
<missing> 9 days ago /bin/sh -c #(nop) ENV MYSQL_VERSION=5.7.38-… 0B
<missing> 9 days ago /bin/sh -c #(nop) ENV MYSQL_MAJOR=5.7 0B
<missing> 9 days ago /bin/sh -c set -eux; key='859BE8D7C586F5384… 3.21kB
<missing> 9 days ago /bin/sh -c set -eux; yum install -y --setop… 13.6MB
<missing> 9 days ago /bin/sh -c set -eux; arch="$(uname -m)"; c… 2.31MB
<missing> 9 days ago /bin/sh -c #(nop) ENV GOSU_VERSION=1.14 0B
<missing> 9 days ago /bin/sh -c set -eux; groupadd --system --gi… 2.72kB
<missing> 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:50fb7d83a9d57e5a0… 133MB
docker history mysql:5.7 --no-trunc
IMAGE CREATED CREATED BY SIZE COMMENT
sha256:459651132a1115239f7370765464a0737d028ae7e74c68360740d81751fbae7e 9 days ago /bin/sh -c #(nop) CMD ["mysqld"] 0B
<missing> 9 days ago /bin/sh -c #(nop) EXPOSE 3306 33060 0B
<missing> 9 days ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entrypoint.sh"] 0B
<missing> 9 days ago /bin/sh -c ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat 34B
<missing> 9 days ago /bin/sh -c #(nop) COPY file:d27cf504fa76fb5a4038020a01eaaf52723b17b751566119de311adacb043752 in /usr/local/bin/ 13.6kB
<missing> 9 days ago /bin/sh -c #(nop) VOLUME [/var/lib/mysql] 0B
<missing> 9 days ago /bin/sh -c set -eux; yum install -y --setopt=skip_missing_names_on_install=False "mysql-shell-$MYSQL_SHELL_VERSION"; yum clean all; mysqlsh --version 201MB
<missing> 9 days ago /bin/sh -c #(nop) ENV MYSQL_SHELL_VERSION=8.0.29-1.el7 0B
<missing> 9 days ago /bin/sh -c set -eu; . /etc/os-release; { echo '[mysql-tools-community]'; echo 'name=MySQL Tools Community'; echo "baseurl=https://repo.mysql.com/yum/mysql-tools-community/el/${VERSION_ID%%[.-]*}/\$basearch/"; echo 'enabled=1'; echo 'gpgcheck=1'; echo 'gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql'; echo 'module_hotfixes=true'; } | tee /etc/yum.repos.d/mysql-community-tools.repo 215B
<missing> 9 days ago /bin/sh -c set -eux; yum install -y --setopt=skip_missing_names_on_install=False "mysql-community-server-minimal-$MYSQL_VERSION"; yum clean all; grep -F 'socket=/var/lib/mysql/mysql.sock' /etc/my.cnf; sed -i 's!^socket=.*!socket=/var/run/mysqld/mysqld.sock!' /etc/my.cnf; grep -F 'socket=/var/run/mysqld/mysqld.sock' /etc/my.cnf; { echo '[client]'; echo 'socket=/var/run/mysqld/mysqld.sock'; } >> /etc/my.cnf; ! grep -F '!includedir' /etc/my.cnf; { echo; echo '!includedir /etc/mysql/conf.d/'; } >> /etc/my.cnf; mkdir -p /etc/mysql/conf.d; { echo '!includedir /etc/mysql/mysql.conf.d/'; } >> /etc/my.cnf; mkdir -p /etc/mysql/mysql.conf.d; find /etc/my.cnf /etc/mysql/ -name '*.cnf' -print0 | xargs -0 grep -lZE '^(bind-address|log)' | xargs -rt -0 sed -Ei 's/^(bind-address|log)/#&/'; mkdir -p /var/lib/mysql /var/run/mysqld; chown mysql:mysql /var/lib/mysql /var/run/mysqld; chmod 1777 /var/lib/mysql /var/run/mysqld; mkdir /docker-entrypoint-initdb.d; mysqld --version; mysql --version 79.2MB
<missing> 9 days ago /bin/sh -c set -eu; . /etc/os-release; { echo '[mysql5.7-server-minimal]'; echo 'name=MySQL 5.7 Server Minimal'; echo 'enabled=1'; echo "baseurl=https://repo.mysql.com/yum/mysql-5.7-community/docker/el/${VERSION_ID%%[.-]*}/\$basearch/"; echo 'gpgcheck=1'; echo 'gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql'; echo 'module_hotfixes=true'; } | tee /etc/yum.repos.d/mysql-community-minimal.repo 225B
<missing> 9 days ago /bin/sh -c #(nop) ENV MYSQL_VERSION=5.7.38-1.el7 0B
<missing> 9 days ago /bin/sh -c #(nop) ENV MYSQL_MAJOR=5.7 0B
<missing> 9 days ago /bin/sh -c set -eux; key='859BE8D7C586F538430B19C2467B942D3A79BD29'; export GNUPGHOME="$(mktemp -d)"; gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key"; gpg --batch --export --armor "$key" > /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql; rm -rf "$GNUPGHOME" 3.21kB
<missing> 9 days ago /bin/sh -c set -eux; yum install -y --setopt=skip_missing_names_on_install=False oracle-epel-release-el7; yum install -y --setopt=skip_missing_names_on_install=False bzip2 gzip openssl xz zstd ; yum clean all 13.6MB
<missing> 9 days ago /bin/sh -c set -eux; arch="$(uname -m)"; case "$arch" in aarch64) gosuArch='arm64' ;; x86_64) gosuArch='amd64' ;; *) echo >&2 "error: unsupported architecture: '$arch'"; exit 1 ;; esac; curl -fL -o /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$gosuArch.asc"; curl -fL -o /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$gosuArch"; export GNUPGHOME="$(mktemp -d)"; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; chmod +x /usr/local/bin/gosu; gosu --version; gosu nobody true 2.31MB
<missing> 9 days ago /bin/sh -c #(nop) ENV GOSU_VERSION=1.14 0B
<missing> 9 days ago /bin/sh -c set -eux; groupadd --system --gid 999 mysql; useradd --system --uid 999 --gid 999 --home-dir /var/lib/mysql --no-create-home mysql 2.72kB
<missing> 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:50fb7d83a9d57e5a0a6af5e5daf27e464ae8a28c196ce6bad6c254dfc1774cdd in / 133MB
版权归原作者 喝醉酒的小白 所有, 如有侵权,请联系我们删除。