Home > Mobile >  CIDC with BitBucket, Docker Image and Azure
CIDC with BitBucket, Docker Image and Azure

Time:12-05

EDITED

I am learning CICD and Docker. So far I have managed to successfully create a docker image using the code below:

Dockerfile

# Docker Operating System
FROM python:3-slim-buster

# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

#App folder on Slim OS
WORKDIR /app

# Install pip requirements
COPY requirements.txt requirements.txt
RUN python -m pip install --upgrade pip pip install -r requirements.txt

#Copy Files to App folder
COPY . /app

docker-compose.yml

version: '3.4'

services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000

My code is on BitBucket and I have a pipeline file as follows:

bitbucket-pipelines.yml

image: atlassian/default-image:2

pipelines:
  branches:
    master:
      - step:
          name:
            Build And Publish To Azure
          services:
            - docker
          script:
            - docker login -u $AZURE_USER -p $AZURE_PASS xxx.azurecr.io

            - docker build -t xxx.azurecr.io .
            - docker push xxx.azurecr.io

With xxx being the Container registry on Azure. When the pipeline job runs I am getting denied: requested access to the resource is denied error on BitBucket.

What did I not do correctly?

Thanks.

The Edit

Changes in docker-compose.yml and bitbucket-pipeline.yml

docker-compose.yml

version: '3.4'

services:
  web:
    build: .
    image: xx.azurecr.io/myticket
    container_name: xx
    command: python manage.py runserver 0.0.0.0:80
    ports:
      - 80:80

bitbucket-pipelines.yml

image: atlassian/default-image:2

pipelines:
  branches:
    master:
      - step:
          name:
            Build And Publish To Azure
          services:
            - docker
          script:
            - docker login -u $AZURE_USER -p $AZURE_PASS xx.azurecr.io

            - docker build -t xx.azurecr.io/xx .
            - docker push xx.azurecr.io/xx

CodePudding user response:

You didnt specify CMD or ENTRYPOINT in your dockerfile.

There are stages when building a dockerfile

Firstly you call an image, then you package your requirements etc.. those are stages that are being executed while the container is building. you are missing the last stage that executes a command inside the container when its already up.

Both ENTRYPOINT and CMD are essential for building and running Dockerfiles.

for it to work you must add a CMD or ENTRYPOINT at the bottom of your dockerfile..

Change your files accordingly and try again.

Dockerfile

# Docker Operating System
FROM python:3-slim-buster

# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

#App folder on Slim OS
WORKDIR /app

# Install pip requirements
COPY requirements.txt requirements.txt
RUN python -m pip install --upgrade pip pip install -r requirements.txt

#Copy Files to App folder
COPY . /app

# Execute commands inside the container
CMD manage.py runserver 0.0.0.0:8000

Check you are able to build and run the image by going to its directory and running

docker build -t app .

docker run -d -p 80:80 app

docker ps

See if your container is running.

Next

Update the image property in the docker-compose file.

Prefix the image name with the login server name of your Azure container registry, .azurecr.io. For example, if your registry is named myregistry, the login server name is myregistry.azurecr.io (all lowercase), and the image property is then myregistry.azurecr.io/azure-vote-front. Change the ports mapping to 80:80. Save the file. The updated file should look similar to the following:

docker-compose.yml

Copy
version: '3'
services:
  foo:
    build: .
    image: foo.azurecr.io/atlassian/default-image:2
    container_name: foo
    ports:
        - "80:80"

By making these substitutions, the image you build is tagged for your Azure container registry, and the image can be pulled to run in Azure Container Instances.

More in documentation

  • Related