1
0
mirror of https://github.com/openshift/openshift-docs.git synced 2026-02-05 21:46:22 +01:00

OSDOCS-347 Bring forward Creating new applications content

This commit is contained in:
bmcelvee
2019-06-03 15:22:47 -04:00
parent a8a0d8beca
commit 54ffeb6880
6 changed files with 507 additions and 0 deletions

View File

@@ -537,6 +537,11 @@ Topics:
Distros: openshift-origin
- Name: Appendices
File: osdk-appendices
- Name: Application life cycle management
Dir: application-life-cycle-management
Topics:
- Name: Creating applications
File: creating-new-applications
---
Name: Machine management
Dir: machine_management

View File

@@ -0,0 +1,23 @@
[id="creating-new-applications"]
= Creating applications
include::modules/common-attributes.adoc[]
:context: creating-new-applications
toc::[]
You can create an {product-title} application from components that include
source or binary code, images, and templates by using the {product-title}
CLI.
The set of objects created by `new-app` depends on the artifacts passed as
input: source repositories, images, or templates.
[id="creating-application-using-cli-{context}"]
== Creating an application by using the CLI
include::modules/applications-create-using-cli-source-code.adoc[leveloffset=+2]
include::modules/applications-create-using-cli-image.adoc[leveloffset=+2]
include::modules/applications-create-using-cli-template.adoc[leveloffset=+2]
include::modules/applications-create-using-cli-modify.adoc[leveloffset=+2]

View File

@@ -0,0 +1,46 @@
// Module included in the following assemblies:
//
// * applications/creating-new-applications.adoc
[id="applications-create-using-cli-image-{context}"]
= Creating an application from an image
You can deploy an application from an existing image. Images can come from
imagestreams in the {product-title} server, images in a specific registry, or
images in the local Docker server.
The `new-app` command attempts to determine the type of image specified in the
arguments passed to it. However, you can explicitly tell `new-app` whether the
image is a container image using the `--docker-image` argument or an imagestream
using the `-i|--image` argument.
[NOTE]
====
If you specify an image from your local Docker repository, you must ensure that
the same image is available to the {product-title} cluster nodes.
====
== DockerHub MySQL image
Create an application from the DockerHub MySQL image, for example:
----
$ oc new-app mysql
----
== Image in a private registry
Create an application using an image in a private registry, specify the full
container image specification:
----
$ oc new-app myregistry:5000/example/myimage
----
== Existing imagestream and optional imagestreamtag
Create an application from an existing imagestream and optional imagestreamtag:
----
$ oc new-app my-stream:v1
----

View File

