如何制作Docker镜像:
您可以采用Dockerfile方式在本地环境中构建Docker镜像:
创建Dockerfile:
$ mkdir project
$ cd project
$ touch Dockerfile
编写Dockerfile:
以MySQL为例,参照Dockerhub 提供的官方Dockerfile,转到github查看详情>>
#选择基础操作系统及版本
FROM debian:stretch-slim
#执行命令修改镜像,用安装库或程序,以及配置程序。执行完一条RUN指令后,Docker引擎会在当前镜像上创建一个新的镜像层,后面会在新的镜像层上执行执行指令
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/*
#设置环境变量
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 \
perl \ && rm -rf /var/lib/apt/lists/*
RUN set -ex; \
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
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 \
&& chmod 777 /var/run/mysqld
#设置卷
VOLUME /var/lib/mysql
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"]
#对外暴露端口
EXPOSE 3306 33060
#设置启动参数
CMD ["mysqld"]
构建镜像
保存好Dockerfile后,请执行docker build在本地构建镜像:
例如:docker build -t="{仓库名称}/{镜像名称}:v1" .
说明:
-t 设置添加 tag,指定新的镜像的用户信息;
“.” 表示当前目录(Dockerfile 所在的目录),也可以替换为具体的 Dockerfile 的路径;
上传镜像
镜像创建成功,您需要将镜像上传CRS的镜像仓库中:
通过页面上传:
先执行docker save命令将镜像保存为TAR格式的本地文件(CRS支持TAR和TAR.GZ格式的镜像文件),然后通过浏览器访问CRS控制台,在页面中手动添加TAR或TAR.GZ文件:
保存镜像为TAR格式的文件:docker save -o 要保存的文件名称.tar 要保存的镜像
压缩镜像并保存为TAR.GZ格式的文件:docker save 要压缩的镜像 | gzip > 要保存的文件名称.tar.gz
导入本地TAR格式文件:docker load < 导入的文件名.tar
导入本地TAR.GZ格式文件:gunzip -c 导入的文件名.tar.gz | docker load
通过客户端上传:
如果通过客户端上传镜像,需要执行
docker tag
该命令为镜像打上标签(如果在构建时已打完标签,可跳过该命令)
然后执行
docker push
该命令将镜像推送到指定的仓库
详细请参考操作指南-客户端上传镜像章节。