---
# System prepended metadata

title: Docker 入門與實戰

---

# Docker 入門與實戰

[TOC]

## 1.1 什麼是Docker
1. 基於Go語言實現的**雲端技術開源專案**
2. Docker引擎的基礎是Linux容器(LXC)技術。
3. 提供各種容器管理工具（如分派、版本管理等）。
4. 使用者操作Docker容器，就像操作<font color=red>**一個輕量級的虛擬機**。</font>
5. 
## 1.2 為什麼要使用Docker
1. 伺服器搬移往往需要重新部署和設定調整。Docker提供把應用程式包在容器裡，搬移到其他伺服器可以直接啟動
2. Docker幾乎可以再任意的平台上運行，包括實體機、虛擬機、公有私有雲、個人電腦、伺服器等。
3. 和虛擬器比較：較快、所需資源需求少、類似git的簡單操作、透過dockerfile設定檔彈性高。

## 2.1 基本概念
- 映像檔(Image)
    可將它視為一個專屬於Docker引擎的**唯讀**模板，包含了檔案系統。
    例如：一個Ubuntu映像檔（包含一個完整的Ubuntu環境）等。
- Docker容器(Container)
    類似一個輕量級沙箱，Docker放用容器來運行和隔離應用，
    容器是用Image所創造出來的Instance(執行實力)，可以將其建立、開始、停止、刪除
    可以把容器看作一個簡易版的Linux系統環境
- Docker Repository(倉庫)
    Docker集中存放Image的場所。
    分為公開和私有兩種形式。
    例如：Docker hub

## 2.2 安裝Docker

## 3.1 取得Image
取得最新的Ubuntu作業系統映像檔範例
```shell=
sudo docker pull ubuntu
sudo docker pull ubuntu:14:04 #指定版本
```

下載後，利用該Image建立一個容器，在其中執行bash程式
```shell=
sudo docker run -t -i ubuntu /bin/bash
root@fe7fc4bd8fc9:/#
```

## 3.2 查看Image資訊
各欄
- 倉庫來源
- Image標籤資訊
- Image ID號
- 建立時間(SHA-1 Hash針對Image做checksum的唯一編碼)。
- Image size
```shell=
sudo docker images # 查看有什麼Image（同一個有別名的都會列出來）
sudo docker inspect [ID] # 查看完整資訊 => JSON
```

## 3.3 搜尋Image
```shell=
sudo docker search mysql # 搜尋具有mysql關鍵字的Image（搜尋玩就可以知道要載哪一個了？）
```

## 3.4 刪除Image
```shell=
sudo docker rmi [TIMAGE ID or Tag Name]
```

查看**本機**上存在的Image
```shell=
sudo docker ps -a
```

Image仍在使用無法刪除，強制刪除（使用-f參數）（暴力不推薦）
```shell=
sudo docker rmi -f ubuntu
```
先刪掉該Image相關的Container（好的作法）
```shell=
sudo docker rm e81 # [Container ID的前幾碼]
```

## 3.5 建立Image
啟動一個Image => 進行修改（比如新增一個test檔）=> commit建立新的Image
```shell=
$ sudo docker run -ti ubuntu:14.04 /bin/bash
root@a925cb40b3f0:/# touch test
root@a925cb40b3f0:/# exit
$ sudo docker commit -m "Added a new file" -a "author info" a925cb40b3f0 test

$ sudo docker images
REPOSITORY  TAG     IMAGE ID      CREATED        VIRTUAL SIZE
test        latest  a925cb40b3f0  4 seconds ago  225.4 MB
```

## 3.6 儲存及載入Image
把本機Image另存為.tar檔
```shell=
sudo docker save -o ubuntu_14.04.tar ubuntu:14.04
```
載入
```shell=
sudo docker load < ubuntu_14.04.tar
```

儲存載入並傳到雲端
```shell=
sudo docker save ubuntu:latest | ssh ubuntu@REMOTE-SERVER sudo docker load
```

## 3.7 上傳映像檔
傳到Docker Hub
把本機的Image加新標籤在上傳
```shell=
sudo docker tag test:latest user/test:latest
sudo docker push user/test:latest
# push 之後會請你login
```

## 4.1 建立Container
```shell=
docker run --name createAContainerName -d -p 8080:80 myImageName:myImageTags
# -d 是讓docker在後端運行
```


## push 上去dockerhub
[參考資料](https://ithelp.ithome.com.tw/articles/10192824)
```shell=

```

    