@@ -0,0 +1,213 @@
// Module included in the following assemblies:
//
// * applications/creating-new-applications.adoc
[id="applications-create-using-cli-modify-{context}"]
= Modifying application creation
The `new-app` command generates {product-title} objects that build, deploy, and
run the application that is created. Normally, these objects are created in the
current project and assigned names that are derived from the input source
repositories or the input images. However, with `new-app` you can modify this
behavior.
.`new-app` output objects
[cols="2,8",options="header"]
|===
|Object |Description
|`BuildConfig`
|A `BuildConfig` is created for each source repository that is specified in the
command line. The `BuildConfig` specifies the strategy to use, the source
location, and the build output location.
|`ImageStreams`
|For `BuildConfig`, two `ImageStreams` are usually created. One
represents the input image. With `Source` builds, this is the builder image.
ifndef::openshift-online[]
With `Docker` builds, this is the *FROM* image.
endif::[]
The second one represents the output image. If a container image was specified
as input to `new-app`, then an imagestream is created for that image as well.
|`DeploymentConfig`
|A `DeploymentConfig` is created either to deploy the output of a build, or a
specified image. The `new-app` command creates `emptyDir` volumes for all Docker
volumes that are specified in containers included in the resulting
`DeploymentConfig`.
|`Service`
|The `new-app` command attempts to detect exposed ports in input images. It
uses the lowest numeric exposed port to generate a service that exposes that
port. In order to expose a different port, after `new-app` has completed, simply
use the `oc expose` command to generate additional services.
|Other
|Other objects can be generated when instantiating templates, according to the
template.
|===
== Specifying environment variables
When generating applications from a template, source, or an image, you can use
the `-e|--env` argument to pass environment variables to the application
container at run time:
----
$ oc new-app openshift/postgresql-92-centos7 \
-e POSTGRESQL_USER=user \
-e POSTGRESQL_DATABASE=db \
-e POSTGRESQL_PASSWORD=password
----
The variables can also be read from file using the `--env-file` argument:
----
$ cat postgresql.env
POSTGRESQL_USER=user
POSTGRESQL_DATABASE=db
POSTGRESQL_PASSWORD=password
$ oc new-app openshift/postgresql-92-centos7 --env-file=postgresql.env
----
Additionally, environment variables can be given on standard input by using
`--env-file=-`:
----
$ cat postgresql.env | oc new-app openshift/postgresql-92-centos7 --env-file=-
----
[NOTE]
====
Any `BuildConfig` objects created as part of `new-app` processing are not
updated with environment variables passed with the `-e|--env` or `--env-file` argument.
====
== Specifying build environment variables
When generating applications from a template, source, or an image, you can use
the `--build-env` argument to pass environment variables to the build container
at run time:
----
$ oc new-app openshift/ruby-23-centos7 \
--build-env HTTP_PROXY=http://myproxy.net:1337/ \
--build-env GEM_HOME=~/.gem
----
The variables can also be read from a file using the `--build-env-file` argument:
----
$ cat ruby.env
HTTP_PROXY=http://myproxy.net:1337/
GEM_HOME=~/.gem
$ oc new-app openshift/ruby-23-centos7 --build-env-file=ruby.env
----
Additionally, environment variables can be given on standard input by using
`--build-env-file=-`:
----
$ cat ruby.env | oc new-app openshift/ruby-23-centos7 --build-env-file=-
----
== Specifying labels
When generating applications from source, images, or templates, you
can use the `-l|--label` argument to add labels to the created objects. Labels
make it easy to collectively select, configure, and delete objects associated
with the application.
----
$ oc new-app https://github.com/openshift/ruby-hello-world -l name=hello-world
----
== Viewing the output without creation
To see a dry-run of running the `new-app` command, you can use the `-o|--output`
argument with a `yaml` or `json` value. You can then use the output to preview
the objects that are created or redirect it to a file that you can edit.
After you are satisfied, you can use `oc create` to create the {product-title}
objects.
To output `new-app` artifacts to a file, edit them, then create them:
----
$ oc new-app https://github.com/openshift/ruby-hello-world \
-o yaml > myapp.yaml
$ vi myapp.yaml
$ oc create -f myapp.yaml
----
== Creating objects with different names
Objects created by `new-app` are normally named after the source repository, or
the image used to generate them. You can set the name of the objects produced by
adding a `--name` flag to the command:
----
$ oc new-app https://github.com/openshift/ruby-hello-world --name=myapp
----
== Creating objects in a different project
Normally, `new-app` creates objects in the current project. However, you can
create objects in a different project by using the `-n|--namespace` argument:
----
$ oc new-app https://github.com/openshift/ruby-hello-world -n myproject
----
== Creating multiple objects
The `new-app` command allows creating multiple applications specifying multiple
parameters to `new-app`. Labels specified in the command line apply to all
objects created by the single command. Environment variables apply to all
components created from source or images.
To create an application from a source repository and a Docker Hub image:
----
$ oc new-app https://github.com/openshift/ruby-hello-world mysql
----
[NOTE]
====
If a source code repository and a builder image are specified as separate
arguments, `new-app` uses the builder image as the builder for the source code
repository. If this is not the intent, specify the required builder image for
the source using the `~` separator.
====
== Grouping images and source in a single Pod
The `new-app` command allows deploying multiple images together in a single Pod.
In order to specify which images to group together, use the `+` separator. The
`--group` command line argument can also be used to specify the images that should
be grouped together. To group the image built from a source repository with
other images, specify its builder image in the group:
----
$ oc new-app ruby+mysql
----
To deploy an image built from source and an external image together:
----
$ oc new-app \
ruby~https://github.com/openshift/ruby-hello-world \
mysql \
--group=ruby+mysql
----
== Searching for images, templates, and other inputs
To search for images, templates, and other inputs for the `oc new-app` command,
add the `--search` and `--list` flags. For example, to find all of the images or
templates that include PHP:
----
$ oc new-app --search php
----

View File

