github.com/sijibomii/docker@v0.0.0-20231230191044-5cf6ca554647/docs/README.md (about)

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