Learning Docker 001 ~Containers~
Tags: docker, devops
Published: 2019-06-29 18:39:17

I have used Docker, but just use for specific things and all images are made by others. So it's time to create my own image to understand Docker correctly.

### Display Docker Info
```zsh
$ docker info
```

### Run docker
```zsh
$ docker run -it --rm ubuntu bash

~/Desktop/docker » docker run -ti --rm ubuntu bash                                                               
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
5b7339215d1d: Pull complete
14ca88e9f672: Pull complete
a31c3b1caad4: Pull complete
b054a26005b7: Pull complete
Digest: sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c
Status: Downloaded newer image for ubuntu:latest
root@7aae2cd83925:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

root@7aae2cd83925:/# uname -a
Linux 7aae2cd83925 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
```


### Show images
```zsh
$ docker images
```


### Run Container
```zsh
$ ~/Desktop/docker » docker run -it ubuntu:latest bash                                                             
root@fa598f1d1951:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@fa598f1d1951:/# pwd
/
root@fa598f1d1951:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"
```


### Check Containers
```zsh
$ docker ps -a --format=$FORMAT
```

https://gist.github.com/wzulfikar/f6f7dc8b9d6aa5bc207eaa31913201d8



### Stop Container
```zsh
root@d558c3197d2e:/# exit

$ docker kill container_name/id
```


### Commit and tag
```zsh
$ docker commit 82924883df95
$ docker tag 83cc840f9145b441be80be8fe45c094c162c56917ccf4f63ec38ea5b60e7ea4f ml_image
$ docker images
```

### Attach & Detach
```zsh
# Attach
$ docker attach container_name

# Detach
Control-p and Control-q
```


### Clean up Containers
```zsh
$ docker rm $(docker ps -qa --no-trunc --filter "status=exited")
```

https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430



### Logs
```zsh
$ docker logs container_name
```

### Expose port
```zsh
$ docker run --name nc_test -it  -p 45678:45678 -p 45679:45679 bash
$ nc -lp 45678 | nc -lp 45679
```

Then open 2 sessions
```zsh
# first session
$ nc localhost 45678
hello world

# second session
$ nc localhost 45679
```

You will see `hello world` in your second session.  


### Connect Containers
Open 2 sessions

```zsh
# first
$ docker run --rm -it -p 1234:1234 ubuntu:14.04 bash
$ nc -lp 1234

# second
$ docker run --rm -it ubuntu:14.04 bash
$ nc ip_address 1234
```

### Use private network

```zsh
$ docker network create test
```

```zsh
# first
$ docker run --rm -it --net=test --name server ubuntu:14.04 bash
$ nc -lp 1234

# second
$ docker run --rm -it --link server --net=test --name client ubuntu:14.04 bash
$ nc ip_address 1234
```


### Volume(shared folder)
I created test.txt inside my docker folder.
```zsh
$ docker run --rm -it -v /Users/koji.kanao/Desktop/docker:/shared-folder ubuntu bash

root@4340eb3f3de0:/# cd shared-folder/
root@4340eb3f3de0:/shared-folder# ls
test.txt

```

### Shared data between Containers
```zsh
# first
$ docker run --rm -it -v /shared_folder ubuntu bash
root@4950f8cf8345:/# echo hello world > /shared_folder/test.txt

# second
$ docker run --rm -it --volumes-from flamboyant_hermann ubuntu bash
root@69669fa09156:/# ls shared_folder/
test.txt
```

![](https://thepracticaldev.s3.amazonaws.com/i/26pzi8a3iu4ffn3dgpcc.png)