2017-10-31 03:47:38 ][ Tags: hacking python docker django
Docker and docker-compose make it dead simple to avoid dependency hell and have a consistent environment for your whole team while doing local development. This post walks through setting up a new Django project from scratch to use Docker and docker-compose. It is modeled after a previous post that I wrote about doing a similar thing with Laravel and MySQL.
Nothing too interesting happening here. Installing python and pip.
FROM ubuntu:16.04 # system update RUN apt update RUN apt upgrade -y # python deps RUN apt install -y python3-dev python3-pip
version: '2' services: app: build: . ports: - "8000:8000" volumes: - .:/app working_dir: /app command: bash -c "pip3 install -r requirements.txt && python3 manage.py migrate && python3 manage.py runserver 0:8000" depends_on: - db db: image: postgres:9.6.5-alpine environment: - POSTGRES_USER=feedread - POSTGRES_PASSWORD=feedread volumes: - ./data:/var/lib/postgresql/data ports: - "5432:5432"
With this in place you can start your Django app with
docker-compose up. Each time the app starts it will install the latest dependencies, run migrations, and start serving the app on localhost:8000
In order to do stuff with the database locally you should add the following record to your local /etc/hosts file
# /etc/hosts 127.0.0.1 db
Since we define -
.:/app as a volume, this means that all of your local changes are immediately visible in the dockerized app.
docker-compose exec app bashor
docker-compose exec db bash.
2017-04-08 17:49:15 ][ Tags: hacking php laravel docker
Docker is awesome. Its also quite useful for local development. The following Dockerfile and docker-compose.yml will be helpful if you want to do laravel development inside of docker. I am using Ubuntu as a base, but you can probably use the official PHP image as well. Dockerfile
FROM ubuntu:16.04 RUN apt update RUN apt install -y php7.0 php7.0-zip php7.0-mbstring phpunit curl php7.0-mysql RUN curl -sS https://getcomposer.org/installer | php RUN mv composer.phar /usr/local/bin/composer RUN composer global require "laravel/installer" RUN export PATH=$HOME/.config/composer/vendor/bin:$PATH
version: '2' services: app: build: . ports: - "8000:8000" volumes: - .:/code env_file: .env working_dir: /code command: bash -c 'php artisan migrate && php artisan serve --host 0.0.0.0' depends_on: - db db: image: "mysql:5.7" environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=$your_db - MYSQL_USER=$your_db_user - MYSQL_PASSWORD=$your_db_password volumes: - ./data/:/var/lib/mysql ports: - "3306:3306"
.env file Your .env file is what Laravel uses when it starts up set up various things. The only real thing to change is your DB connection info. A full sample is shown below:
APP_ENV=local APP_KEY=$your_app_key APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://localhost DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=$your_db DB_USERNAME=$your_db_user DB_PASSWORD=$your_db_password BROADCAST_DRIVER=log CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_DRIVER=smtp MAIL_HOST=mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null PUSHER_APP_ID= PUSHER_KEY= PUSHER_SECRET=
In order to do stuff with the database you should add the following
record to your local
# /etc/hosts 127.0.0.1 db
You should still install
npm and run
npm install from your local
machine so that you can do frontend stuff.
- .:/codeas a volume, this means that all of your local changes are immediately visible in the dockerized app.
docker-compose run app bashor
docker-compose run db bash
2015-12-17 18:39:43 ][ Tags: docker
Huge thank you to Frank for helping me devop. Run these wherever the Dockerfile is
docker build -t \$USER/\$NAME:\$TAG .
docker images List running containers: docker ps
docker run -it \$IMAGE\_NAME -p \$HOST:\$DOCKER bash
If \$TAG is not specified, will use latest
docker run --name \$APP\_NAME -p \$HOST:\$DOCKER \$IMAGE\_NAME:\$TAG
Pushes image out
docker push \$IMAGE\_NAME:\$TAG docker pull \$IMAGE\_NAME:\$TAG