## Symbolic Representation

The problem can be converted into a symbolic representation as follows:

* Let `x1` be the number of small containers of fish food and `x2` be the number of bulk size containers of fish food.
* The objective function is to maximize profit: `2*x1 + 7*x2`.
* The constraints are:
	+ Fish food availability: `10*x1 + 30*x2 <= 200`.
	+ Filling time availability: `2*x1 + 7*x2 <= 120`.
	+ Non-negativity: `x1 >= 0`, `x2 >= 0`.

The symbolic representation can be summarized as:
```json
{
    'sym_variables': [('x1', 'small containers of fish food'), ('x2', 'bulk size containers of fish food')],
    'objective_function': '2*x1 + 7*x2',
    'constraints': [
        '10*x1 + 30*x2 <= 200',
        '2*x1 + 7*x2 <= 120',
        'x1 >= 0',
        'x2 >= 0'
    ]
}
```

## Gurobi Code

Here is the Gurobi code to solve the optimization problem:
```python
import gurobi

# Create a new model
model = gurobi.Model()

# Define the variables
x1 = model.addVar(lb=0, name="small_containers")
x2 = model.addVar(lb=0, name="bulk_size_containers")

# Define the objective function
model.setObjective(2*x1 + 7*x2, gurobi.GRB.MAXIMIZE)

# Define the constraints
model.addConstr(10*x1 + 30*x2 <= 200, name="fish_food_availability")
model.addConstr(2*x1 + 7*x2 <= 120, name="filling_time_availability")

# Optimize the model
model.optimize()

# Print the solution
if model.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Number of small containers: {x1.varValue}")
    print(f"Number of bulk size containers: {x2.varValue}")
    print(f"Maximum profit: {model.objVal}")
else:
    print("No optimal solution found.")
```