---
# System prepended metadata

title: Docker
tags: [' lecture', 109-1]

---

---
tags: 109-1, lecture
---

# Docker

## Installation

以下是各種 OS 載 docker 並讓它不用 root 權限就可執行的指令

成功的話跑 docker ps 應該不會 permission denied，跑 docker-compose 應該要有 help message

### Ubuntu/Mint/Kali Linux

```shell
$ sudo apt install docker.io docker-compose
$ sudo usermod -aG docker $USER
$ newgrp - docker
```

### Arch Linux

```shell
$ sudo pacman -S docker docker-compose
$ sudo usermod -aG docker $USER
$ newgrp docker
```

### MacOS
官方有桌面版，下載執行就好了
https://docs.docker.com/docker-for-mac/install/

### Windows
官方也有桌面版的，下載執行就好了
https://docs.docker.com/docker-for-windows/install/

## Tutorial

https://docs.docker.com/get-started/

https://hub.docker.com/r/docker/getting-started

https://github.com/docker/getting-started



## Resources

- [Documentation](https://docs.docker.com/)
- [Docker Hub](https://hub.docker.com/)
- [Dockerfile reference](https://docs.docker.com/engine/reference/builder/)
- [Compose file reference](https://docs.docker.com/compose/compose-file/)
- https://medium.com/unorthodox-paranoid/docker-tutorial-101-c3808b899ac6


## Note

* 輕量虛擬機
* 包好的東西，可以部署給人很快
* scale: 一個 image 開好多個 container，可以隨著規模變大
* 較安全，因為是虛擬機


* image: 類似 vdi 檔，可以複製很多份給別人，就可以一直開虛擬機器

docker 較正常的虛擬機更快更輕量
![](https://i.imgur.com/bn7NpMC.png)

* docker-hub: 類似放 docker image 的雲端，docker 會去 docker-hub 抓同名字的 image 下來，就可以用了 (類似自己去抓 vdi 檔下來，就有了)

```bash=
$ docker pull getting-started
$ docker run -d -p 80:80 getting-started
# 接著瀏覽器開 localhost 就會有了
# 80 這個 port 就是預設，所以打 localhost:80 也是一樣的

$ docker ps # 正在 run 的
$ docker ps --all

$ docker stop <id> # 停掉虛擬機
$ docker rm <id> # 刪掉
$ docker rm -f <id> # stop + rm


$ docker build -dp <your port>:<inner port> <image name>

$ docker exec -it <id> sh # 進到裡面的 shell

```
