diff --git a/README.md b/README.md index a89308e..bf36413 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ * pdf 版本 [下载](https://www.gitbook.com/download/pdf/book/yeasy/docker_practice) * epub 版本 [下载](https://www.gitbook.com/download/epub/book/yeasy/docker_practice) -Docker 自身仍在快速发展中,生态环境也在蓬勃成长。欢迎参与维护项目:[如何贡献](contribute.md)。 +Docker 自身仍在快速发展中,生态环境也在蓬勃成长。建议初学者使用 Linux 上最新版的 Docker (v17.10.0)进行学习实践。欢迎参与维护项目:[如何贡献](contribute.md)。 * [修订记录](revision.md) * [贡献者名单](https://github.com/yeasy/docker_practice/graphs/contributors) diff --git a/SUMMARY.md b/SUMMARY.md index 3489ec7..88529c8 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -82,7 +82,7 @@ * [容器格式](underly/container_format.md) * [网络](underly/network.md) * [Docker 三剑客之 Compose 项目](compose/README.md) - * [简介](compose/intro.md) + * [简介](compose/introduction.md) * [安装与卸载](compose/install.md) * [使用](compose/usage.md) * [命令说明](compose/commands.md) diff --git a/appendix/repo/centos.md b/appendix/repo/centos.md index a17b2f5..aa65fe8 100644 --- a/appendix/repo/centos.md +++ b/appendix/repo/centos.md @@ -15,46 +15,4 @@ bash-4.2# ### Dockerfile -#### CentOS 5 版本 -``` -FROM scratch -MAINTAINER The CentOS Project -ADD c5-docker.tar.xz / -LABEL name="CentOS Base Image" \ - vendor="CentOS" \ - license="GPLv2" \ - build-date="2016-03-31" - -# Default command -CMD ["/bin/bash"] -``` - -#### CentOS 6 版本 -``` -FROM scratch -MAINTAINER https://github.com/CentOS/sig-cloud-instance-images -ADD centos-6-docker.tar.xz / - -LABEL name="CentOS Base Image" \ - vendor="CentOS" \ - license="GPLv2" \ - build-date="20160729" - -CMD ["/bin/bash"] -``` - -#### CentOS 7 版本 -``` -FROM scratch -MAINTAINER https://github.com/CentOS/sig-cloud-instance-images -ADD centos-7-docker.tar.xz / - -LABEL name="CentOS Base Image" \ - vendor="CentOS" \ - license="GPLv2" \ - build-date="20160729" - -CMD ["/bin/bash"] -``` - - +请到 https://github.com/docker-library/docs/tree/master/centos 查看。 diff --git a/appendix/repo/mongodb.md b/appendix/repo/mongodb.md index 47304e8..e2a0ee1 100644 --- a/appendix/repo/mongodb.md +++ b/appendix/repo/mongodb.md @@ -26,239 +26,4 @@ $ docker run -it --link some-mongo:mongo --rm mongo sh -c 'exec mongo "$MONGO_PO ### Dockerfile -#### 2.6 版本 -``` -FROM debian:wheezy - -# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added -RUN groupadd -r mongodb && useradd -r -g mongodb mongodb - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - ca-certificates wget \ - numactl \ - && rm -rf /var/lib/apt/lists/* - -# grab gosu for easy step-down from root -ENV GOSU_VERSION 1.7 -RUN set -x \ - && 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 --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ - && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ - && rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \ - && chmod +x /usr/local/bin/gosu \ - && gosu nobody true - -ENV MONGO_VERSION 2.6.12 - -RUN set -x \ - && wget -O mongo.tgz "https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-$MONGO_VERSION.tgz" \ - && wget -O mongo.tgz.sig "https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-$MONGO_VERSION.tgz.sig" \ - && export GNUPGHOME="$(mktemp -d)" \ - && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys DFFA3DCF326E302C4787673A01C4E7FAAAB2461C \ - && gpg --batch --verify mongo.tgz.sig mongo.tgz \ - && rm -r "$GNUPGHOME" mongo.tgz.sig \ - && tar -xvf mongo.tgz -C /usr/local --strip-components=1 \ - && rm mongo.tgz - -RUN mkdir -p /data/db /data/configdb \ - && chown -R mongodb:mongodb /data/db /data/configdb -VOLUME /data/db /data/configdb - -COPY docker-entrypoint.sh /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] - -EXPOSE 27017 -CMD ["mongod"] -``` - -#### 3.0 版本 -``` -FROM debian:wheezy - -# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added -RUN groupadd -r mongodb && useradd -r -g mongodb mongodb - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - numactl \ - && rm -rf /var/lib/apt/lists/* - -# grab 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 --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ - && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ - && rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \ - && chmod +x /usr/local/bin/gosu \ - && gosu nobody true \ - && apt-get purge -y --auto-remove ca-certificates wget - -# gpg: key 7F0CEB10: public key "Richard Kreuter " imported -RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 492EAFE8CD016A07919F1D2B9ECBEC467F0CEB10 - -ENV MONGO_MAJOR 3.0 -ENV MONGO_VERSION 3.0.12 - -RUN echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/$MONGO_MAJOR main" > /etc/apt/sources.list.d/mongodb-org.list - -RUN set -x \ - && apt-get update \ - && apt-get install -y \ - mongodb-org=$MONGO_VERSION \ - mongodb-org-server=$MONGO_VERSION \ - mongodb-org-shell=$MONGO_VERSION \ - mongodb-org-mongos=$MONGO_VERSION \ - mongodb-org-tools=$MONGO_VERSION \ - && rm -rf /var/lib/apt/lists/* \ - && rm -rf /var/lib/mongodb \ - && mv /etc/mongod.conf /etc/mongod.conf.orig - -RUN mkdir -p /data/db /data/configdb \ - && chown -R mongodb:mongodb /data/db /data/configdb -VOLUME /data/db /data/configdb - -COPY docker-entrypoint.sh /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] - -EXPOSE 27017 -CMD ["mongod"] -``` - -#### 3.2 版本 - -``` -FROM debian:wheezy - -# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added -RUN groupadd -r mongodb && useradd -r -g mongodb mongodb - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - numactl \ - && rm -rf /var/lib/apt/lists/* - -# grab 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 --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ - && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ - && rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \ - && chmod +x /usr/local/bin/gosu \ - && gosu nobody true \ - && apt-get purge -y --auto-remove ca-certificates wget - -# pub 4096R/AAB2461C 2014-02-25 [expires: 2016-02-25] -# Key fingerprint = DFFA 3DCF 326E 302C 4787 673A 01C4 E7FA AAB2 461C -# uid MongoDB 2.6 Release Signing Key -# -# pub 4096R/EA312927 2015-10-09 [expires: 2017-10-08] -# Key fingerprint = 42F3 E95A 2C4F 0827 9C49 60AD D68F A50F EA31 2927 -# uid MongoDB 3.2 Release Signing Key -# -ENV GPG_KEYS \ - DFFA3DCF326E302C4787673A01C4E7FAAAB2461C \ - 42F3E95A2C4F08279C4960ADD68FA50FEA312927 -RUN set -ex \ - && for key in $GPG_KEYS; do \ - apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ - done - -ENV MONGO_MAJOR 3.2 -ENV MONGO_VERSION 3.2.8 - -RUN echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/$MONGO_MAJOR main" > /etc/apt/sources.list.d/mongodb-org.list - -RUN set -x \ - && apt-get update \ - && apt-get install -y \ - mongodb-org=$MONGO_VERSION \ - mongodb-org-server=$MONGO_VERSION \ - mongodb-org-shell=$MONGO_VERSION \ - mongodb-org-mongos=$MONGO_VERSION \ - mongodb-org-tools=$MONGO_VERSION \ - && rm -rf /var/lib/apt/lists/* \ - && rm -rf /var/lib/mongodb \ - && mv /etc/mongod.conf /etc/mongod.conf.orig - -RUN mkdir -p /data/db /data/configdb \ - && chown -R mongodb:mongodb /data/db /data/configdb -VOLUME /data/db /data/configdb - -COPY docker-entrypoint.sh /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] - -EXPOSE 27017 -CMD ["mongod"] -``` - -#### 3.3 版本 - -``` -FROM debian:jessie - -# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added -RUN groupadd -r mongodb && useradd -r -g mongodb mongodb - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - numactl \ - && rm -rf /var/lib/apt/lists/* - -# grab 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 --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ - && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ - && rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \ - && chmod +x /usr/local/bin/gosu \ - && gosu nobody true \ - && apt-get purge -y --auto-remove ca-certificates wget - -# pub 4096R/A15703C6 2016-01-11 [expires: 2018-01-10] -# Key fingerprint = 0C49 F373 0359 A145 1858 5931 BC71 1F9B A157 03C6 -# uid MongoDB 3.4 Release Signing Key -RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 0C49F3730359A14518585931BC711F9BA15703C6 - -ENV MONGO_MAJOR 3.3 -ENV MONGO_VERSION 3.3.10 - -RUN echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/$MONGO_MAJOR main" > /etc/apt/sources.list.d/mongodb-org.list - -RUN set -x \ - && apt-get update \ - && apt-get install -y \ - mongodb-org-unstable=$MONGO_VERSION \ - mongodb-org-unstable-server=$MONGO_VERSION \ - mongodb-org-unstable-shell=$MONGO_VERSION \ - mongodb-org-unstable-mongos=$MONGO_VERSION \ - mongodb-org-unstable-tools=$MONGO_VERSION \ - && rm -rf /var/lib/apt/lists/* \ - && rm -rf /var/lib/mongodb \ - && mv /etc/mongod.conf /etc/mongod.conf.orig - -RUN mkdir -p /data/db /data/configdb \ - && chown -R mongodb:mongodb /data/db /data/configdb -VOLUME /data/db /data/configdb - -COPY docker-entrypoint.sh /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] - -EXPOSE 27017 -CMD ["mongod"] -``` - +请到 https://github.com/docker-library/docs/tree/master/mongo 查看。 diff --git a/appendix/repo/mysql.md b/appendix/repo/mysql.md index 58f22f3..3d296c4 100644 --- a/appendix/repo/mysql.md +++ b/appendix/repo/mysql.md @@ -23,104 +23,5 @@ $ docker run -it --link some-mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_ ``` ### Dockerfile -#### 5.6 版本 -``` -FROM debian:wheezy - -# 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 - -# 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 -RUN apt-get update && apt-get install -y perl --no-install-recommends && rm -rf /var/lib/apt/lists/* - -# mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory -RUN apt-get update && apt-get install -y libaio1 && rm -rf /var/lib/apt/lists/* - -# gpg: key 5072E1F5: public key "MySQL Release Engineering " imported -RUN gpg --keyserver pgp.mit.edu --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5 - -ENV MYSQL_MAJOR 5.6 -ENV MYSQL_VERSION 5.6.20 - -# note: we're pulling the *.asc file from mysql.he.net instead of dev.mysql.com because the official mirror 404s that file for whatever reason - maybe it's at a different path? -RUN apt-get update && apt-get install -y curl --no-install-recommends && rm -rf /var/lib/apt/lists/* \ - && curl -SL "http://dev.mysql.com/get/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz" -o mysql.tar.gz \ - && curl -SL "http://mysql.he.net/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz.asc" -o mysql.tar.gz.asc \ - && apt-get purge -y --auto-remove curl \ - && gpg --verify mysql.tar.gz.asc \ - && mkdir /usr/local/mysql \ - && tar -xzf mysql.tar.gz -C /usr/local/mysql --strip-components=1 \ - && rm mysql.tar.gz* \ - && rm -rf /usr/local/mysql/mysql-test /usr/local/mysql/sql-bench \ - && rm -rf /usr/local/mysql/bin/*-debug /usr/local/mysql/bin/*_embedded \ - && find /usr/local/mysql -type f -name "*.a" -delete \ - && apt-get update && apt-get install -y binutils && rm -rf /var/lib/apt/lists/* \ - && { find /usr/local/mysql -type f -executable -exec strip --strip-all '{}' + || true; } \ - && apt-get purge -y --auto-remove binutils -ENV PATH $PATH:/usr/local/mysql/bin:/usr/local/mysql/scripts - -WORKDIR /usr/local/mysql -VOLUME /var/lib/mysql - -COPY docker-entrypoint.sh /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] - -EXPOSE 3306 -CMD ["mysqld", "--datadir=/var/lib/mysql", "--user=mysql"] -``` - -#### 5.7 版本 -``` -FROM debian:wheezy - -# 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 - -# 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 -RUN apt-get update && apt-get install -y perl --no-install-recommends && rm -rf /var/lib/apt/lists/* - -# mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory -RUN apt-get update && apt-get install -y libaio1 && rm -rf /var/lib/apt/lists/* - -# gpg: key 5072E1F5: public key "MySQL Release Engineering " imported -RUN gpg --keyserver pgp.mit.edu --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5 - -ENV MYSQL_MAJOR 5.7 -ENV MYSQL_VERSION 5.7.4-m14 - -# note: we're pulling the *.asc file from mysql.he.net instead of dev.mysql.com because the official mirror 404s that file for whatever reason - maybe it's at a different path? -RUN apt-get update && apt-get install -y curl --no-install-recommends && rm -rf /var/lib/apt/lists/* \ - && curl -SL "http://dev.mysql.com/get/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz" -o mysql.tar.gz \ - && curl -SL "http://mysql.he.net/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz.asc" -o mysql.tar.gz.asc \ - && apt-get purge -y --auto-remove curl \ - && gpg --verify mysql.tar.gz.asc \ - && mkdir /usr/local/mysql \ - && tar -xzf mysql.tar.gz -C /usr/local/mysql --strip-components=1 \ - && rm mysql.tar.gz* \ - && rm -rf /usr/local/mysql/mysql-test /usr/local/mysql/sql-bench \ - && rm -rf /usr/local/mysql/bin/*-debug /usr/local/mysql/bin/*_embedded \ - && find /usr/local/mysql -type f -name "*.a" -delete \ - && apt-get update && apt-get install -y binutils && rm -rf /var/lib/apt/lists/* \ - && { find /usr/local/mysql -type f -executable -exec strip --strip-all '{}' + || true; } \ - && apt-get purge -y --auto-remove binutils -ENV PATH $PATH:/usr/local/mysql/bin:/usr/local/mysql/scripts - -WORKDIR /usr/local/mysql -VOLUME /var/lib/mysql - -COPY docker-entrypoint.sh /entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] - -EXPOSE 3306 -CMD ["mysqld", "--datadir=/var/lib/mysql", "--user=mysql"] -``` - +请到 https://github.com/docker-library/docs/tree/master/mysql 查看 diff --git a/appendix/repo/nginx.md b/appendix/repo/nginx.md index 62455d2..257e600 100644 --- a/appendix/repo/nginx.md +++ b/appendix/repo/nginx.md @@ -37,67 +37,5 @@ docker run --name some-nginx -v /some/nginx.conf:/etc/nginx/nginx.conf:ro -d ngi 使用配置文件时,为了在容器中正常运行,需要保持 `daemon off;`。 ### Dockerfile -#### stable 版本 -``` -FROM debian:jessie - -MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com" - -ENV NGINX_VERSION 1.10.1-1~jessie - -RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \ - && echo "deb http://nginx.org/packages/debian/ jessie nginx" >> /etc/apt/sources.list \ - && apt-get update \ - && apt-get install --no-install-recommends --no-install-suggests -y \ - ca-certificates \ - nginx=${NGINX_VERSION} \ - nginx-module-xslt \ - nginx-module-geoip \ - nginx-module-image-filter \ - nginx-module-perl \ - nginx-module-njs \ - gettext-base \ - && rm -rf /var/lib/apt/lists/* - -# forward request and error logs to docker log collector -RUN ln -sf /dev/stdout /var/log/nginx/access.log \ - && ln -sf /dev/stderr /var/log/nginx/error.log - -EXPOSE 80 443 - -CMD ["nginx", "-g", "daemon off;"] -``` - -#### 1.11.x 版本 - -``` -FROM debian:jessie - -MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com" - -ENV NGINX_VERSION 1.11.1-1~jessie - -RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \ - && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \ - && apt-get update \ - && apt-get install --no-install-recommends --no-install-suggests -y \ - ca-certificates \ - nginx=${NGINX_VERSION} \ - nginx-module-xslt \ - nginx-module-geoip \ - nginx-module-image-filter \ - nginx-module-perl \ - nginx-module-njs \ - gettext-base \ - && rm -rf /var/lib/apt/lists/* - -# forward request and error logs to docker log collector -RUN ln -sf /dev/stdout /var/log/nginx/access.log \ - && ln -sf /dev/stderr /var/log/nginx/error.log - -EXPOSE 80 443 - -CMD ["nginx", "-g", "daemon off;"] -``` - +请到 https://github.com/docker-library/docs/tree/master/nginx 查看。 diff --git a/appendix/repo/nodejs.md b/appendix/repo/nodejs.md index a2993b0..58d1d10 100644 --- a/appendix/repo/nodejs.md +++ b/appendix/repo/nodejs.md @@ -28,124 +28,4 @@ $ docker run -it --rm --name my-running-script -v "$(pwd)":/usr/src/myapp -w /us ### Dockerfile -#### 0.10 版本 -``` -FROM buildpack-deps - -RUN apt-get update && apt-get install -y \ - ca-certificates \ - curl - -# verify gpg and sha256: http://nodejs.org/dist/v0.10.31/SHASUMS256.txt.asc -# gpg: aka "Timothy J Fontaine (Work) " -RUN gpg --keyserver pgp.mit.edu --recv-keys 7937DFD2AB06298B2293C3187D33FF9D0246406D - -ENV NODE_VERSION 0.10.32 - -RUN curl -SLO "http://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" \ - && curl -SLO "http://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ - && gpg --verify SHASUMS256.txt.asc \ - && grep " node-v$NODE_VERSION-linux-x64.tar.gz\$" SHASUMS256.txt.asc | sha256sum -c - \ - && tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 \ - && rm "node-v$NODE_VERSION-linux-x64.tar.gz" SHASUMS256.txt.asc - -CMD [ "node" ] -``` - -#### 4.x 版本 -``` -FROM buildpack-deps:jessie - -# gpg keys listed at https://github.com/nodejs/node -RUN set -ex \ - && for key in \ - 9554F04D7259F04124DE6B476D5A82AC7E37093B \ - 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ - 0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \ - FD3A5288F042B6850C66B31F09FE44734EB7990E \ - 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ - DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ - B9AE9905FFD7803F25714661B63B535A4C206CA9 \ - C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ - ; do \ - gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ - done - -ENV NPM_CONFIG_LOGLEVEL info -ENV NODE_VERSION 4.4.7 - -RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \ - && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ - && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ - && grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ - && tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \ - && rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt - -CMD [ "node" ] -``` - -#### 5.x 版本 - -``` -FROM buildpack-deps:jessie - -# gpg keys listed at https://github.com/nodejs/node -RUN set -ex \ - && for key in \ - 9554F04D7259F04124DE6B476D5A82AC7E37093B \ - 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ - 0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \ - FD3A5288F042B6850C66B31F09FE44734EB7990E \ - 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ - DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ - B9AE9905FFD7803F25714661B63B535A4C206CA9 \ - C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ - ; do \ - gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ - done - -ENV NPM_CONFIG_LOGLEVEL info -ENV NODE_VERSION 5.12.0 - -RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \ - && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ - && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ - && grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ - && tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \ - && rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt - -CMD [ "node" ] -``` - -#### 6.x 版本 -``` -FROM buildpack-deps:jessie - -# gpg keys listed at https://github.com/nodejs/node -RUN set -ex \ - && for key in \ - 9554F04D7259F04124DE6B476D5A82AC7E37093B \ - 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ - 0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \ - FD3A5288F042B6850C66B31F09FE44734EB7990E \ - 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ - DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ - B9AE9905FFD7803F25714661B63B535A4C206CA9 \ - C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ - ; do \ - gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ - done - -ENV NPM_CONFIG_LOGLEVEL info -ENV NODE_VERSION 6.3.1 - -RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \ - && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ - && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ - && grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ - && tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \ - && rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt - -CMD [ "node" ] -``` - +请到 https://github.com/docker-library/docs/tree/master/node 查看。 diff --git a/appendix/repo/redis.md b/appendix/repo/redis.md index a3771e6..675c48b 100644 --- a/appendix/repo/redis.md +++ b/appendix/repo/redis.md @@ -31,113 +31,5 @@ $ docker run -it --link some-redis:redis --rm redis sh -c 'exec redis-cli -h "$R ``` ### Dockerfile -#### 3.0 版本 -``` -FROM debian:jessie - -# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added -RUN groupadd -r redis && useradd -r -g redis redis - -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates \ - wget \ - && rm -rf /var/lib/apt/lists/* - -# grab gosu for easy step-down from root -ENV GOSU_VERSION 1.7 -RUN set -x \ - && 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 --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ - && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ - && rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \ - && chmod +x /usr/local/bin/gosu \ - && gosu nobody true - -ENV REDIS_VERSION 3.0.7 -ENV REDIS_DOWNLOAD_URL http://download.redis.io/releases/redis-3.0.7.tar.gz -ENV REDIS_DOWNLOAD_SHA1 e56b4b7e033ae8dbf311f9191cf6fdf3ae974d1c - -# for redis-sentinel see: http://redis.io/topics/sentinel -RUN buildDeps='gcc libc6-dev make' \ - && set -x \ - && apt-get update && apt-get install -y $buildDeps --no-install-recommends \ - && rm -rf /var/lib/apt/lists/* \ - && wget -O redis.tar.gz "$REDIS_DOWNLOAD_URL" \ - && echo "$REDIS_DOWNLOAD_SHA1 *redis.tar.gz" | sha1sum -c - \ - && mkdir -p /usr/src/redis \ - && tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \ - && rm redis.tar.gz \ - && make -C /usr/src/redis \ - && make -C /usr/src/redis install \ - && rm -r /usr/src/redis \ - && apt-get purge -y --auto-remove $buildDeps - -RUN mkdir /data && chown redis:redis /data -VOLUME /data -WORKDIR /data - -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 6379 -CMD [ "redis-server" ] -``` - -#### 3.2 版本 -``` -FROM debian:jessie - -# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added -RUN groupadd -r redis && useradd -r -g redis redis - -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates \ - wget \ - && rm -rf /var/lib/apt/lists/* - -# grab gosu for easy step-down from root -ENV GOSU_VERSION 1.7 -RUN set -x \ - && 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 --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ - && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ - && rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \ - && chmod +x /usr/local/bin/gosu \ - && gosu nobody true - -ENV REDIS_VERSION 3.2.3 -ENV REDIS_DOWNLOAD_URL http://download.redis.io/releases/redis-3.2.3.tar.gz -ENV REDIS_DOWNLOAD_SHA1 92d6d93ef2efc91e595c8bf578bf72baff397507 - -# for redis-sentinel see: http://redis.io/topics/sentinel -RUN buildDeps='gcc libc6-dev make' \ - && set -x \ - && apt-get update && apt-get install -y $buildDeps --no-install-recommends \ - && rm -rf /var/lib/apt/lists/* \ - && wget -O redis.tar.gz "$REDIS_DOWNLOAD_URL" \ - && echo "$REDIS_DOWNLOAD_SHA1 *redis.tar.gz" | sha1sum -c - \ - && mkdir -p /usr/src/redis \ - && tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \ - && rm redis.tar.gz \ - && make -C /usr/src/redis \ - && make -C /usr/src/redis install \ - && rm -r /usr/src/redis \ - && apt-get purge -y --auto-remove $buildDeps - -RUN mkdir /data && chown redis:redis /data -VOLUME /data -WORKDIR /data - -COPY docker-entrypoint.sh /usr/local/bin/ -ENTRYPOINT ["docker-entrypoint.sh"] - -EXPOSE 6379 -CMD [ "redis-server" ] -``` - +请到 https://github.com/docker-library/docs/tree/master/redis 查看。 diff --git a/appendix/repo/ubuntu.md b/appendix/repo/ubuntu.md index 46faddf..a5ce241 100644 --- a/appendix/repo/ubuntu.md +++ b/appendix/repo/ubuntu.md @@ -15,130 +15,4 @@ root@523c70904d54:/# ### Dockerfile -#### 12.04 版本 -``` -FROM scratch -ADD precise-core-amd64.tar.gz / - -# a few minor docker-specific tweaks -# see https://github.com/dotcloud/docker/blob/master/contrib/mkimage/debootstrap -RUN echo '#!/bin/sh' > /usr/sbin/policy-rc.d \ - && echo 'exit 101' >> /usr/sbin/policy-rc.d \ - && chmod +x /usr/sbin/policy-rc.d \ - \ - && dpkg-divert --local --rename --add /sbin/initctl \ - && cp -a /usr/sbin/policy-rc.d /sbin/initctl \ - && sed -i 's/^exit.*/exit 0/' /sbin/initctl \ - \ - && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \ - \ - && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \ - && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \ - && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \ - \ - && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \ - \ - && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes - -# delete all the apt list files since they're big and get stale quickly -RUN rm -rf /var/lib/apt/lists/* -# this forces "apt-get update" in dependent images, which is also good - -# enable the universe -RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list - -# upgrade packages for now, since the tarballs aren't updated frequently enough -RUN apt-get update && apt-get dist-upgrade -y && rm -rf /var/lib/apt/lists/* - -# overwrite this with 'CMD []' in a dependent Dockerfile -CMD ["/bin/bash"] -``` - -#### 14.04 版本 -``` -FROM scratch -ADD trusty-core-amd64.tar.gz / - -# a few minor docker-specific tweaks -# see https://github.com/dotcloud/docker/blob/master/contrib/mkimage/debootstrap -RUN echo '#!/bin/sh' > /usr/sbin/policy-rc.d \ - && echo 'exit 101' >> /usr/sbin/policy-rc.d \ - && chmod +x /usr/sbin/policy-rc.d \ - \ - && dpkg-divert --local --rename --add /sbin/initctl \ - && cp -a /usr/sbin/policy-rc.d /sbin/initctl \ - && sed -i 's/^exit.*/exit 0/' /sbin/initctl \ - \ - && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \ - \ - && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \ - && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \ - && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \ - \ - && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \ - \ - && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes - -# delete all the apt list files since they're big and get stale quickly -RUN rm -rf /var/lib/apt/lists/* -# this forces "apt-get update" in dependent images, which is also good - -# enable the universe -RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list - -# upgrade packages for now, since the tarballs aren't updated frequently enough -RUN apt-get update && apt-get dist-upgrade -y && rm -rf /var/lib/apt/lists/* - -# overwrite this with 'CMD []' in a dependent Dockerfile -CMD ["/bin/bash"] -``` - -#### 16.04 版本 - -``` -FROM scratch -ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz / - -# a few minor docker-specific tweaks -# see https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap -RUN set -xe \ - \ -# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L40-L48 - && echo '#!/bin/sh' > /usr/sbin/policy-rc.d \ - && echo 'exit 101' >> /usr/sbin/policy-rc.d \ - && chmod +x /usr/sbin/policy-rc.d \ - \ -# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L54-L56 - && dpkg-divert --local --rename --add /sbin/initctl \ - && cp -a /usr/sbin/policy-rc.d /sbin/initctl \ - && sed -i 's/^exit.*/exit 0/' /sbin/initctl \ - \ -# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L71-L78 - && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \ - \ -# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L85-L105 - && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \ - && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \ - && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \ - \ -# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L109-L115 - && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \ - \ -# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L118-L130 - && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes \ - \ -# https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap#L134-L151 - && echo 'Apt::AutoRemove::SuggestsImportant "false";' > /etc/apt/apt.conf.d/docker-autoremove-suggests - -# delete all the apt list files since they're big and get stale quickly -RUN rm -rf /var/lib/apt/lists/* -# this forces "apt-get update" in dependent images, which is also good - -# enable the universe -RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list - -# overwrite this with 'CMD []' in a dependent Dockerfile -CMD ["/bin/bash"] -``` - - +请到 https://github.com/docker-library/docs/tree/master/ubuntu 查看。 diff --git a/appendix/repo/wordpress.md b/appendix/repo/wordpress.md index 1bad0ab..5984f44 100644 --- a/appendix/repo/wordpress.md +++ b/appendix/repo/wordpress.md @@ -19,100 +19,5 @@ $ docker run --name some-wordpress --link some-mysql:mysql -d wordpress * `-e WORDPRESS_AUTH_KEY=...`, `-e WORDPRESS_SECURE_AUTH_KEY=...`, `-e WORDPRESS_LOGGED_IN_KEY=...`, `-e WORDPRESS_NONCE_KEY=...`, `-e WORDPRESS_AUTH_SALT=...`, `-e WORDPRESS_SECURE_AUTH_SALT=...`, `-e WORDPRESS_LOGGED_IN_SALT=...`, `-e WORDPRESS_NONCE_SALT=...` 缺省为随机 sha1 串 ### Dockerfile -#### 4.0 版本 -``` -FROM debian:wheezy - -RUN apt-get update && apt-get install -y \ - apache2 \ - curl \ - libapache2-mod-php5 \ - php5-curl \ - php5-gd \ - php5-mysql \ - rsync \ - wget \ - && rm -rf /var/lib/apt/lists/* -RUN a2enmod rewrite - -# copy a few things from apache's init script that it requires to be setup -ENV APACHE_CONFDIR /etc/apache2 -ENV APACHE_ENVVARS $APACHE_CONFDIR/envvars -# and then a few more from $APACHE_CONFDIR/envvars itself -ENV APACHE_RUN_USER www-data -ENV APACHE_RUN_GROUP www-data -ENV APACHE_RUN_DIR /var/run/apache2 -ENV APACHE_PID_FILE $APACHE_RUN_DIR/apache2.pid -ENV APACHE_LOCK_DIR /var/lock/apache2 -ENV APACHE_LOG_DIR /var/log/apache2 -ENV LANG C -RUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR - -# make CustomLog (access log) go to stdout instead of files -# and ErrorLog to stderr -RUN find "$APACHE_CONFDIR" -type f -exec sed -ri ' \ - s!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g; \ - s!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g; \ -' '{}' ';' - -RUN rm -rf /var/www/html && mkdir /var/www/html -VOLUME /var/www/html -WORKDIR /var/www/html - -ENV WORDPRESS_VERSION 4.0.0 -ENV WORDPRESS_UPSTREAM_VERSION 4.0 - -# upstream tarballs include ./wordpress/ so this gives us /usr/src/wordpress -RUN curl -SL http://wordpress.org/wordpress-${WORDPRESS_UPSTREAM_VERSION}.tar.gz | tar -xzC /usr/src/ - -COPY docker-apache.conf /etc/apache2/sites-available/wordpress -RUN a2dissite 000-default && a2ensite wordpress - -COPY docker-entrypoint.sh /entrypoint.sh - -ENTRYPOINT ["/entrypoint.sh"] -EXPOSE 80 -CMD ["apache2", "-DFOREGROUND"] -``` - -#### 4.5 版本 -``` -FROM php:5.6-apache - -RUN a2enmod rewrite expires - -# install the PHP extensions we need -RUN apt-get update && apt-get install -y libpng12-dev libjpeg-dev && rm -rf /var/lib/apt/lists/* \ - && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \ - && docker-php-ext-install gd mysqli opcache - -# set recommended PHP.ini settings -# see https://secure.php.net/manual/en/opcache.installation.php -RUN { \ - echo 'opcache.memory_consumption=128'; \ - echo 'opcache.interned_strings_buffer=8'; \ - echo 'opcache.max_accelerated_files=4000'; \ - echo 'opcache.revalidate_freq=60'; \ - echo 'opcache.fast_shutdown=1'; \ - echo 'opcache.enable_cli=1'; \ - } > /usr/local/etc/php/conf.d/opcache-recommended.ini - -VOLUME /var/www/html - -ENV WORDPRESS_VERSION 4.5.3 -ENV WORDPRESS_SHA1 835b68748dae5a9d31c059313cd0150f03a49269 - -# upstream tarballs include ./wordpress/ so this gives us /usr/src/wordpress -RUN curl -o wordpress.tar.gz -SL https://wordpress.org/wordpress-${WORDPRESS_VERSION}.tar.gz \ - && echo "$WORDPRESS_SHA1 *wordpress.tar.gz" | sha1sum -c - \ - && tar -xzf wordpress.tar.gz -C /usr/src/ \ - && rm wordpress.tar.gz \ - && chown -R www-data:www-data /usr/src/wordpress - -COPY docker-entrypoint.sh /entrypoint.sh - -# grr, ENTRYPOINT resets CMD now -ENTRYPOINT ["/entrypoint.sh"] -CMD ["apache2-foreground"] -``` +请到 https://github.com/docker-library/docs/tree/master/wordpress 查看。 diff --git a/basic_concept/repository.md b/basic_concept/repository.md index dfbfbc0..0ff5d0b 100644 --- a/basic_concept/repository.md +++ b/basic_concept/repository.md @@ -16,7 +16,7 @@ Docker Registry 公开服务是开放给用户使用、允许用户管理镜像 最常使用的 Registry 公开服务是官方的 [Docker Hub](https://hub.docker.com/),这也是默认的 Registry,并拥有大量的高质量的官方镜像。除此以外,还有 [CoreOS](https://coreos.com/) 的 [Quay.io](https://quay.io/repository/),CoreOS 相关的镜像存储在这里;Google 的 [Google Container Registry](https://cloud.google.com/container-registry/),[Kubernetes](http://kubernetes.io/) 的镜像使用的就是这个服务。 -由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为**加速器**。常见的有 [阿里云加速器](https://cr.console.aliyun.com/#/accelerator)、[DaoCloud 加速器](https://www.daocloud.io/mirror#accelerator-doc)、[灵雀云加速器](http://docs.alauda.cn/feature/accelerator.html)等。使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从官方网站下载速度会提高很多。在后面的章节中会有进一步如何配置加速器的讲解。 +由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为**加速器**。常见的有 [阿里云加速器](https://cr.console.aliyun.com/#/accelerator)、[DaoCloud 加速器](https://www.daocloud.io/mirror#accelerator-doc) 等。使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从官方网站下载速度会提高很多。在后面的章节中会有进一步如何配置加速器的讲解。 国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 [时速云镜像仓库](https://hub.tenxcloud.com/)、[网易云镜像服务](https://c.163.com/hub#/m/library/)、[DaoCloud 镜像市场](https://hub.daocloud.io/)、[阿里云镜像库](https://cr.console.aliyun.com)等。 diff --git a/cloud/qcloud.md b/cloud/qcloud.md index d88c70e..9cd9bf6 100644 --- a/cloud/qcloud.md +++ b/cloud/qcloud.md @@ -7,6 +7,3 @@ 具体包括云服务器、云存储、云数据库和弹性 web 引擎等基础云服务;腾讯云分析(MTA)、腾讯云推送(信鸽)等腾讯整体大数据能力;以及 QQ互联、QQ 空间、微云、微社区等云端链接社交体系。这些正是腾讯云可以提供给这个行业的差异化优势,造就了可支持各种互联网使用场景的高品质的腾讯云技术平台。 腾讯云容器服务是高度可扩展的高性能容器管理服务,用户可以在托管的云服务器实例集群上轻松运行应用程序。使用该服务,将无需安装、运维、扩展用户的集群管理基础设施,只需进行简单的API调用,便可启动和停止Docker应用程序,查询集群的完整状态,以及使用各种云服务。用户可以根据用户的资源需求和可用性要求在用户的集群中安排容器的置放,满足业务或应用程序的特定要求。 - -*腾讯云已有用户或新用户都可以 [通过这里](http://partners.qcloud.com/invitation/25297829205816a19c316c6),在不做任何迁移的前提下,获得腾讯云服务的额外支持和大客户专享价格。* - diff --git a/compose/django.md b/compose/django.md index 0214643..b5101be 100644 --- a/compose/django.md +++ b/compose/django.md @@ -1,9 +1,9 @@ ## 使用 Django -我们现在将使用 Compose 配置并运行一个 Django/PostgreSQL 应用。在此之前,先确保 Compose 已经 [安装](install.md)。 +我们现在将使用 Docker Compose 配置并运行一个 `Django/PostgreSQL` 应用。 在一切工作开始前,需要先设置好三个必要的文件。 -第一步,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下: +第一步,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下: ``` FROM python:2.7 @@ -24,20 +24,23 @@ psycopg2 ``` 就是这么简单。 -第三步,`docker-compose.yml` 文件将把所有的东西关联起来。它描述了应用的构成(一个 web 服务和一个数据库)、使用的 Docker 镜像、镜像之间的连接、挂载到容器的卷,以及服务开放的端口。 +第三步,`docker-compose.yml` 文件将把所有的东西关联起来。它描述了应用的构成(一个 web 服务和一个数据库)、使用的 Docker 镜像、镜像之间的连接、挂载到容器的卷,以及服务开放的端口。 -``` -db: - image: postgres -web: - build: . - command: python manage.py runserver 0.0.0.0:8000 - volumes: - - .:/code - ports: - - "8000:8000" - links: - - db +```yaml +version: "3" +services: + + db: + image: postgres + web: + build: . + command: python manage.py runserver 0.0.0.0:8000 + volumes: + - .:/code + ports: + - "8000:8000" + links: + - db ``` 查看 [`docker-compose.yml` 章节](yml_ref.md) 了解更多详细的工作机制。 @@ -69,7 +72,7 @@ DATABASES = { ``` 这些信息是在 [postgres](https://registry.hub.docker.com/_/postgres/) Docker 镜像固定设置好的。 然后,运行 `docker-compose up` : - + ``` Recreating myapp_db_1... Recreating myapp_web_1... @@ -86,7 +89,7 @@ myapp_web_1 | Django version 1.6.1, using settings 'django_example.settings' myapp_web_1 | Starting development server at http://0.0.0.0:8000/ myapp_web_1 | Quit the server with CONTROL-C. ``` -这个 web 应用已经开始在你的 docker 守护进程里监听着 5000 端口了(如果你有使用 boot2docker ,执行 `boot2docker ip` ,就会看到它的地址)。 +这个 web 应用已经开始在你的 docker 守护进程里监听着 5000 端口了。 你还可以在 Docker 上运行其它的管理命令,例如对于同步数据库结构这种事,在运行完 `docker-compose up` 后,在另外一个终端运行以下命令即可: diff --git a/compose/install.md b/compose/install.md index da2c9ff..0d2f29a 100644 --- a/compose/install.md +++ b/compose/install.md @@ -1,10 +1,8 @@ ## 安装与卸载 -Compose 目前支持 Linux 和 Mac OS 平台,两者的安装过程大同小异。 +Compose 目前支持 Linux、macOS、Windows 10 三大平台。 -安装 Compose 之前,要先安装 Docker(需要 Docker Engine 1.7.1+),请参考第一部分中章节,在此不再赘述。 - -Compose 可以通过 Python 的 pip 工具进行安装,可以直接下载编译好的二进制文件使用,甚至直接运行在 Docker 容器中。 +Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至直接运行在 Docker 容器中。 前两种方式是传统方式,适合本地环境下安装使用;最后一种方式则不破坏系统环境,更适合云计算场景。 @@ -76,7 +74,7 @@ $ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/complet 这些二进制文件,下载后直接放到执行路径下,并添加执行权限即可。 -例如,在 Linux 平台上。 +例如,在 Linux 和 macOS 平台上。 ``` $ sudo curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose @@ -161,4 +159,4 @@ $ sudo rm /usr/local/bin/docker-compose ```sh $ sudo pip uninstall docker-compose -``` \ No newline at end of file +``` diff --git a/compose/intro.md b/compose/introduction.md similarity index 93% rename from compose/intro.md rename to compose/introduction.md index 3399434..2b4254c 100644 --- a/compose/intro.md +++ b/compose/introduction.md @@ -14,7 +14,7 @@ Compose 恰好满足了这样的需求。它允许用户通过一个单独的 `d Compose 中有两个重要的概念: -* 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 +* 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 * 项目(project):由一组关联的应用容器组成的一个完整业务单元,在 `docker-compose.yml` 文件中定义。 Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。 diff --git a/compose/rails.md b/compose/rails.md index 7625a8d..3fdc9a3 100644 --- a/compose/rails.md +++ b/compose/rails.md @@ -1,10 +1,10 @@ ## 使用 Rail -我们现在将使用 Compose 配置并运行一个 Rails/PostgreSQL 应用。在开始之前,先确保 Compose 已经 [安装](install.md)。 +我们现在将使用 Compose 配置并运行一个 Rails/PostgreSQL 应用。 在一切工作开始前,需要先设置好三个必要的文件。 -首先,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下: +首先,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下: ``` FROM ruby @@ -24,23 +24,26 @@ gem 'rails', '4.0.2' ``` 最后,`docker-compose.yml` 文件才是最神奇的地方。 `docker-compose.yml` 文件将把所有的东西关联起来。它描述了应用的构成(一个 web 服务和一个数据库)、每个镜像的来源(数据库运行在使用预定义的 PostgreSQL 镜像,web 应用侧将从本地目录创建)、镜像之间的连接,以及服务开放的端口。 +```yaml +version: "3" +services: + + db: + image: postgres + ports: + - "5432" + web: + build: . + command: bundle exec rackup -p 3000 + volumes: + - .:/myapp + ports: + - "3000:3000" + links: + - db ``` -db: - image: postgres - ports: - - "5432" -web: - build: . - command: bundle exec rackup -p 3000 - volumes: - - .:/myapp - ports: - - "3000:3000" - links: - - db -``` -所有文件就绪后,我们就可以通过使用 `docker-compose run` 命令生成应用的骨架了。 - +所有文件就绪后,我们就可以通过使用 `docker-compose run` 命令生成应用的骨架了。 + ``` $ docker-compose run web rails new . --force --database=postgresql --skip-bundle ``` @@ -98,6 +101,6 @@ myapp_web_1 | [2014-01-17 17:16:29] INFO WEBrick::HTTPServer#start: pid=1 port= ``` $ docker-compose run web rake db:create ``` -这个 web 应用已经开始在你的 docker 守护进程里面监听着 3000 端口了(如果你有使用 boot2docker ,执行 `boot2docker ip` ,就会看到它的地址)。 +这个 web 应用已经开始在你的 docker 守护进程里面监听着 3000 端口了。 ![](../_images/docker-compose-rails-screenshot.png) diff --git a/compose/usage.md b/compose/usage.md index 76c5c05..769261b 100644 --- a/compose/usage.md +++ b/compose/usage.md @@ -3,8 +3,8 @@ ### 术语 首先介绍几个术语。 -* 服务(service):一个应用容器,实际上可以运行多个相同镜像的实例。 -* 项目(project):由一组关联的应用容器组成的一个完整业务单元。 +* 服务 (service):一个应用容器,实际上可以运行多个相同镜像的实例。 +* 项目 (project):由一组关联的应用容器组成的一个完整业务单元。 可见,一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理。 @@ -98,7 +98,7 @@ $ touch index.html ``` #### Dockerfile -生成一个 Dockerfile,内容为 +编写 `Dockerfile` 文件,内容为 ```bash FROM python:2.7 WORKDIR /code @@ -108,7 +108,7 @@ CMD python index.py ``` ### haproxy 目录 -在其中生成一个 `haproxy.cfg` 文件,内容为 +编写 `haproxy.cfg` 文件,内容为 ```bash global log 127.0.0.1 local0 @@ -146,23 +146,25 @@ backend web_backends ### docker-compose.yml 编写 docker-compose.yml 文件,这个是 Compose 使用的主模板文件。内容十分简单,指定 3 个 web 容器,以及 1 个 haproxy 容器。 -```bash -weba: +```yaml +version: "3" +services: + weba: build: ./web expose: - 80 -webb: + webb: build: ./web expose: - 80 -webc: + webc: build: ./web expose: - 80 -haproxy: + haproxy: image: haproxy:latest volumes: - ./haproxy:/haproxy-override @@ -180,7 +182,7 @@ haproxy: ``` ### 运行 compose 项目 -现在 compose-haproxy-web 目录长成下面的样子。 +现在 compose-haproxy-web 目录结构如下: ```bash compose-haproxy-web ├── docker-compose.yml diff --git a/compose/wordpress.md b/compose/wordpress.md index e3d05f4..227377a 100644 --- a/compose/wordpress.md +++ b/compose/wordpress.md @@ -1,14 +1,15 @@ ## 使用 Wordpress -Compose 让 Wordpress 运行在一个独立的环境中很简易。 -[安装](install.md) Compose ,然后下载 Wordpress 到当前目录: +Compose 可以很便捷的让 Wordpress 运行在一个独立的环境中。 -``` +首先下载 Wordpress 到当前目录: + +```bash wordpress.org/latest.tar.gz | tar -xvzf - ``` 这将会创建一个叫 wordpress 目录,你也可以重命名成你想要的名字。在目录里面,创建一个 `Dockerfile` 文件,定义应用的运行环境: -``` +```docker FROM orchardup/php5 ADD . /code ``` @@ -17,25 +18,28 @@ ADD . /code 下一步,`docker-compose.yml` 文件将开启一个 web 服务和一个独立的 MySQL 实例: -``` -web: - build: . - command: php -S 0.0.0.0:8000 -t /code - ports: - - "8000:8000" - links: - - db - volumes: - - .:/code -db: - image: orchardup/mysql - environment: - MYSQL_DATABASE: wordpress +```yaml +version: "3" +services: + + web: + build: . + command: php -S 0.0.0.0:8000 -t /code + ports: + - "8000:8000" + links: + - db + volumes: + - .:/code + db: + image: orchardup/mysql + environment: + MYSQL_DATABASE: wordpress ``` 要让这个应用跑起来还需要两个文件。 第一个,`wp-condocker-compose.php` ,它是一个标准的 Wordpress 配置文件,有一点需要修改的是把数据库的配置指向 `db` 容器。 -``` +```php ) ``` + 通过这个 PID,就可以连接到这个容器: -``` + +```bash $ nsenter --target $PID --mount --uts --ipc --net --pid ``` + 如果无法通过以上命令连接到这个容器,有可能是因为宿主的默认shell在容器中并不存在,比如zsh,可以使用如下命令显式地使用bash。 -``` -$ nsenter --target $pid --mount --uts --ipc --net --pid -- /usr/bin/env \ + +```bash +$ nsenter --target $pid --mount --uts --ipc --net --pid -- /usr/bin/env \ --ignore-environment HOME=/root /bin/bash --login ``` + 下面给出一个完整的例子。 -``` + +```bash $ sudo docker run -idt ubuntu 243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550 $ sudo docker ps @@ -58,14 +69,18 @@ $ PID=$(docker-pid 243c32535da7) $ sudo nsenter --target 10981 --mount --uts --ipc --net --pid root@243c32535da7:/# ``` + 更简单的,建议大家下载 [.bashrc_docker](https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker),并将内容放到 .bashrc 中。 -``` + +```bash $ wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker; $ echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc ``` + 这个文件中定义了很多方便使用 Docker 的命令,例如 `docker-pid` 可以获取某个容器的 PID;而 `docker-enter` 可以进入容器或直接在容器内执行命令。 -``` + +```bash $ echo $(docker-pid ) $ docker-enter ls ``` diff --git a/container/import_export.md b/container/import_export.md index 4a0a65d..e3607a8 100644 --- a/container/import_export.md +++ b/container/import_export.md @@ -3,7 +3,7 @@ ###导出容器 如果要导出本地某个容器,可以使用 `docker export` 命令。 ``` -$ sudo docker ps -a +$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7691a814370e ubuntu:14.04 "/bin/bash" 36 hours ago Exited (0) 21 hours ago test $ sudo docker export 7691a814370e > ubuntu.tar @@ -14,15 +14,23 @@ $ sudo docker export 7691a814370e > ubuntu.tar 可以使用 `docker import` 从容器快照文件中再导入为镜像,例如 ``` $ cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0 -$ sudo docker images +$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB ``` 此外,也可以通过指定 URL 或者某个目录来导入,例如 ``` -$sudo docker import http://example.com/exampleimage.tgz example/imagerepo +$ docker import http://example.com/exampleimage.tgz example/imagerepo ``` -*注:用户既可以使用 `docker load` 来导入镜像存储文件到本地镜像库,也可以使用 `docker import` 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。 +*注:用户既可以使用 `docker load` 来导入镜像存储文件到本地镜像库,也可以使用 `docker import` 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。* +## Docker 1.13+ +在 Docker 1.13+ 版本中推荐使用 docker container 来管理容器。 + +```bash +$ docker container export + +$ docker image import +``` diff --git a/container/rm.md b/container/rm.md index c5dc696..6355d15 100644 --- a/container/rm.md +++ b/container/rm.md @@ -1,14 +1,24 @@ -##删除容器 +## 删除容器 可以使用 `docker rm` 来删除一个处于终止状态的容器。 例如 ``` -$sudo docker rm trusting_newton +$ docker rm trusting_newton trusting_newton ``` 如果要删除一个运行中的容器,可以添加 `-f` 参数。Docker 会发送 `SIGKILL` 信号给容器。 -##清理所有处于终止状态的容器 +## 清理所有处于终止状态的容器 用 `docker ps -a` 命令可以查看所有已经创建的包括终止状态的容器,如果数量太多要一个个删除可能会很麻烦,用 `docker rm $(docker ps -a -q)` 可以全部清理掉。 -*注意:这个命令其实会试图删除所有的包括还在运行中的容器,不过就像上面提过的 `docker rm` 默认并不会删除运行中的容器。 \ No newline at end of file +*注意:这个命令其实会试图删除所有的包括还在运行中的容器,不过就像上面提过的 `docker rm` 默认并不会删除运行中的容器。* + +## Docker 1.13+ + +在 Docker 1.13+ 版本中推荐使用 docker container 来管理容器。 + +```bash +$ docker container rm trusting_newton + +$ docker container prune +``` diff --git a/container/run.md b/container/run.md index 4c9ea79..5e6abcc 100644 --- a/container/run.md +++ b/container/run.md @@ -8,14 +8,14 @@ 例如,下面的命令输出一个 “Hello World”,之后终止容器。 ``` -$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' +$ docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world ``` 这跟在本地直接执行 `/bin/echo 'hello world'` 几乎感觉不出任何区别。 下面的命令则启动一个 bash 终端,允许用户进行交互。 ``` -$ sudo docker run -t -i ubuntu:14.04 /bin/bash +$ docker run -t -i ubuntu:14.04 /bin/bash root@af8bae53bdd3:/# ``` 其中,`-t` 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, `-i` 则让容器的标准输入保持打开。 @@ -49,3 +49,13 @@ root@ba267838cc1b:/# ps 11 ? 00:00:00 ps ``` 可见,容器中仅运行了指定的 bash 应用。这种特点使得 Docker 对资源的利用率极高,是货真价实的轻量级虚拟化。 + +## Docker 1.13+ + +在 Docker 1.13+ 版本中推荐使用 docker container 来管理容器。 + +```bash +$ docker container run ubuntu:17.10 /bin/echo 'Hello world' + +$ docker container start +``` diff --git a/container/stop.md b/container/stop.md index fe6daf3..ea048c8 100644 --- a/container/stop.md +++ b/container/stop.md @@ -1,4 +1,4 @@ -##终止容器 +## 终止容器 可以使用 `docker stop` 来终止一个运行中的容器。 此外,当Docker容器中指定的应用终结时,容器也自动终止。 @@ -15,3 +15,15 @@ ba267838cc1b ubuntu:14.04 "/bin/bash" 30 minutes a 处于终止状态的容器,可以通过 `docker start` 命令来重新启动。 此外,`docker restart` 命令会将一个运行态的容器终止,然后再重新启动它。 + +## Docker 1.13+ + +在 Docker 1.13+ 版本中推荐使用 docker container 来管理容器。 + +```bash +$ docker container ls + +$ docker container start + +$ docker container restart +``` diff --git a/data_management/README.md b/data_management/README.md index c561212..f265650 100644 --- a/data_management/README.md +++ b/data_management/README.md @@ -2,3 +2,5 @@ 这一章介绍如何在 Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式: * 数据卷(Data volumes) * 数据卷容器(Data volume containers) + +Docker 在 1.13 版本引进了新的管理命令(management commands),在 Docker 1.13+ 推荐使用 `docker volume` 子命令来管理 Docker 数据卷。 diff --git a/image/README.md b/image/README.md index 25054bf..5423e7f 100644 --- a/image/README.md +++ b/image/README.md @@ -8,3 +8,5 @@ Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在 * 从仓库获取镜像; * 管理本地主机上的镜像; * 介绍镜像实现的基本原理。 + +Docker 在 1.13 版本引进了新的管理命令(management commands),在 Docker 1.13+ 推荐使用 `docker image` 子命令来管理 Docker 镜像。 diff --git a/image/build.md b/image/build.md index 57e2ea4..a81da46 100644 --- a/image/build.md +++ b/image/build.md @@ -222,3 +222,11 @@ $ docker build - < context.tar.gz 如果发现标准输入的文件格式是 `gzip`、`bzip2` 以及 `xz` 的话,将会使其为上下文压缩包,直接将其展开,将里面视为上下文,并开始构建。 [^1]: [Docker Store](https://store.docker.com/)是发现公共Docker内容,镜像发布和发行软件的新地方 + +# Docker 1.13+ + +在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像。 + +```bash +$ docker image build +``` diff --git a/image/commit.md b/image/commit.md index dc05858..b234918 100644 --- a/image/commit.md +++ b/image/commit.md @@ -1,5 +1,7 @@ ## 利用 commit 理解镜像构成 +注意: `docker commit` 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现场等。但是,不要使用 `docker commit` 定制镜像,定制镜像应该使用 `Dockerfile` 来完成。如果你想要定制镜像请查看下一章节。 + 镜像是容器的基础,每次执行 `docker run` 的时候都会指定哪个镜像作为容器运行的基础。在之前的例子中,我们所使用的都是来自于 Docker Hub 的镜像。直接使用这些镜像是可以满足一定的需求,而当这些镜像无法直接满足需求时,我们就需要定制这些镜像。接下来的几节就将讲解如何定制镜像。 回顾一下之前我们学到的知识,镜像是多层存储,每一层是在前一层的基础上进行的修改;而容器同样也是多层存储,是在以镜像为基础层,在其基础上加一层作为容器运行时的存储层。 @@ -124,5 +126,3 @@ docker run --name web2 -d -p 81:80 nginx:v2 此外,使用 `docker commit` 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为**黑箱镜像**,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。而且,即使是这个制作镜像的人,过一段时间后也无法记清具体在操作的。虽然 `docker diff` 或许可以告诉得到一些线索,但是远远不到可以确保生成一致镜像的地步。这种黑箱镜像的维护工作是非常痛苦的。 而且,回顾之前提及的镜像所使用的分层存储的概念,除当前层外,之前的每一层都是不会发生改变的,换句话说,任何修改的结果仅仅是在当前层进行标记、添加、修改,而不会改动上一层。如果使用 `docker commit` 制作镜像,以及后期修改的话,每一次修改都会让镜像更加臃肿一次,所删除的上一层的东西并不会丢失,会一直如影随形的跟着这个镜像,即使根本无法访问到™。这会让镜像更加臃肿。 - -`docker commit` 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现场等。但是,不要使用 `docker commit` 定制镜像,定制行为应该使用 `Dockerfile` 来完成。下面的章节我们就来讲述一下如何使用 `Dockerfile` 定制镜像。 diff --git a/image/list.md b/image/list.md index 4b63188..7a69f47 100644 --- a/image/list.md +++ b/image/list.md @@ -46,6 +46,12 @@ REPOSITORY TAG IMAGE ID CREATED $ docker rmi $(docker images -q -f dangling=true) ``` +注意:如果你使用的是 Docker 1.13+ 版本,你可以便捷的使用以下命令来删除虚悬镜像。 + +```bash +$ docker image prune +``` + ### 中间层镜像 为了加速镜像构建、重复利用资源,Docker 会利用 **中间层镜像**。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。默认的 `docker images` 列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 `-a` 参数。 @@ -141,3 +147,11 @@ f753707788c5 ubuntu 16.04 f753707788c5 ubuntu latest 1e0c3dd64ccd ubuntu 14.04 ``` + +## Docker 1.13+ + +在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像。 + +```bash +$ docker image ls +``` diff --git a/image/other.md b/image/other.md index b5ca9d2..35a93a7 100644 --- a/image/other.md +++ b/image/other.md @@ -70,3 +70,13 @@ Loaded image: alpine:latest ```bash docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | docker load' ``` + +## Docker 1.13+ + +在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像。 + +```bash +$ docker image import +$ docker image load +$ docker image save +``` diff --git a/image/pull.md b/image/pull.md index 3831edf..914c289 100644 --- a/image/pull.md +++ b/image/pull.md @@ -31,7 +31,7 @@ Status: Downloaded newer image for ubuntu:14.04 从下载过程中可以看到我们之前提及的分层存储的概念,镜像是由多层存储所构成。下载也是一层层的去下载,并非单一文件。下载过程中给出了每一层的 ID 的前 12 位。并且下载结束后,给出该镜像完整的 `sha256` 的摘要,以确保下载一致性。 -在实验上面命令的时候,你可能会发现,你所看到的层 ID 以及 `sha256` 的摘要和这里的不一样。这是因为官方镜像是一直在维护的,有任何新的 bug,或者版本更新,都会进行修复再以原来的标签发布,这样可以确保任何使用这个标签的用户可以获得更安全、更稳定的镜像。 +在使用上面命令的时候,你可能会发现,你所看到的层 ID 以及 `sha256` 的摘要和这里的不一样。这是因为官方镜像是一直在维护的,有任何新的 bug,或者版本更新,都会进行修复再以原来的标签发布,这样可以确保任何使用这个标签的用户可以获得更安全、更稳定的镜像。 *如果从 Docker Hub 下载镜像非常缓慢,可以参照 [镜像加速器](/install/mirror.md) 一节配置加速器。* @@ -40,7 +40,10 @@ Status: Downloaded newer image for ubuntu:14.04 有了镜像后,我们就可以以这个镜像为基础启动一个容器来运行。以上面的 `ubuntu:14.04` 为例,如果我们打算启动里面的 `bash` 并且进行交互式操作的话,可以执行下面的命令。 ```bash -$ docker run -it --rm ubuntu:14.04 bash +$ docker run -it --rm \ + ubuntu:14.04 \ + bash + root@e7009c6ce357:/# cat /etc/os-release NAME="Ubuntu" VERSION="14.04.5 LTS, Trusty Tahr" @@ -66,3 +69,15 @@ $ 进入容器后,我们可以在 Shell 下操作,执行任何所需的命令。这里,我们执行了 `cat /etc/os-release`,这是 Linux 常用的查看当前系统版本的命令,从返回的结果可以看到容器内是 `Ubuntu 14.04.5 LTS` 系统。 最后我们通过 `exit` 退出了这个容器。 + +## Docker 1.13+ + +在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像。 + +```bash +$ docker image pull ubunut:17.10 + +$ docker container run -it --rm \ + ubuntu:17.10 \ + bash +``` diff --git a/image/rmi.md b/image/rmi.md index 1c1056a..6c9f182 100644 --- a/image/rmi.md +++ b/image/rmi.md @@ -103,3 +103,11 @@ $ docker rmi $(docker images -q -f before=mongo:3.2) 所以对于 CentOS/RHEL 的用户来说,在没有办法使用 `UnionFS` 的情况下,一定要配置 `direct-lvm` 给 `devicemapper`,无论是为了性能、稳定性还是空间利用率。 *或许有人注意到了 CentOS 7 中存在被 backports 回来的 `overlay` 驱动,不过 CentOS 里的这个驱动达不到生产环境使用的稳定程度,所以不推荐使用。* + +## Docker 1.13+ + +在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像。 + +```bash +$ docker image rm +``` diff --git a/install/README.md b/install/README.md index 9b32506..4bbfb03 100644 --- a/install/README.md +++ b/install/README.md @@ -2,12 +2,12 @@ Docker 在 1.13 版本之后,从 2017 年的 3 月 1 日开始,版本命名规则变为如下: -| 项目 | 说明 | -| -- | -- | -| 版本格式 | YY.MM | -| stable 版本 | 每个季度发行 | -| edge 版本 | 每个月发行 | -| 当前 Docker CE 版本 | 17.07.0 | +项目 | 说明 +--------------- | ------- +版本格式 | YY.MM +stable 版本 | 每个季度发行 +edge 版本 | 每个月发行 +当前 Docker CE 版本 | 17.10.0 同时 Docker 划分为 CE 和 EE。CE 版本即社区版(免费,支持周期三个月),EE 即企业版,强调安全,付费使用。 diff --git a/install/centos.md b/install/centos.md index d713df5..533c794 100644 --- a/install/centos.md +++ b/install/centos.md @@ -12,9 +12,9 @@ Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10 ```bash $ sudo yum remove docker \ - docker-common \ - docker-selinux \ - docker-engine + docker-common \ + docker-selinux \ + docker-engine ``` ### 使用 yum 源 安装 @@ -22,7 +22,9 @@ $ sudo yum remove docker \ 执行以下命令安装依赖包: ```bash -$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 +$ sudo yum install -y yum-utils \ + device-mapper-persistent-data \ + lvm2 ``` 鉴于国内网络问题,强烈建议使用国内源,下面先介绍国内源的使用。 @@ -34,7 +36,7 @@ $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 ```bash $ sudo yum-config-manager \ --add-repo \ - https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo + https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo ``` >以上命令会添加稳定版本的 Docker CE yum 源。从 Docker 17.06 开始,edge test 版本的 yum 源也会包含稳定版本的 Docker CE。 diff --git a/install/debian.md b/install/debian.md index 14bc56b..94a6014 100644 --- a/install/debian.md +++ b/install/debian.md @@ -18,7 +18,9 @@ Docker CE 可以安装在 64 位的 x86 平台或 ARM 平台上(如[树莓派] 旧版本的 Docker 称为 `docker` 或者 `docker-engine`,使用以下命令卸载旧版本: ```bash -$ sudo apt-get remove docker docker-engine docker.io +$ sudo apt-get remove docker \ + docker-engine \ + docker.io ``` #### Debian 7 Wheezy @@ -64,14 +66,14 @@ $ sudo apt-get install \ 为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。 ```bash -$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo apt-key add - +$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add - ``` 然后,我们需要向 `source.list` 中添加 Docker CE 软件源: ```bash $ sudo add-apt-repository \ - "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/debian \ + "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/$(. /etc/os-release; echo "$ID") \ $(lsb_release -cs) \ stable" ``` @@ -124,7 +126,7 @@ $ sudo sh get-docker.sh --mirror Aliyun ```bash $ sudo add-apt-repository \ - "deb [arch=armhf] https://mirrors.aliyun.com/docker-ce/linux/debian \ + "deb [arch=armhf] https://mirrors.ustc.edu.cn/docker-ce/linux/debian \ $(lsb_release -cs) \ stable" ``` @@ -137,6 +139,7 @@ ARM 平台不能使用 x86 镜像,查看树莓派可使用镜像请访问 [arm $ sudo systemctl enable docker $ sudo systemctl start docker ``` + Debian 7 Wheezy 请使用以下命令启动 ```bash diff --git a/install/mirror.md b/install/mirror.md index a95cb32..89810c7 100644 --- a/install/mirror.md +++ b/install/mirror.md @@ -22,53 +22,50 @@ DOCKER_OPTS="--registry-mirror=https://jxus37ad.mirror.aliyuncs.com" $ sudo service docker restart ``` -### Ubuntu 16.04、Debian 8 Jessie、CentOS 7 +### Ubuntu 16.04+、Debian 8+、CentOS 7 -对于使用 [systemd](https://www.freedesktop.org/wiki/Software/systemd/) 的系统,用 `systemctl enable docker` 启用服务后,编辑 `/etc/systemd/system/multi-user.target.wants/docker.service` 文件,找到 `ExecStart=` 这一行,在这行最后添加加速器地址 `--registry-mirror=<加速器地址>`,如: +对于使用 [systemd](https://www.freedesktop.org/wiki/Software/systemd/) 的系统,请在 `/etc/docker/daemon.json` 中写入如下内容(如果文件不存在请新建该文件) -```bash -ExecStart=/usr/bin/dockerd --registry-mirror=https://jxus37ad.mirror.aliyuncs.com +```json +{ + "registry-mirrors": [ + "https://sr5arhkn.mirror.aliyuncs.com", + ] +} ``` -*注:对于 1.12 以前的版本,`dockerd` 换成 `docker daemon`。* - -重新加载配置并且重新启动。 +之后重新启动服务。 ```bash $ sudo systemctl daemon-reload $ sudo systemctl restart docker ``` -### Windows 10 -对于使用 WINDOWS 10 的系统,在系统右下角托盘图标内右键菜单选择 `Settings`,打开配置窗口后左侧导航菜单选择 `Docker Daemon`。编辑窗口内的JSON串,填写如阿里云、DaoCloud之类的加速器地址,如: +注意:如果您之前查看旧教程,修改了 `docker.service` 文件内容,请去掉您添加的内容(`--registry-mirror=https://jxus37ad.mirror.aliyuncs.com`),这里不再赘述。 -```bash +### Windows 10 +对于使用 Windows 10 的系统,在系统右下角托盘图标内右键菜单选择 `Settings`,打开配置窗口后左侧导航菜单选择 `Docker Daemon`。编辑窗口内的JSON串,填写加速器地址,如: + +```json { "registry-mirrors": [ "https://sr5arhkn.mirror.aliyuncs.com", "http://14d216f4.m.daocloud.io" - ], - "insecure-registries": [] + ] } ``` -编辑完成,点击Apply保存后Docker服务会重新启动。 + +编辑完成,点击 Apply 保存后 Docker 服务会重新启动。 ### macOS -对于macOS的用户,如果你使用的是**Docker for Mac**,那配置起来很简单。在任务栏点击应用图标 -> Perferences... -> Daemon -> Registry mirrors。在列表中添加云服务商提供的加速器地址即可。修改完成之后,点击`Apply & Restart`按钮,Docker就会重启并应用配置的镜像地址了。 +对于使用 macOS 的用户,在任务栏点击 Docker for mac 应用图标 -> Perferences... -> Daemon -> Registry mirrors。在列表中添加云服务商提供的加速器地址即可。修改完成之后,点击 `Apply & Restart` 按钮,Docker 就会重启并应用配置的镜像地址了。 ### 检查加速器是否生效 -Linux系统下配置完加速器需要检查是否生效,在命令行执行 `ps -ef | grep dockerd`,如果从结果中看到了配置的 `--registry-mirror` 参数说明配置成功。 +配置加速器之后,如果拉取镜像仍然十分缓慢,请手动检查加速器配置是否生效,在命令行执行 `$ docker info`,如果从结果中看到了如下内容,说明配置成功。 ```bash -$ sudo ps -ef | grep dockerd -root 5346 1 0 19:03 ? 00:00:00 /usr/bin/dockerd --registry-mirror=https://jxus37ad.mirror.aliyuncs.com -$ -``` -如果`Docker`版本大于1.13或17.05.0-ce,也可以 -```bash -$ sudo docker info|grep "Registry Mirrors" -A 1 Registry Mirrors: https://registry.docker-cn.com/ ``` diff --git a/install/ubuntu.md b/install/ubuntu.md index b462600..fb87873 100644 --- a/install/ubuntu.md +++ b/install/ubuntu.md @@ -18,7 +18,9 @@ Docker CE 可以安装在 64 位的 x86 平台或 ARM 平台上。Ubuntu 发行 旧版本的 Docker 称为 `docker` 或者 `docker-engine`,使用以下命令卸载旧版本: ```bash -$ sudo apt-get remove docker docker-engine docker.io +$ sudo apt-get remove docker \ + docker-engine \ + docker.io ``` #### Ubuntu 14.04 可选内核模块 @@ -56,14 +58,14 @@ $ sudo apt-get install \ 为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。 ```bash -$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - +$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - ``` 然后,我们需要向 `source.list` 中添加 Docker 软件源 ```bash $ sudo add-apt-repository \ - "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \ + "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \ $(lsb_release -cs) \ stable" ``` diff --git a/introduction/what.md b/introduction/what.md index 18a7553..7b3ef7a 100644 --- a/introduction/what.md +++ b/introduction/what.md @@ -1,6 +1,6 @@ ## 什么是 Docker -Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 [2013 年 3 月以 Apache 2.0 授权协议开源][docker-soft],主要项目代码在 [GitHub](https://github.com/docker/docker) 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 [开放容器联盟](https://www.opencontainers.org/)。 +Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 [2013 年 3 月以 Apache 2.0 授权协议开源][docker-soft],主要项目代码在 [GitHub](https://github.com/moby/moby) 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 [开放容器联盟](https://www.opencontainers.org/)。 Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 3 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,[dotCloud 公司决定改名为 Docker](https://blog.docker.com/2013/10/dotcloud-is-becoming-docker-inc/)。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。 diff --git a/network/README.md b/network/README.md index bdf8728..99228fe 100644 --- a/network/README.md +++ b/network/README.md @@ -1,2 +1,4 @@ # Docker 中的网络功能介绍 Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。 + +Docker 在 1.13 版本引进了新的管理命令(management commands),在 Docker 1.13+ 推荐使用 `docker network` 子命令来管理 Docker 网络。 diff --git a/repository/dockerhub.md b/repository/dockerhub.md index 4971026..7622eb3 100644 --- a/repository/dockerhub.md +++ b/repository/dockerhub.md @@ -1,12 +1,13 @@ ## Docker Hub 目前 Docker 官方维护了一个公共仓库 [Docker Hub](https://hub.docker.com/),其中已经包括了超过 15,000 的镜像。大部分需求,都可以通过在 Docker Hub 中直接下载镜像来实现。 - +### 注册 +你可以在 https://hub.docker.com 免费注册一个 Docker 账号。 ### 登录 -可以通过执行 `docker login` 命令来输入用户名、密码和邮箱来完成注册和登录。 -注册成功后,本地用户目录的 `.dockercfg` 中将保存用户的认证信息。 +可以通过执行 `docker login` 命令交互式的输入用户名及密码来完成在命令行界面的登录。 +登录成功后,本地用户目录的 `.dockercfg` 中将保存用户的认证信息。 ### 基本操作 -用户无需登录即可通过 `docker search` 命令来查找官方仓库中的镜像,并利用 `docker pull` 命令来将它下载到本地。 +你可以通过 `docker search` 命令来查找官方仓库中的镜像,并利用 `docker pull` 命令来将它下载到本地。 例如以 centos 为关键词进行搜索: ``` diff --git a/repository/local_repo.md b/repository/local_repo.md index e2297ca..569b0ac 100644 --- a/repository/local_repo.md +++ b/repository/local_repo.md @@ -9,12 +9,12 @@ #### 容器运行 在安装了 Docker 后,可以通过获取官方 registry 镜像来运行。 ``` -$ sudo docker run -d -p 5000:5000 registry +$ docker run -d -p 5000:5000 registry ``` 这将使用官方的 registry 镜像来启动本地的私有仓库。 用户可以通过指定参数来配置私有仓库位置,例如配置镜像存储到 Amazon S3 服务。 ``` -$ sudo docker run \ +$ docker run \ -e SETTINGS_FLAVOR=s3 \ -e AWS_BUCKET=acme-docker \ -e STORAGE_PATH=/registry \ @@ -26,45 +26,27 @@ $ sudo docker run \ ```` 此外,还可以指定本地路径(如 `/home/user/registry-conf` )下的配置文件。 ``` -$ sudo docker run -d -p 5000:5000 -v /home/user/registry-conf:/registry-conf -e DOCKER_REGISTRY_CONFIG=/registry-conf/config.yml registry +$ docker run -d \ + -p 5000:5000 \ + -v /home/user/registry-conf:/registry-conf \ + -e DOCKER_REGISTRY_CONFIG=/registry-conf/config.yml \ + registry ``` 默认情况下,仓库会被创建在容器的 `/var/lib/registry `(v1 中是`/tmp/registry`)下。可以通过 `-v` 参数来将镜像文件存放在本地的指定路径。 例如下面的例子将上传的镜像放到 `/opt/data/registry` 目录。 ``` -$ sudo docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry +$ docker run -d \ + -p 5000:5000 \ + -v /opt/data/registry:/var/lib/registry \ + registry ``` -#### 本地安装 -对于 Ubuntu 或 CentOS 等发行版,可以直接通过源安装。 -* Ubuntu -``` -$ sudo apt-get install -y build-essential python-dev libevent-dev python-pip liblzma-dev -$ sudo pip install docker-registry -``` -* CentOS -``` -$ sudo yum install -y python-devel libevent-devel python-pip gcc xz-devel -$ sudo python-pip install docker-registry -``` - -也可以从 [docker-registry](https://github.com/docker/docker-registry) 项目下载源码进行安装。 -``` -$ sudo apt-get install build-essential python-dev libevent-dev python-pip libssl-dev liblzma-dev libffi-dev -$ git clone https://github.com/docker/distribution -$ cd distribution -$ sudo docker build . -``` -启动运行registry的容器 -``` -$ sudo docker run -d -p 5000:5000 --restart=always --name registry ${IMAGE_ID} -``` - -###在私有仓库上传、下载、搜索镜像 +### 在私有仓库上传、下载、搜索镜像 创建好私有仓库之后,就可以使用 `docker tag` 来标记一个镜像,然后推送它到仓库,别的机器上就可以下载下来了。例如私有仓库地址为 `192.168.7.26:5000`。 先在本机查看已有的镜像。 ``` -$ sudo docker images +$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB ubuntu 14.04 ba5877dc9bec 6 weeks ago 192.7 MB @@ -72,7 +54,7 @@ ubuntu 14.04 ba5877dc9bec 6 week 使用`docker tag` 将 `ba58` 这个镜像标记为 `192.168.7.26:5000/test`(格式为 `docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]`)。 ``` -$ sudo docker tag ba58 192.168.7.26:5000/test +$ docker tag ba58 192.168.7.26:5000/test root ~ # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 ba5877dc9bec 6 weeks ago 192.7 MB @@ -81,7 +63,7 @@ ubuntu latest ba5877dc9bec 6 week ``` 使用 `docker push` 上传标记的镜像。 ``` -$ sudo docker push 192.168.7.26:5000/test +$ docker push 192.168.7.26:5000/test The push refers to a repository [192.168.7.26:5000/test] (len: 1) Sending image list Pushing repository 192.168.7.26:5000/test (1 tags) @@ -102,7 +84,7 @@ $ curl http://192.168.7.26:5000/v1/search 现在可以到另外一台机器去下载这个镜像。 ``` -$ sudo docker pull 192.168.7.26:5000/test +$ docker pull 192.168.7.26:5000/test Pulling repository 192.168.7.26:5000/test ba5877dc9bec: Download complete 511136ea3c5a: Download complete @@ -110,38 +92,23 @@ ba5877dc9bec: Download complete 25f11f5fb0cb: Download complete ebc34468f71d: Download complete 2318d26665ef: Download complete -$ sudo docker images +$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 192.168.7.26:5000/test latest ba5877dc9bec 6 weeks ago 192.7 MB ``` -可以使用 [这个脚本](https://github.com/yeasy/docker_practice/raw/master/_local/push_images.sh) 批量上传本地的镜像到注册服务器中,默认是本地注册服务器 `127.0.0.1:5000`。例如: -``` -$ wget https://github.com/yeasy/docker_practice/raw/master/_local/push_images.sh; sudo chmod a+x push_images.sh -$ ./push_images.sh ubuntu:latest centos:centos7 -The registry server is 127.0.0.1 -Uploading ubuntu:latest... -The push refers to a repository [127.0.0.1:5000/ubuntu] (len: 1) -Sending image list -Pushing repository 127.0.0.1:5000/ubuntu (1 tags) -Image 511136ea3c5a already pushed, skipping -Image bfb8b5a2ad34 already pushed, skipping -Image c1f3bdbd8355 already pushed, skipping -Image 897578f527ae already pushed, skipping -Image 9387bcc9826e already pushed, skipping -Image 809ed259f845 already pushed, skipping -Image 96864a7d2df3 already pushed, skipping -Pushing tag for rev [96864a7d2df3] on {http://127.0.0.1:5000/v1/repositories/ubuntu/tags/latest} -Untagged: 127.0.0.1:5000/ubuntu:latest -Done -Uploading centos:centos7... -The push refers to a repository [127.0.0.1:5000/centos] (len: 1) -Sending image list -Pushing repository 127.0.0.1:5000/centos (1 tags) -Image 511136ea3c5a already pushed, skipping -34e94e67e63a: Image successfully pushed -70214e5d0a90: Image successfully pushed -Pushing tag for rev [70214e5d0a90] on {http://127.0.0.1:5000/v1/repositories/centos/tags/centos7} -Untagged: 127.0.0.1:5000/centos:centos7 -Done +可以使用 `docker-compose push` 批量上传本地的镜像到私有 Docker 仓库,这里以 `127.0.0.1:5000` 为例: + +编写 `docker-compose.yml` 文件 + +```yaml +version: "3.4" +services: + + ubuntu: + image: 127.0.0.1:5000/ubuntu:latest + centos: + image: 127.0.0.1:5000/centos:centos7 ``` + +在该文件路径下执行 `docker-compose push` 即可将上面的两个镜像上传到私有仓库中。