IBM Cloud Docs
Deploying app workloads from images in IBM Cloud Container Registry

Deploying app workloads from images in IBM Cloud Container Registry

Deploy your app with Code Engine that uses an image in IBM Cloud® Container Registry. You can create an app from the console or with the CLI.

Before you begin

Interested in configuring your project such that all users of the project can store and access images in Container Registry without having to manually create registry secrets? With sufficient permissions, you can configure this default registry access on a per location (region) basis. If you don't have sufficient permissions to perform these actions, you can use this page to help you understand the required permissions. See Configuring project-wide settings.

Deploying an app that references an image in Container Registry with the console

Deploy an application that uses an image in Container Registry by using the Code Engine console.

Code Engine can automatically pull images from a Container Registry namespace in your account. To pull images from a different Container Registry account or from a private Docker Hub account, see Deploying application workloads from images in a private registry.

  1. Open the Code Engine console.
  2. Select Let's go.
  3. Select Application.
  4. Enter a name for the application; for example, helloapp. Use a name for your application that is unique within the project.
  5. Select a project from the list of available projects. You can also create a new one. You must have a selected project to deploy an app.
  6. Select Container image and click Configure image.
  7. Select a container registry location, such as IBM Registry Dallas.
  8. Select Code Engine managed secret for Registry secret. Because this example uses an image in a Container Registry namespace in your account, Code Engine can automatically create and manage the registry secret for you.
  9. Select an existing namespace and name of the image in the registry for the Code Engine app to reference. For example, select mynamespace and select the image hello_repo in that namespace.
  10. Select a value for Tag; for example, latest.
  11. Click Done.
  12. Modify any runtime settings or environment variables for your app. For more information about these options, see Options for endpoint visibility of apps and Options for deploying an app.
  13. Click Create to create the application.
  14. After the application status changes to Ready, you can test the application. Click Test application and then click Send request in the Test application pane. To open the application in a web page, click Application URL.

Now that you have deployed your application, you can view information about application revisions and any running instances, and configuration details.

If you want to add registry access to a Container Registry instance that is not in your account, see Adding access to a Container Registry.

Deploying an app with an image in Container Registry with the CLI

Deploy an application that uses an image in IBM Cloud® Container Registry with the CLI with the ibmcloud ce app create command. For a complete listing of options, see the ibmcloud ce app create command.

Before you begin

  1. To add access to Container Registry, create an IAM API key. To create an IBM Cloud IAM API key with the CLI, run the iam api-key-create command. For example, to create an API key called cliapikey with a description of "My CLI API key" and save it to a file called key_file, run the following command:

    ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file
    

    If you choose to not save your key to a file, you must record the API key that is displayed when you create it. You cannot retrieve it later.

  2. After you create your API key, add registry access to Code Engine. To add access to Container Registry with the CLI, use the ibmcloud ce secret create --format registry command to create a registry secret. For example, the following command creates registry access to a Container Registry instance called myregistry. Note, even though the --server and --username options are specified in the example command, the default value for the --server option is us.icr.io and the --username option defaults to iamapikey when the server is us.icr.io.

    ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password APIKEY
    

    Example output

    Creating registry secret 'myregistry'...
    OK
    
  3. Create your app and reference the hello_repo image in Container Registry. For example, use the ibmcloud ce app create command to create the myhelloapp app to reference the us.icr.io/mynamespace/hello_repo by using the myregistry access information.

    ibmcloud ce app create --name myhelloapp --image us.icr.io/mynamespace/hello_repo --registry-secret myregistry
    

    The format of the name of the image for this application is REGISTRY/NAMESPACE/REPOSITORY:TAG where REGISTRY and TAG are optional. If REGISTRY is not specified, the default is docker.io. If TAG is not specified, the default is latest.

  4. After your app deploys, you can access the app. To obtain the URL of your app, run ibmcloud ce app get --name myhelloapp --output url. When you curl the myhelloapp app, Hello World is returned.

    curl https://myhelloapp.abcdabcdhye.us-south.codeengine.appdomain.cloud
    

Next steps

After your app is deployed, you can update your deployed app and its referenced code by using any of the following ways, independent of how you created or previously updated your app:

  • If you have a container image, per the Open Container Initiative (OCI) standard, then you need to provide only a reference to the image, which points to the location of your container registry when you deploy your app. You can deploy your app with an image in a public registry or private registry.

    If you created your app by using the app create command and you specified the --build-source option to build the container image from local or repository source, and you want to change your app to point to a different container image, you must first remove the association of the build from your app. For example, run ibmcloud ce application update -n APP_NAME --build-clear. After you remove the association of the build from your app, you can update the app to reference a different image.

  • If you are starting with source code that resides in a Git repository, you can choose to let Code Engine take care of building the image from your source and deploying the app with a single operation. In this scenario, Code Engine uploads your image to IBM Cloud® Container Registry. To learn more, see Deploying your app from repository source code. If you want more control over the build of your image, then you can choose to build the image with Code Engine before you deploy your app.

  • If you are starting with source code that resides on a local workstation, you can choose to let Code Engine take care of building the image from your source and deploying the app with a single CLI command. In this scenario, Code Engine uploads your image to IBM Cloud® Container Registry. To learn more, see Deploying your app from local source code with the CLI. If you want more control over the build of your image, then you can choose to build the image with Code Engine before you deploy your app.

    For example, you might choose to let Code Engine handle the build of your local source while you evolve the development of your source for the app. Then, after the image is matured, you can update the deployed app to reference the specific image that you want. You can repeat this process as needed.

When you deploy your updated app, the latest version of your referenced container image is downloaded and deployed, unless a tag is specified for the image. If a tag is specified for the image, then the tagged image is used for the deployment.

Looking for more code examples? Check out the Samples for IBM Cloud Code Engine GitHub repo.