github.com/opiuman/docker@v1.6.0/docs/README.md (about)

     1  # Docker Documentation
     2  
     3  The source for Docker documentation is in this directory under `sources/`. Our
     4  documentation uses extended Markdown, as implemented by
     5  [MkDocs](http://mkdocs.org).  The current release of the Docker documentation
     6  resides on [http://docs.docker.com](http://docs.docker.com).
     7  
     8  ## Understanding the documentation branches and processes
     9  
    10  Docker has two primary branches for documentation:
    11  
    12  | Branch   | Description                    | URL (published via commit-hook)                                              |
    13  |----------|--------------------------------|------------------------------------------------------------------------------|
    14  | `docs`   | Official release documentation | [http://docs.docker.com](http://docs.docker.com)                             |
    15  | `master` | Merged but unreleased development work    | [http://docs.master.dockerproject.com](http://docs.master.dockerproject.com) |
    16  
    17  Additions and updates to upcoming releases are made in a feature branch off of
    18  the `master` branch. The Docker maintainers also support a `docs` branch that
    19  contains the last release of documentation.
    20  
    21  After a release, documentation updates are continually merged into `master` as
    22  they occur. This work includes new documentation for forthcoming features, bug
    23  fixes, and other updates. Docker's CI system automatically builds and updates
    24  the `master` documentation after each merge and posts it to
    25  [http://docs.master.dockerproject.com](http://docs.master.dockerproject.com). 
    26  
    27  Periodically, the Docker maintainers update `docs.docker.com` between official
    28  releases of Docker. They do this by cherry-picking commits from `master`,
    29  merging them into `docs`,  and then publishing the result.
    30  
    31  In the rare case where a change is not forward-compatible, changes may be made
    32  on other branches by special arrangement with the Docker maintainers.
    33  
    34  ### Quickstart for documentation contributors
    35  
    36  If you are a new or beginner contributor, we encourage you to read through the
    37  [our detailed contributors
    38  guide](https://docs.docker.com/project/who-written-for/). The guide explains in
    39  detail, with examples, how to contribute. If you are an experienced contributor
    40  this quickstart should be enough to get you started.
    41  
    42  The following is the essential workflow for contributing to the documentation:
    43  
    44  1. Fork the `docker/docker` repository.
    45  
    46  2. Clone the repository to your local machine.
    47  
    48  3. Select an issue from `docker/docker` to work on or submit a proposal of your
    49  own.
    50  
    51  4. Create a feature branch from `master` in which to work.
    52  
    53  	By basing from `master` your work is automatically included in the next
    54  	release. It also allows docs maintainers to easily cherry-pick your changes
    55  	into the `docs` release branch. 
    56  
    57  4. Modify existing or add new `.md` files to the `docs/sources` directory.
    58  
    59  	If you add a new document (`.md`) file, you must also add it to the
    60  	appropriate section of the `docs/mkdocs.yml` file in this repository.
    61  
    62  
    63  5.  As you work, build the documentation site locally to see your changes.
    64  
    65  	The `docker/docker` repository contains a `Dockerfile` and a `Makefile`.
    66  	Together, these create a development environment in which you can build and
    67  	run a container running the Docker documentation website. To build the
    68  	documentation site, enter `make docs` at the root of your `docker/docker`
    69  	fork:
    70  	
    71  		$ make docs
    72  		.... (lots of output) ....
    73  		docker run --rm -it  -e AWS_S3_BUCKET -p 8000:8000 "docker-docs:master" mkdocs serve
    74  		Running at: http://0.0.0.0:8000/
    75  		Live reload enabled.
    76  		Hold ctrl+c to quit.
    77  	
    78  	
    79  	The build creates an image containing all the required tools, adds the local
    80  	`docs/` directory and generates the HTML files. Then, it runs a Docker
    81  	container with this image.
    82  
    83  	The container exposes port 8000 on the localhost so that you can connect and
    84  	see your changes. If you are running Boot2Docker, use the `boot2docker ip`
    85  	to get the address of your server.
    86  
    87  6.  Check your writing for style and mechanical errors.
    88  
    89  	Use our [documentation style
    90  	guide](https://docs.docker.com/project/doc-style/) to check style. There are
    91  	several [good grammar and spelling online
    92  	checkers](http://www.hemingwayapp.com/) that can check your writing
    93  	mechanics.
    94  
    95  7.  Squash your commits on your branch.
    96  
    97  8.  Make a pull request from your fork back to Docker's `master` branch.
    98  
    99  9.  Work with the reviewers until your change is approved and merged.
   100  
   101  ### Debugging and testing
   102  
   103  If you have any issues you need to debug, you can use `make docs-shell` and then
   104  run `mkdocs serve`. You can use `make docs-test` to generate a report of missing
   105  links that are referenced in the documentation—there should be none.
   106  
   107  ## Style guide
   108  
   109  If you have questions about how to write for Docker's documentation, please see
   110  the [style guide](sources/project/doc-style.md). The style guide provides
   111  guidance about grammar, syntax, formatting, styling, language, or tone. If
   112  something isn't clear in the guide, please submit an issue to let us know or
   113  submit a pull request to help us improve it.
   114  
   115  
   116  ## Publishing documentation (for Docker maintainers)
   117  
   118  To publish Docker's documentation you need to have Docker up and running on your
   119  machine. You'll also need a `docs/awsconfig` file containing the settings you
   120  need to access the AWS bucket you'll be deploying to.
   121  
   122  The process for publishing is to build first to an AWS bucket, verify the build,
   123  and then publish the final release.
   124  
   125  1. Have Docker installed and running on your machine.
   126  
   127  2. Ask the core maintainers for the `awsconfig` file.
   128  
   129  3. Copy the `awsconfig` file to the `docs/` directory.
   130  
   131  	The `awsconfig` file contains the profiles of the S3 buckets for our
   132  	documentation sites. (If needed, the release script creates an S3 bucket and
   133  	pushes the files to it.)  Each profile has this format:
   134  
   135  		[profile dowideit-docs]
   136  		aws_access_key_id = IHOIUAHSIDH234rwf....
   137  		aws_secret_access_key = OIUYSADJHLKUHQWIUHE......
   138  		region = ap-southeast-2
   139  
   140  	The `profile` name must be the same as the name of the bucket you are
   141  	deploying to.
   142  
   143  4. Call the `make` from the `docker` directory.
   144  
   145      	$ make AWS_S3_BUCKET=dowideit-docs docs-release
   146  
   147  	This publishes _only_ to the `http://bucket-url/v1.2/` version of the
   148  	documentation.
   149  
   150  5.  If you're publishing the current release's documentation, you need to also
   151  update the root docs pages by running
   152  
   153       	$ make AWS_S3_BUCKET=dowideit-docs BUILD_ROOT=yes docs-release
   154  
   155  ### Errors publishing using Boot2Docker
   156  
   157  Sometimes, in a Boot2Docker environment, the publishing procedure returns this
   158  error:
   159  
   160  	Post http:///var/run/docker.sock/build?rm=1&t=docker-docs%3Apost-1.2.0-docs_update-2:
   161  	dial unix /var/run/docker.sock: no such file or directory.
   162  
   163  If this happens, set the Docker host. Run the following command to set the
   164  variables in your shell:
   165  
   166  		$ eval "$(boot2docker shellinit)"
   167  
   168  ## Cherry-picking documentation changes to update an existing release.
   169  
   170  Whenever the core team makes a release, they publish the documentation based on
   171  the `release` branch. At that time, the  `release` branch is copied into the
   172  `docs` branch. The documentation team makes updates between Docker releases by
   173  cherry-picking changes from `master` into any of the documentation branches.
   174  Typically, we cherry-pick into the `docs` branch.
   175  
   176  For example, to update the current release's docs, do the following:
   177  
   178  1. Go to your `docker/docker` fork and get the latest from master.
   179  
   180      	$ git fetch upstream
   181          
   182  2. Checkout a new branch based on `upstream/docs`.
   183  
   184  	You should give your new branch a descriptive name.
   185  
   186  		$ git checkout -b post-1.2.0-docs-update-1 upstream/docs
   187  	
   188  3. In a browser window, open [https://github.com/docker/docker/commits/master].
   189  
   190  4. Locate the merges you want to publish.
   191  
   192  	You should only cherry-pick individual commits; do not cherry-pick merge
   193  	commits. To minimize merge conflicts, start with the oldest commit and work
   194  	your way forward in time.
   195  
   196  5. Copy the commit SHA from GitHub.
   197  
   198  6. Cherry-pick the commit.
   199  	
   200  	 	$ git cherry-pick -x fe845c4
   201  	
   202  7. Repeat until you have cherry-picked everything you want to merge.
   203  
   204  8. Push your changes to your fork.
   205  
   206      	$ git push origin post-1.2.0-docs-update-1
   207  
   208  9. Make a pull request to merge into the `docs` branch.
   209  
   210  	Do __NOT__ merge into `master`.
   211  
   212  10. Have maintainers review your pull request.
   213  
   214  11. Once the PR has the needed "LGTMs", merge it on GitHub.
   215  
   216  12. Return to your local fork and make sure you are still on the `docs` branch.
   217  
   218  		$ git checkout docs
   219  
   220  13. Fetch your merged pull request from `docs`.
   221  
   222  		$ git fetch upstream/docs
   223  	
   224  14. Ensure your branch is clean and set to the latest.
   225  
   226     	 	$ git reset --hard upstream/docs
   227      
   228  15. Copy the `awsconfig` file into the `docs` directory.
   229      
   230  16. Make the beta documentation
   231  
   232      	$ make AWS_S3_BUCKET=beta-docs.docker.io BUILD_ROOT=yes docs-release
   233  
   234  17. Open [the beta
   235  website](http://beta-docs.docker.io.s3-website-us-west-2.amazonaws.com/) site
   236  and make sure what you published is correct.
   237  
   238  19. When you're happy with your content, publish the docs to our live site:
   239  
   240     		$ make AWS_S3_BUCKET=docs.docker.com BUILD_ROOT=yes
   241  DISTRIBUTION_ID=C2K6......FL2F docs-release
   242  
   243  20. Test the uncached version of the live docs at [http://docs.docker.com.s3-website-us-east-1.amazonaws.com/]
   244  
   245  
   246  ### Caching and the docs
   247  
   248  New docs do not appear live on the site until the cache (a complex, distributed
   249  CDN system) is flushed. The `make docs-release` command flushes the cache _if_
   250  the `DISTRIBUTION_ID` is set to the Cloudfront distribution ID. The cache flush
   251  can take at least 15 minutes to run and you can check its progress with the CDN
   252  Cloudfront Purge Tool Chrome app.
   253  
   254  ## Removing files from the docs.docker.com site
   255  
   256  Sometimes it becomes necessary to remove files from the historical published documentation.
   257  The most reliable way to do this is to do it directly using `aws s3` commands running in a
   258  docs container:
   259  
   260  Start the docs container like `make docs-shell`, but bind mount in your `awsconfig`:
   261  
   262  ```
   263  docker run --rm -it -v $(CURDIR)/docs/awsconfig:/docs/awsconfig docker-docs:master bash
   264  ```
   265  
   266  and then the following example shows deleting 2 documents from s3, and then requesting the
   267  CloudFlare cache to invalidate them:
   268  
   269  
   270  ```
   271  export BUCKET BUCKET=docs.docker.com
   272  export AWS_CONFIG_FILE=$(pwd)/awsconfig
   273  aws s3 --profile $BUCKET ls s3://$BUCKET
   274  aws s3 --profile $BUCKET rm s3://$BUCKET/v1.0/reference/api/docker_io_oauth_api/index.html
   275  aws s3 --profile $BUCKET rm s3://$BUCKET/v1.1/reference/api/docker_io_oauth_api/index.html
   276  
   277  aws configure set preview.cloudfront true
   278  export DISTRIBUTION_ID=YUTIYUTIUTIUYTIUT
   279  aws cloudfront  create-invalidation --profile docs.docker.com --distribution-id $DISTRIBUTION_ID --invalidation-batch '{"Paths":{"Quantity":1, "Items":["/v1.0/reference/api/docker_io_oauth_api/"]},"CallerReference":"6Mar2015sventest1"}'
   280  aws cloudfront  create-invalidation --profile docs.docker.com --distribution-id $DISTRIBUTION_ID --invalidation-batch '{"Paths":{"Quantity":1, "Items":["/v1.1/reference/api/docker_io_oauth_api/"]},"CallerReference":"6Mar2015sventest1"}'
   281  ```
   282