### Description

This issue should be resolved by simply adding `ulimits` parameter to `DockerOperator` that is directly passed to [`create_host_config`](https://docker-py.readthedocs.io/en/stable/api.html#docker.api.container.ContainerApiMixin.create_host_config).

### Use case/motivation

Currently applying custom `ulimits` is not possible with `DockerOperator`, making it necessary to do some hacky entrypoint workarounds instead.

By implementing this feature, one should be able to set Ulimits directly by giving a list of [`Ulimit`](https://docker-py.readthedocs.io/en/stable/api.html#docker.types.Ulimit)-instances to `DockerOperator`.


### Related issues

_No response_

### Are you willing to submit a PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

"""Retrieve command(s).
        If command string starts with ``[``, the string is treated as a Python
        literal and parsed into a list of commands.
        :param command: Docker command or entrypoint
        :return: the command (or commands)
        """
        if isinstance(command, str) and command.strip().startswith("["):
            command = ast.literal_eval(command)
        return command
    def on_kill(self) -> None:
        if self.hook.client_created:
            self.log.info("Stopping docker container")
            if self.container is None:
                self.log.info("Not attempting to kill container as it was not created")
                return
            self.cli.stop(self.container["Id"])
    @staticmethod
    def unpack_environment_variables(env_str: str) -> dict:
        r"""Parse environment variables from the string.
        :param env_str: environment variables in the ``{key}={value}`` format,
            separated by a ``\n`` (newline)
        :return: dictionary containing parsed environment variables
        """
        return dotenv_values(stream=StringIO(env_str))