@@ -0,0 +1,173 @@
// Module included in the following assemblies:
//
// * applications/creating-new-applications.adoc
[id="applications-create-using-cli-source-code-{context}"]
= Creating an application from source code
With the `new-app` command you can create applications from source code in a
local or remote Git repository.
The `new-app` command creates a build configuration, which itself creates a new
application image from your source code. The `new-app` command typically also
creates a deployment configuration to deploy the new image, and a service to
provide load-balanced access to the deployment running your image.
{product-title} automatically detects whether the `Pipeline` or `Source`
build strategy should be used, and in the case of `Source` builds,
detects an appropriate language builder image.
== Local
To create an application from a Git repository in a local directory:
----
$ oc new-app /<path to source code>
----
[NOTE]
====
If you use a local Git repository, the repository must have a remote named
`origin` that points to a URL that is accessible by the {product-title} cluster. If
there is no recognized remote, running the `new-app` command will create a binary build.
====
== Remote
To create an application from a remote Git repository:
----
$ oc new-app https://github.com/sclorg/cakephp-ex
----
To create an application from a private remote Git repository:
----
$ oc new-app https://github.com/youruser/yourprivaterepo --source-secret=yoursecret
----
[NOTE]
====
If you use a private remote Git repository, you can use the `--source-secret` flag
to specify an existing source clone secret that will get injected into your
`BuildConfig` to access the repository.
====
You can use a subdirectory of your source code repository by specifying a
`--context-dir` flag. To create an application from a remote Git repository and
a context subdirectory:
----
$ oc new-app https://github.com/sclorg/s2i-ruby-container.git \
--context-dir=2.0/test/puma-test-app
----
Also, when specifying a remote URL, you can specify a Git branch to use by
appending `#<branch_name>` to the end of the URL:
----
$ oc new-app https://github.com/openshift/ruby-hello-world.git#beta4
----
== Build strategy detection
If a `Jenkinsfile` exists in the root or specified context directory of the
source repository when creating a new application, {product-title} generates a
Pipeline build strategy.
Otherwise, it generates a Source build strategy.
Override the build strategy by setting the `--strategy` flag to either
`pipeline` or `source`.
----
$ oc new-app /home/user/code/myapp --strategy=docker
----
[NOTE]
====
The `oc` command requires that files containing build sources are available in a
remote Git repository. For all source builds, you must use `git remote -v`.
====
== Language Detection
If you use the `Source` build strategy, `new-app` attempts to determine the
language builder to use by the presence of certain files in the root or
specified context directory of the repository:
.Languages Detected by `new-app`
[cols="4,8",options="header"]
|===
|Language |Files
ifdef::openshift-enterprise,openshift-dedicated,openshift-aro,openshift-online[]
|`dotnet`
|`project.json`, `pass:[*.csproj]`
endif::[]
|`jee`
|`pom.xml`
|`nodejs`
|`app.json`, `package.json`
|`perl`
|`cpanfile`, `index.pl`
|`php`
|`composer.json`, `index.php`
|`python`
|`requirements.txt`, `setup.py`
|`ruby`
|`Gemfile`, `Rakefile`, `config.ru`
|`scala`
|`build.sbt`
|`golang`
|`Godeps`, `main.go`
|===
After a language is detected, `new-app` searches the {product-title} server for
imagestreamtags that have a `supports` annotation matching the detected language,
or an imagestream that matches the name of the detected language. If a match is
not found, `new-app` searches the link:https://registry.hub.docker.com[Docker Hub
registry] for an image that matches the detected language based on name.
You can override the image the builder uses for a particular source
repository by specifying the image, either an imagestream or container
specification, and the repository with a `~` as a separator. Note that if this
is done, build strategy detection and language detection are not carried out.
For example, to use the `myproject/my-ruby` imagestream with the source in a
remote repository:
----
$ oc new-app myproject/my-ruby~https://github.com/openshift/ruby-hello-world.git
----
To use the `openshift/ruby-20-centos7:latest `container imagestream with
the source in a local repository:
----
$ oc new-app openshift/ruby-20-centos7:latest~/home/user/code/my-ruby-app
----
[NOTE]
====
Language detection requires the Git client to be locally installed so that your
repository can be cloned and inspected. If Git is not available, you can avoid
the language detection step by specifying the builder image to use with your
repository with the `<image>~<repository>` syntax.
The `-i <image> <repository>` invocation requires that `new-app` attempt
to clone `repository` in order to determine what type of artifact it is, so this
will fail if Git is not available.
The `-i <image> --code <repository>` invocation requires
`new-app` clone `repository` in order to determine whether `image` should be
used as a builder for the source code, or deployed separately, as in the case of
a database image.
====

View File

@@ -0,0 +1,47 @@
// Module included in the following assemblies:
//
// * applications/creating-new-applications.adoc
[id="applications-create-using-cli-template-{context}"]
= Creating an application from a template
You can create an application from a previously stored template or from a
template file, by specifying the name of the template as an argument. For
example, you can store a sample application template and use it to create an
application.
Create an application from a stored template, for example:
----
$ oc create -f examples/sample-app/application-template-stibuild.json
$ oc new-app ruby-helloworld-sample
----
To directly use a template in your local file system, without first storing it
in {product-title}, use the `-f|--file` argument. For example:
----
$ oc new-app -f examples/sample-app/application-template-stibuild.json
----
== Template Parameters
When creating an application based on a template, use the
`-p|--param` argument to set parameter values that are defined by the template:
----
$ oc new-app ruby-helloworld-sample \
-p ADMIN_USERNAME=admin -p ADMIN_PASSWORD=mypassword
----
You can store your parameters in a file, then use that file with
`--param-file` when instantiating a template. If you want to read the
parameters from standard input, use `--param-file=-`:
----
$ cat helloworld.params
ADMIN_USERNAME=admin
ADMIN_PASSWORD=mypassword
$ oc new-app ruby-helloworld-sample --param-file=helloworld.params
$ cat helloworld.params | oc new-app ruby-helloworld-sample --param-file=-
----