---
# System prepended metadata

title: Docker
tags: [arch linux]

---

Docker 
===
###### tags: `arch linux`
windows docker:https://www.youtube.com/watch?v=YozfiLI1ogY
https://www.youtube.com/watch?v=eGz9DS-aIeY
COPY url : https://yeasy.gitbook.io/docker_practice/image/dockerfile/copy
Arch wiki docker: https://wiki.archlinux.org/title/docker
# Docker permissions 
https://quietbo.com/2022/06/06/docker-%E5%BB%BA%E7%AB%8B%E7%BE%A4%E7%B5%84-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket-at-unix%E8%A7%A3%E6%B1%BA/
# make group 
```
sudo groupadd docker
```
this will make a docker group 
but you may see this also 
```
groupadd: group 'docker' already exists
``` 
because its already there 



# add user into docker group 
```
sudo gpasswd -a $USER docker
```
this auto makes your user into docker group $USER stands for USER variable 
you could also change it to any name you want 
there should be a message like below 
```
Adding user admins to group docker
```
# At last 
```
newgrp docker
sudo systemctl restart docker
```
you will no longer need to add sudo before your docker 
# RUN = create + start 
```
sudo docker run -itd --name <insert_name> <insert_image>
```
this runs a a detached container in the back ground 
for example 
```
docker run -td --name test archlinux 
```
# exec 
```
sudo docker exec -it <insert_name> bash 
```
this will make you enter the docker conatiner 
# create 
```  
sudo docker create -itd --name <name> <image>
```
only creating a docker container 
d stands for detach which means it stays in the background 
# stop container 
```
sudo docker stop <container_name>
```
# start docker again with:
```
docker start <insert_container>
```
# how to copy a file to a container 
```
docker cp index.html nginx_base:/usr/share/nginx/html/index.html
```
# docker rm
```
docker rm <insert_conatiner_name>
```
command to rmove container 
# stop running container 
```
docker kill <CONTAINER ID>
```
# docker prune
```
docker prune 
```
https://docs.docker.com/engine/reference/commandline/container_prune/
kills all stopped containers
# create image from a container 
```
docker commit <insert_name>
```
https://www.dataset.com/blog/create-docker-image/

# docker commands 
```
-d #detach works in the back 
-it # interactive terminal 
--rm # removes itself after stop command
--name #name
--gpus #how many gpus if specified need another name for the gpu 
-p # 80:80 as an example is porting your 80 port to the conatiners 80 port 

```
# docker cheat sheet 
![](https://i.imgur.com/09crmnI.png)
https://dockerlabs.collabnix.com/docker/cheatsheet/


# docker gpu 
document :https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/user-guide.html
install the ==nvidia-container-toolkit==AUR package. Next, restart docker. You can now run containers that make use of NVIDIA GPUs using the --gpus option:
```
docker run -itd --gpus all --name <insert_name> <insert_image>
```
### specify how many gpus:
if you try to specify the gpu you have to give a devive parameter 
```
docker run --rm --runtime=nvidia \
    -e NVIDIA_VISIBLE_DEVICES=all nvidia/cuda nvidia-smi
```
### specify which gpu 
```
docker run --rm --gpus 2 nvidia/cuda nvidia-smi
```
or 
```
docker run --gpus '"device=UUID-ABCDEF,1"' nvidia/cuda:11.3.0-runtime-ubuntu20.04 nvidia-smi
```

another 
Query the GPU UUID using nvidia-smi and then specify that to the container
```
$ nvidia-smi -i 3 --query-gpu=uuid --format=csv
```
```
uuid
GPU-18a3e86f-4c0e-cd9f-59c3-55488c4b0c24
```
```
$docker run --gpus device=GPU-18a3e86f-4c0e-cd9f-59c3-55488c4b0c24 \
     nvidia/cuda nvidia-smi
```
# docker networking 
https://www.youtube.com/watch?v=bKFMS5C4CG0&t=98s
with 
```
ip link
```
or 
```
ip address show 
```
you can see your ips 

# for docker ips 
and then 
```
docker network ls 
```
# bridge 
on default the container is pushed into the bridge network  via virtual ethernet
```
bridge link
```
```
docker inspect bridge 
```
```
docker inspect <name>
```

however you cant access through this method you have to maunally open the port 


# manually open port 
run your container with  -p example 
```
docker run -itd --rm -p 80:80 --name <name> <image>
```
you can access it via url 
internal ip address + port 
```
ip:80
```
# create a network 
```
docker network create <name>
```
you can check with 
```
docker network ls 
```
if it is working 
next time you run a container you do the following 
```
docker run -itd --rm --network <name_of_network> --name <name> <image>
```
this method derives from the port exposed 
#### note:
you can do all the following to check:
```
ip address show 
bridge link 
docker inspect <name>
```
you can access it now through network
```
# you can ping them by 
ping <name>
```
# connect to host network 
```
docker run -itd --rm --network host --name <name> <image>
```
# The mac VLan network
```
docker network create -d macvlan \
--subnet <homenetwork> \
--gateway <router> \
-o parent=<hostnetworkinterface> /
<name>
```
![](https://i.imgur.com/3bbCzHW.png)
<homenetwork> 填 192.168.0.102/24
<hostnetworkinterface> 填(enp112s0)
<router> 填 192.168.0.1
get router from command:
```
ip route show | grep -i 'default via'| awk '{print $3 }'
```
or 
```
ip route show default
```
and the 
```
docker network create -d macvlan \
> --subnet 192.168.0.102/24 \
> --gateway 192.168.0.1 \
> -o parent=enp112s0 \
> testnetwork
```
check via 
```
docker network ls 
```

# DHCP range 
network, 192.168.1.0 - 192.168.1.254 

to check if its there 
now assign it like this:
```
docker run -itd --rm \
--network <name_of_network> \
--ip <DHCP_range>
--name <name> <image>
```
# promisuous mode enable

```
sudo ip link set enp112s0 promisc on 
````
# new 
docker run --name netshoot -it --network custombridge --rm nicolaka/netshoot /bin/bash
https://www.youtube.com/watch?v=5grbXvV_DSk&t=183s



docker network create -d macvlan --subnet 192.168.0.0/24 --gateway 192.168.0.1 \
> --ip-range 192.168.0.253/32 -o parent=enp112s0 custommacvlan

https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/


https://collabnix.com/2-minutes-to-docker-macvlan-networking-a-beginners-guide/


https://www.reddit.com/r/docker/comments/o26zi5/comment/h24wfvl/

