| Line 1: |
Line 1: |
| − | = Install = | + | =Install= |
| − | <source lang="bash">sudo apt-get remove docker docker-engine docker.io
| + | [https://docs.docker.com/install/linux/docker-ce/ubuntu/ Docker-CE]<br /> |
| | + | [https://docs.docker.com/compose/install/ Docker-compose]<br /> |
| | + | |
| | + | <source lang="bash">sudo apt-get remove docker docker-engine docker.io |
| | sudo apt-get update | | sudo apt-get update |
| | sudo apt-get install apt-transport-https ca-certificates curl software-properties-common | | sudo apt-get install apt-transport-https ca-certificates curl software-properties-common |
| Line 18: |
Line 21: |
| | ### old: curl -sSL https://get.docker.com/ | sh</source> | | ### old: curl -sSL https://get.docker.com/ | sh</source> |
| | | | |
| | + | ==Docker Swarm== |
| | + | <source lang="bash">docker swarm init --advertise-addr=<IP-ADDRESS-OF-MANAGER> |
| | + | docker network create -d overlay nginx-proxy |
| | + | docker pull postgres:10.6 && docker pull redis:3.2-alpine && docker pull jwilder/nginx-proxy</source> |
| | | | |
| − | == Examples == | + | ==Examples== |
| − | docker pull python:2.7
| + | <source lang="bash">docker pull python:2.7 |
| − | docker run -i -t python:2.7
| + | docker run -i -t python:2.7 |
| − | docker docker run -i -t python:2.7 bash
| + | docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=owncloud\\.rra\\.lan' --restart always --cap-add MKNOD collabora/code |
| − | docker ps -a
| + | docker docker run -i -t python:2.7 bash |
| − | docker pull linuxkonsult/kali-metasploit
| + | docker ps -a |
| − | docker search kali
| + | docker pull linuxkonsult/kali-metasploit |
| − | docker run -ti -v "/home/rafa/LocalPath:/ContainerPath" git.rra.lan:4443/docker/pilaf_testrunner/converter:latest /bin/bash # mounts local path folder on docker container
| + | docker search kali |
| | + | docker run -ti -v "/home/rafa/LocalPath:/ContainerPath" git.rra.lan:4443/docker/pilaf_testrunner/converter:latest /bin/bash # mounts local path folder on docker container |
| | | | |
| − | docker images | + | # Run container with name and volumes |
| − | docker run -i -t linuxkonsult/kali-metasploit bash
| + | docker run -t -d -p 0.0.0.0:9980:9980 -e "server_name=owncloud\\.rra\\.lan" -v "/etc/collabora/certs:/etc/loolwsd/certs" -e "domain=owncloud\\.rra\\.lan" --restart always --cap-add MKNOD --name collabora collabora/code |
| | + | |
| | + | # View logs |
| | + | docker logs -f collabora |
| | + | |
| | + | docker images |
| | + | docker run -i -t linuxkonsult/kali-metasploit bash |
| | | | |
| − | # Remove all containers
| + | # Remove all containers |
| − | docker rm $(docker ps -aq)
| + | docker kill $(docker ps -q) && docker rm $(docker ps -aq) |
| | | | |
| − | # Remove one image
| + | # Remove one image |
| − | docker rmi ae024c7584a3
| + | docker rmi ae024c7584a3 |
| − | # Remove incompletely built images:
| + | # Remove incompletely built images: |
| − | docker images | grep -v IMAGE\ ID | awk '{print "docker rmi " $3;}'
| + | docker images | grep -v IMAGE\ ID | awk '{print "docker rmi " $3;}'</source> |
| | | | |
| − | = Restart stopped container with diferent command = | + | ==Docker container root shell== |
| | + | <syntaxhighlight lang="bash"> |
| | + | docker exec -u 0 -it cranky_neumann /bin/bash |
| | + | </syntaxhighlight> |
| | + | |
| | + | =Restart stopped container with diferent command= |
| | Find your stopped container id | | Find your stopped container id |
| − | docker ps -a
| + | <source lang="bash">docker ps -a</source> |
| | Commit the stopped container: | | Commit the stopped container: |
| | This command saves modified container state into a new image user/test_image | | This command saves modified container state into a new image user/test_image |
| − | docker commit $CONTAINER_ID user/test_image
| + | <source lang="bash">docker commit $CONTAINER_ID user/test_image</source> |
| | Start/run with a different entry point: | | Start/run with a different entry point: |
| − | docker run -ti --entrypoint=sh user/test_image
| + | <source lang="bash">docker run -ti --entrypoint=sh user/test_image</source> |
| | | | |
| − | == Restart exited container == | + | ==Restart exited container== |
| − | docker start `docker ps -q -l` # restart it in the background
| + | <source lang="bash">docker start `docker ps -q -l` # restart it in the background |
| − | docker attach `docker ps -q -l` # reattach the terminal & stdin
| + | docker attach `docker ps -q -l` # reattach the terminal & stdin</source> |
| | | | |
| − | == Create & Publish image == | + | ==Create & Publish image== |
| − | mkdir rpi_python
| + | <source lang="bash">mkdir rpi_python |
| − | nano rpi_python/Dockerfile
| + | nano rpi_python/Dockerfile</source> |
| | | | |
| − | Docekerfile | + | ==Docekerfile== |
| − | <nowiki># Pull base image
| + | <source lang="dockerfile"># Pull base image |
| | FROM resin/rpi-raspbian:wheezy | | FROM resin/rpi-raspbian:wheezy |
| | MAINTAINER Dieter Reuter <dieter@hypriot.com> | | MAINTAINER Dieter Reuter <dieter@hypriot.com> |
| − | | + | |
| | # Install dependencies | | # Install dependencies |
| | RUN apt-get update && apt-get install -y \ | | RUN apt-get update && apt-get install -y \ |
| Line 69: |
Line 88: |
| | --no-install-recommends && \ | | --no-install-recommends && \ |
| | rm -rf /var/lib/apt/lists/* | | rm -rf /var/lib/apt/lists/* |
| − | | + | |
| | # Define working directory | | # Define working directory |
| | WORKDIR /data | | WORKDIR /data |
| | + | |
| | + | # Define default command |
| | + | CMD ["bash"]</source> |
| | + | |
| | + | <source lang="bash">docker build -t DOCKER_HUB_USERNAME/rpi_python:0.0.1 . |
| | + | # Or with multiple tags |
| | + | docker build -t DOCKER_HUB_USERNAME/rpi_python:0.0.1 -t DOCKER_HUB_USERNAME/rpi_python:latest . |
| | + | # List images |
| | + | docker images |
| | + | # Test image |
| | + | docker run -rm -it DOCKER_HUB_USERNAME/rpi_python:0.0.1 |
| | + | # Login |
| | + | docker login |
| | + | docker push DOCKER_HUB_USERNAME/rpi_python:0.0.1</source> |
| | + | |
| | + | ===Pull Modify Commit=== |
| | + | <source lang="bash">sudo docker pull ubuntu |
| | + | sudo docker run ubuntu apt-get install -y ping</source> |
| | + | |
| | + | Then get the container id using this command: |
| | + | <source lang="bash">sudo docker ps -l</source> |
| | + | Commit changes to the container: |
| | + | <source lang="bash">sudo docker commit <container_id> iman/ping</source> |
| | + | Then run the container: |
| | + | <source lang="bash">sudo docker run iman/ping ping www.google.com</source> |
| | + | |
| | + | ==Docker mirror== |
| | + | <syntaxhighlight lang="bash"> |
| | + | #!/bin/bash |
| | + | |
| | + | # PULL |
| | + | docker login gitrra.dyndns.org:4443 |
| | + | docker login git.rra.lan:4443 |
| | + | |
| | + | FROM=gitrra.dyndns.org:4443/rra/pdgrt/deployment/ |
| | + | TO=git.rra.lan:4443/pdgrt_2.0_mirror/deployment/ |
| | | | |
| − | # Define default command
| + | REPOS="pdgrt-central-frontend pdgrt-proxy-frontend pdgrt-node-frontend pdgrt-proxy-backend/django pdgrt-proxy-backend/nginx pdgrt-node-backend/django pdgrt-node-backend/nginx pdgrt-central-backend/django pdgrt-central-backend/nginx" |
| − | CMD ["bash"]</nowiki>
| + | |
| | + | |
| | + | for repo in ${REPOS}; do |
| | + | docker pull ${FROM}${repo} |
| | + | docker tag ${FROM}${repo} ${TO}${repo} |
| | + | docker push ${TO}${repo} |
| | + | done |
| | + | |
| | + | </syntaxhighlight> |
| | + | |
| | + | ==Run command on running container== |
| | + | <syntaxhighlight lang="bash"> |
| | + | docker exec -ti es01 /bin/bash |
| | + | </syntaxhighlight> |
| | + | |
| | + | ==Dockerfile reference== |
| | + | https://docs.docker.com/engine/reference/builder/ |
| | + | |
| | + | ==Docker custom registry== |
| | + | <code>docker run --rm -v test-volume:/contents registry.roqs.basf.net/base-images/alpine ls /</code> |
| | + | |
| | + | <br /> |
| | + | |
| | + | ==Docker-compose== |
| | + | ===Use this docker compose to run the project locally=== |
| | + | |
| | + | *To start all services: |
| | + | |
| | + | <code>docker-compose up --build --remove-orphans --detach</code> |
| | + | |
| | + | *To restart only one service: |
| | + | |
| | + | <code>docker-compose up --build --remove-orphans --detach <service_name></code> |
| | + | |
| | + | *To stop one service: |
| | + | |
| | + | <code>docker-compose stop <service_name></code> |
| | + | |
| | + | *To stop all services: |
| | + | |
| | + | <code>docker-compose down</code> |
| | + | |
| | + | *To view logs of a service: |
| | | | |
| − | docker build -t DOCKER_HUB_USERNAME/rpi_python:0.0.1 .
| + | <code>docker-compose logs -f <service_name></code> |
| − | # Or with multiple tags
| |
| − | docker build -t DOCKER_HUB_USERNAME/rpi_python:0.0.1 -t DOCKER_HUB_USERNAME/rpi_python:latest .
| |
| − | # List images
| |
| − | docker images
| |
| − | # Test image
| |
| − | docker run -rm -it DOCKER_HUB_USERNAME/rpi_python:0.0.1
| |
| − | # Login
| |
| − | docker login
| |
| − | docker push DOCKER_HUB_USERNAME/rpi_python:0.0.1
| |
| | | | |
| − | === Pull Modify Commit ===
| + | *To view logs of all services: |
| | | | |
| − | <nowiki>210
| + | <code>docker-compose logs -f</code> |
| − | down vote
| |
| − | accepted
| |
| − |
| |
| | | | |
| − | You need to commit the changes you make to the container and then run it. Try this:
| + | === docker-compose.yml example for multiple services === |
| | + | <syntaxhighlight lang="yaml"> |
| | | | |
| − | sudo docker pull ubuntu
| + | version: '3.8' |
| | | | |
| − | sudo docker run ubuntu apt-get install -y ping
| + | services: |
| | + | postgres: |
| | + | image: postgres:14.13 |
| | + | environment: |
| | + | POSTGRES_DB: mydatabase |
| | + | POSTGRES_USER: myuser |
| | + | POSTGRES_PASSWORD: mypassword |
| | + | volumes: |
| | + | - postgres_data:/var/lib/postgresql/data |
| | + | ports: |
| | + | - "5432:5432" |
| | | | |
| − | Then get the container id using this command:
| + | redis: |
| | + | image: redis:latest |
| | + | ports: |
| | + | - "6379:6379" |
| | | | |
| − | sudo docker ps -l
| + | celery: |
| | + | build: |
| | + | context: . |
| | + | dockerfile: Dockerfile |
| | + | environment: |
| | + | DJANGO_SETTINGS_MODULE: app.settings |
| | + | REDIS_HOST: redis |
| | + | DB_HOST: postgres |
| | + | DB_PORT: 5432 |
| | + | DB_NAME: mydatabase |
| | + | DB_USER: myuser |
| | + | DB_PASSWORD: mypassword |
| | | | |
| − | Commit changes to the container:
| + | volumes: |
| | + | - .:/app |
| | + | - ./media:/app/media |
| | + | working_dir: /app |
| | + | command: celery -A app worker --loglevel=info |
| | + | depends_on: |
| | + | - postgres |
| | + | - redis |
| | | | |
| − | sudo docker commit <container_id> iman/ping
| + | flower: |
| | + | build: |
| | + | context: . |
| | + | dockerfile: Dockerfile |
| | + | environment: |
| | + | DJANGO_SETTINGS_MODULE: app.settings |
| | + | DB_HOST: postgres |
| | + | DB_NAME: mydatabase |
| | + | DB_USER: myuser |
| | + | DB_PASSWORD: mypassword |
| | + | REDIS_HOST: redis |
| | + | volumes: |
| | + | - .:/app |
| | + | - ./media:/app/media |
| | + | working_dir: /app |
| | + | command: celery -A app flower --loglevel=info --basic-auth=admin:admin |
| | + | depends_on: |
| | + | - postgres |
| | + | - redis |
| | + | ports: |
| | + | - "5555:5555" |
| | | | |
| − | Then run the container:
| + | django: |
| | + | build: |
| | + | context: . |
| | + | dockerfile: Dockerfile |
| | + | environment: |
| | + | DJANGO_SETTINGS_MODULE: app.settings |
| | + | REDIS_HOST: redis |
| | + | DB_HOST: postgres |
| | + | DB_PORT: 5432 |
| | + | DB_NAME: mydatabase |
| | + | DB_USER: myuser |
| | + | DB_PASSWORD: mypassword |
| | + | volumes: |
| | + | - .:/app |
| | + | - ./media:/app/media |
| | + | working_dir: /app |
| | + | command: python3 manage.py runserver 0.0.0.0:8000 |
| | + | depends_on: |
| | + | - postgres |
| | + | - redis |
| | + | ports: |
| | + | - "8000:8000" |
| | | | |
| − | sudo docker run iman/ping ping www.google.com</nowiki>
| + | volumes: |
| | + | postgres_data: |
| | + | driver: local |
| | | | |
| − | == Dockerfile reference ==
| + | </syntaxhighlight><br /> |
| − | https://docs.docker.com/engine/reference/builder/
| |