Difference between revisions of "Docker"
Jump to navigation
Jump to search
Rafahsolis (talk | contribs) |
Rafahsolis (talk | contribs) Tag: visualeditor |
||
| (35 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| − | = Install = | + | =Install= |
| − | + | [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 install apt-transport-https ca-certificates curl software-properties-common | |
| − | + | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - | |
| − | + | sudo apt-key fingerprint 0EBFCD88 | |
| − | + | sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ | |
| + | $(lsb_release -cs) \ | ||
| + | stable" | ||
| + | apt-get update | ||
| + | # At production usse specific version: | ||
| + | apt-cache madison docker-ce | ||
| + | apt-get install docker-ce=18.03.0~ce-0~ubuntu | ||
| + | # Otherwise apt install docker-ce | ||
| + | sudo curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose | ||
| + | chmod +x /usr/local/bin/docker-compose | ||
| + | sudo curl -L https://raw.githubusercontent.com/docker/compose/1.20.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose | ||
| + | ### old: curl -sSL https://get.docker.com/ | sh</source> | ||
| − | docker | + | ==Docker Swarm== |
| − | docker | + | <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> | ||
| − | # Remove all containers | + | ==Examples== |
| − | + | <source lang="bash">docker pull python:2.7 | |
| + | docker run -i -t python:2.7 | ||
| + | docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=owncloud\\.rra\\.lan' --restart always --cap-add MKNOD collabora/code | ||
| + | docker docker run -i -t python:2.7 bash | ||
| + | docker ps -a | ||
| + | docker pull linuxkonsult/kali-metasploit | ||
| + | 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 | ||
| + | |||
| + | # Run container with name and volumes | ||
| + | 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 | ||
| + | docker kill $(docker ps -q) && docker rm $(docker ps -aq) | ||
| − | + | # Remove one image | |
| − | + | docker rmi ae024c7584a3 | |
| + | # Remove incompletely built images: | ||
| + | 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 | ||
| − | + | <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 | ||
| − | + | <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: | ||
| − | + | <source lang="bash">docker run -ti --entrypoint=sh user/test_image</source> | |
| + | |||
| + | ==Restart exited container== | ||
| + | <source lang="bash">docker start `docker ps -q -l` # restart it in the background | ||
| + | docker attach `docker ps -q -l` # reattach the terminal & stdin</source> | ||
| − | == Create & Publish image == | + | ==Create & Publish image== |
| − | + | <source lang="bash">mkdir rpi_python | |
| − | + | nano rpi_python/Dockerfile</source> | |
| − | Docekerfile | + | ==Docekerfile== |
| − | + | <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 44: | 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/ | ||
| + | |||
| + | 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" | ||
| + | |||
| + | |||
| + | 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: | ||
| − | + | <code>docker-compose logs -f <service_name></code> | |
| − | + | ||
| + | *To view logs of all services: | ||
| + | |||
| + | <code>docker-compose logs -f</code> | ||
| + | |||
| + | === docker-compose.yml example for multiple services === | ||
| + | <syntaxhighlight lang="yaml"> | ||
| + | |||
| + | version: '3.8' | ||
| + | |||
| + | 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" | ||
| + | |||
| + | redis: | ||
| + | image: redis:latest | ||
| + | ports: | ||
| + | - "6379:6379" | ||
| + | |||
| + | 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 | ||
| + | |||
| + | volumes: | ||
| + | - .:/app | ||
| + | - ./media:/app/media | ||
| + | working_dir: /app | ||
| + | command: celery -A app worker --loglevel=info | ||
| + | depends_on: | ||
| + | - postgres | ||
| + | - redis | ||
| + | |||
| + | 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" | ||
| + | |||
| + | 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" | ||
| + | |||
| + | volumes: | ||
| + | postgres_data: | ||
| + | driver: local | ||
| + | |||
| + | </syntaxhighlight><br /> | ||
Latest revision as of 09:26, 22 August 2025
Install[edit]
sudo apt-get remove docker docker-engine docker.io
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
apt-get update
# At production usse specific version:
apt-cache madison docker-ce
apt-get install docker-ce=18.03.0~ce-0~ubuntu
# Otherwise apt install docker-ce
sudo curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
sudo curl -L https://raw.githubusercontent.com/docker/compose/1.20.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
### old: curl -sSL https://get.docker.com/ | sh
Docker Swarm[edit]
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
Examples[edit]
docker pull python:2.7
docker run -i -t python:2.7
docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=owncloud\\.rra\\.lan' --restart always --cap-add MKNOD collabora/code
docker docker run -i -t python:2.7 bash
docker ps -a
docker pull linuxkonsult/kali-metasploit
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
# Run container with name and volumes
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
docker kill $(docker ps -q) && docker rm $(docker ps -aq)
# Remove one image
docker rmi ae024c7584a3
# Remove incompletely built images:
docker images | grep -v IMAGE\ ID | awk '{print "docker rmi " $3;}'
Docker container root shell[edit]
docker exec -u 0 -it cranky_neumann /bin/bash
Restart stopped container with diferent command[edit]
Find your stopped container id
docker ps -a
Commit the stopped container: This command saves modified container state into a new image user/test_image
docker commit $CONTAINER_ID user/test_image
Start/run with a different entry point:
docker run -ti --entrypoint=sh user/test_image
Restart exited container[edit]
docker start `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin
Create & Publish image[edit]
mkdir rpi_python
nano rpi_python/Dockerfile
Docekerfile[edit]
# Pull base image
FROM resin/rpi-raspbian:wheezy
MAINTAINER Dieter Reuter <dieter@hypriot.com>
# Install dependencies
RUN apt-get update && apt-get install -y \
python \
python-dev \
python-pip \
python-virtualenv \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/*
# Define working directory
WORKDIR /data
# Define default command
CMD ["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
Pull Modify Commit[edit]
sudo docker pull ubuntu
sudo docker run ubuntu apt-get install -y ping
Then get the container id using this command:
sudo docker ps -l
Commit changes to the container:
sudo docker commit <container_id> iman/ping
Then run the container:
sudo docker run iman/ping ping www.google.com
Docker mirror[edit]
#!/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/
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"
for repo in ${REPOS}; do
docker pull ${FROM}${repo}
docker tag ${FROM}${repo} ${TO}${repo}
docker push ${TO}${repo}
done
Run command on running container[edit]
docker exec -ti es01 /bin/bash
Dockerfile reference[edit]
https://docs.docker.com/engine/reference/builder/
Docker custom registry[edit]
docker run --rm -v test-volume:/contents registry.roqs.basf.net/base-images/alpine ls /
Docker-compose[edit]
Use this docker compose to run the project locally[edit]
- To start all services:
docker-compose up --build --remove-orphans --detach
- To restart only one service:
docker-compose up --build --remove-orphans --detach <service_name>
- To stop one service:
docker-compose stop <service_name>
- To stop all services:
docker-compose down
- To view logs of a service:
docker-compose logs -f <service_name>
- To view logs of all services:
docker-compose logs -f
docker-compose.yml example for multiple services[edit]
version: '3.8'
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"
redis:
image: redis:latest
ports:
- "6379:6379"
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
volumes:
- .:/app
- ./media:/app/media
working_dir: /app
command: celery -A app worker --loglevel=info
depends_on:
- postgres
- redis
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"
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"
volumes:
postgres_data:
driver: local